2022.01.02   2022.01.30

【Ansible】playbookの書き方(ローカルからAWSにlsを実行)

Ansible,  AWS,  Mac    

Ansibleのplaybookを使用する方法について記載します。
今回はmacからAWS(EC2)にansible-playbookコマンドを実行し、プレイブックに記述したlsコマンドを実行します。

Ansibleの基礎のはこちらの動画で学習しました。
【udemy】Ansible入門

ansibleのインストール

ansibleをインストールしていない場合は、下記サイトを参考にしてインストールします。

https://docs.ansible.com/ansible/2.9_ja/installation_guide/intro_installation.html

macOSの場合はHomebrewを使用してインストールできます。

brew install ansible

インストールが成功していればansible --versionコマンドが実行できます。

(base) mbp:~ user$ ansible --version
ansible [core 2.12.1]

ansible-playbookコマンドとは

ansible-playbookは、条件分岐や繰り返しなどの複雑な条件をymlファイルに記述して実行できるコマンドです。

単純な処理を実行したい場合はansibleコマンドも利用できます。

ansible-playbookを実行するには、コマンドの引数にインベントリファイル(hosts)プレイブック(playbook)を指定します。

インベントリファイル(hosts)とは

インベントリファイルとは、操作を行いたい端末のIPアドレスやホスト名を記載したファイルです。

接続するユーザーや使用する秘密鍵なども指定できます。

設定の仕方については後述します。

プレイブック(playbook)とは

プレイブックとは、管理対象サーバーに対して実行したい処理(条件分岐や繰り返しなどの複雑な条件)を記述するymlファイルのこと。

playbookとは脚本という意味です。

また、インベントリファイルもプレイブックから読み込みます。

このファイルansible-playbookコマンドに読み込ませることで、playbookに記述した一連の処理を自動実行できます。

こちらの設定の仕方についても後述します。

インベントリファイル(hosts)の作成

ansible-playbookコマンドを実行するために、まずはインベントリファイル(hosts)を作成します。

まず、適当なディレクトリを作成し、移動します。

mkdir ~/ansible_work ; cd ~/ansible_work

ここにインベントリファイルを作成します。

vi hosts
hosts
[group1]
55.66.123.178

[group1:vars]
ansible_user='centos'
ansible_ssh_private_key_file='~/.ssh/mykey.pem'

[group1]箇所の名前はなんでも良いです。その下に接続先サーバーのIPアドレス(またはホスト名)を指定します。改行して複数IPアドレスを設定することも可能です。

[group1]
55.66.123.178

[group1:vars]の箇所ではgroup1の接続先を使用した際に使用するパラメータを設定します。
ansible_userには接続ユーザーを指定します。
ansible_ssh_private_key_fileにはAWS(EC2)に接続するためのpemキーを指定します。

[group1:vars]
ansible_user='centos'
ansible_ssh_private_key_file='~/.ssh/mykey.pem'

プレイブック(playbook)の作成

下記プレイブック(playbook1.yml )ではインベントリファイル(hosts)で定義したgroup1グループの機器に対してlsを実行する設定が記述されています。

playbook1.yml
- hosts: group1

  tasks:
  - name: ls
    shell: ls
    register: result_ls
  - name: result_ls
    debug:
      msg: "{{ result_ls.stdout }}"

hostsには実行対象のグループやホスト名を指定します。

tasksセクションでは実行するタスクを実行順に記述します。

nameは実行するタスク名を設定します。コメントのようなものなので何を指定しても大丈夫です。

shellは指定したOSコマンドを実行するモジュールです。
「command 」モジュールでも同じくOSコマンドを実行できますが、|パイプや>リダイレクト、環境変数の読み込みなどは行なってくれません。

registerはモジュールの実行結果をresultに格納するよう指示しています。

debugmsgで指定した文字列を出力するモジュールです。今回はlsの実行結果を出力しています。

ansible-playbookの実行

インベントリファイルとプレイブックの用意ができたら、下記のようにansible-playbookコマンドを実行します。

ansible-playbook -i hosts playbook1.yml
実行結果
(base) mbp:ansible_work user$ ansible-playbook -i hosts playbook1.yml 

PLAY [group1] ******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [55.66.123.178]

TASK [ls] **********************************************************************
changed: [55.66.123.178]

TASK [result_ls] ***************************************************************
ok: [55.66.123.178] => {
    "msg": "hoge1.txt\nhoge2.txt\nhoge3.txt\nhoge4.txt\nhoge5.txt"
}

PLAY RECAP *********************************************************************
55.66.123.178              : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

TASK [result_ls]"msg":lsの実行結果が出力されています。
ちなみに、ansible で接続したサーバーの状態は下記のようになっています。

[centos@ip-55-66-123-178 ~]$ pwd
/home/centos
[centos@ip-55-66-123-178 ~]$ ls
hoge1.txt    hoge2.txt    hoge3.txt    hoge4.txt    hoge5.txt

これでansibleのplaybookを使用してlsコマンドを実行できたことを確認できました。

playbookを書き換えて別の処理を実行

本記事のインベントリファイルを利用して、別処理を実行する方法を以下記事で紹介しています。
playbookを書き換えて色々な処理を試してみたい方は是非ご参照ください。

【Ansible】tar.gzファイルをEC2サーバーに転送、展開する(AWS)
【Ansible】EC2サーバーにディレクトリを作成する(AWS)
【Ansible】if文で条件分岐させる(if~elfi~else)
【Ansible】ansible-playbookコマンドの引数からplaybookに値(変数)を渡す
【Ansible】whenで{{ }}変数を使用した際の警告対応。should not include jinja2 templating delimiters

Udemy動画

参考記事

Ansibleでシェルコマンドを実行させるときのノウハウ
ansible commandとshellモジュールの違い

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信