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
[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
を実行する設定が記述されています。
- 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
に格納するよう指示しています。
debug
はmsg
で指定した文字列を出力するモジュールです。今回は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動画