エンジニア2年目が書いた記事と認知して読んでね
ゴール設定
とどのつまりこういう事がしたい。前回はこちら
前回はEC2(Server)にSCPでEC2(Client)の鍵(.pem)を配置しましたので、SSH接続ができるようになったはずです。AnsibleはホストにSSH接続してPlaybookを実行するので、これで実行準備はできました。
Server → Client へ疎通確認(ICMP)
pingを打つだけですが、一応Ansibleのオプションの利用もできます。
Server → Client へSSH接続
こちらも問題なく成功。ちなみに、host名とIPについては以下のように設定しております。
対象 | host名 | IP |
---|---|---|
EC2(Server) | exp1mng001jmp001 | 10.0.100.43/28 |
EC2(Client) | exp1int001svr001 | 10.0.0.12/28 |
補足:Nginxのインストールについて
詳しくはまた別記事で記載するが、Amazon-linux2ではデフォルトでyumでサービスのインストールができない。
代わりに標準のリポジトリとして、Amazon-linux-extraが公開されている。
(もしかしたら”無料版の”Amzon-linux2だけの話かもしれない)
なお、Amazon-linux-extraを利用するにはS3にアクセスが必要。今回のようにプライベートサブネット(Clientが配置されている方)からインターネット経由でS3にアクセスできない場合は、VPCゲートウェイをプライベートサブネットにアタッチする必要がある。今回は、これが完了した状態で話を進める。
※こちらもまた別日に記事にする。
Ansible playbookの構成
今回は以下のようなディレクトリ構造となっている。
.
|--- hosts
|--- roles
| |--- install_lb
| |--- tasks
| |--- main.yml
|--- site.yml
./site.yml
---
- name: install nginx on Client
hosts: Client
become: true
roles:
- install_lb
./hosts
[Client]
10.0.0.12
./roles/install_lb/tasks/main.yml
- name: Enable to install nginx
shell: "amazon-linux-extras enable nginx1"
changed_when: False
- name: Install nginx
yum:
name: nginx
enablerepo: amzn2extra-nginx1
state: present
- name: Start nginx service
service:
name: nginx
state: started
enabled: yes
- name: Reboot service
service:
name: nginx
state: reloaded
name: Enable to install nginx について
これは深く考えないでください。先ほど記載したamazon-linux-extraを動かすためのAnsibleモジュールは用意されていない(多分こんなニッチなものにまでモジュール作成されない)ので、shellに直接「amazon-linux-extrasっていうリポジトリからnginxをenableしてね」と命令する箇所です。
changed_whenはIF文のようなものです。Disableのときだけこれを実行すれば良いよっていう条件分岐です。
name: Install nginx について
一度amazon-linux-extraからnginxを落としているので、その後はyumコマンドで操作ができる。
yumモジュールの中で、enablerepoを使うと、amazon-linux-extraから明示的にインストールができる。
name: Start nginx service について
この後サービスの再起動をするので、一旦enableしておく必要があります。
name: Reboot service
ここは特段説明不要かとおもいます。
実行結果
以下コマンドで改めてPlaybookを実行します。
$ ansible-playbook -i hosts site.yml --private-key="<鍵配置先のpath>"
何度か実行した後のキャプチャなので、実際に実行した人の画面とはRECAPの値が異なる可能性があるが、FailedやUnreachableがカウントされていない限りはほぼ大丈夫だと思う。
EC2(Client)にログインしてsystemdを確認すると無事nginxのインストールおよびenableが完了しています。
余談
EC2におけるhostnameの修正について。今回使用しているAmazon Linux2はhostnameを修正する方法については以下を参照。
hostnamectlを使えばリブート後もちゃんと変わっている。