Ansibleで始めるInfrastructure as Code(実践編)
みなさんこんにちは
システムソリューション部
SREチーム所属の岡崎です。
前回はAnsibleのツール紹介とインストールについて書かせてもらいましたので今回はいよいよAnsibleの実行方法を紹介したいと思います。
Ansible実行時の構成
Ansible実行に必要なものは以下のようになります。
- hosts ファイル(インベントリファイル)
- playbook
- モジュール
それぞれについて解説いたします。
hosts ファイル(インベントリファイル)とは??
hosts ファイル(インベントリファイル)とは作業対象のホストを記入するファイルとなります。
記入例は以下の通りとなります。
[all] XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX [web] XXX.XXX.XXX.XXX [db] XXX.XXX.XXX.XXX
各それぞれの[]部分にて実行ホストのグループを指定することができます。
上記を任意の名前で保存しAnsible実行時にオプション -i を付与し保存したファイルを指定すれば記入したホストに向けて各コマンドが実行されます。
playbookとは??
作業対象のホストで実行したいコマンドや作業の流れを記入するファイルとなります。
以下はapacheをインストールするplaybookとなります。
--- # Main Play operation playbook - name: apply common configuration to all nodes hosts: all remote_user: [ユーザ名] sudo: yes tasks: - name: apache-install yum: name=httpd state=present
- nameの部分は- の部分がこの処理の始まりを表しており、nameの部分はこの処理の名前となります。
hostsの部分は上で説明したグループ部分を指定できます。
今回はすべてのホストということで[all]と指定しております。
remote_userの部分は作業対象のホスト上のユーザを指定しています。
リモート先に存在するユーザを指定しないとコマンドが実行されずエラーとなります。
sudoの部分はremote_userにてroot権限でコマンドを実行するかを指定します。
今回はインストールが必要になるのでroot権限が必要になるためyesとしてます。
task以下の部分は実際に実行されるコマンドとなります。
今回はyumコマンドにてapacheをインストールするコマンドとなります。
モジュールとは??
先ほどのplaybook部分にてコマンド部分があったと思いますが、その部分が各モジュールとなります。
前回でも特徴の一つとしてモジュールを紹介しましたが、モジュールは現在も様々な言語にて開発され
サーバ自体の設定だけではなく、クラウドプラットフォームの設定まで行うものまであります。
詳細は以下に実際のモジュールの一覧のリンクを張るのでそちらをご確認ください。
リンク:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html
実際に実行してみよう!!
ではいよいよAnsibleを実行してみようと思います。
まず作業対象のホストをhostsファイルに記入します。
# vi hosts ======================== [all] XXX.XXX.XXX.XXX ========================
続いてメインのplaybookを作成いたします。
# vi operation.yml ======================== --- # Main Play operation playbook - name: apply common configuration to all nodes hosts: all remote_user: ec2-user sudo: yes tasks: - name: apache-install yum: name=httpd state=present ========================
最後にansible-playbookコマンドにて作業対象ホストに対して実行したいコマンドを実行いたします。
※--private-key=にて対象のログインするためのSSH秘密鍵を指定しています
# ansible-playbook --private-key=key/id_rsa -i hosts operation.yml PLAY [apply common configuration to all nodes] **************************** TASK [Gathering Facts] **************************************************** ok: [XXX.XXX.XXX.XXX] TASK [apache-install] ***************************************************** changed: [XXX.XXX.XXX.XXX] PLAY RECAP **************************************************************** XXX.XXX.XXX.XXX : ok=2 changed=1 unreachable=0 failed=0
インストールできているかどうか確認いたします。
$ rpm -qa | grep httpd httpd-tools-2.2.34-1.16.amzn1.x86_64 httpd-2.2.34-1.16.amzn1.x86_64
無事インストールできていました!!!
まとめ
今回はAnsibleの実行方法について記入しました。
次回はさらにroleを設定する方法などを記入できればと思います。
引き続きAnsibleや運用・構築自動化に少しでも興味をもっていただければ幸いです。
以上、これで締めます。