0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS EC2でAnsibleの実行コマンドが永遠に弾かれた時の備忘録③

Posted at

エンジニア2年目が書いた記事と認知して読んでね

ゴール設定

とどのつまりこういう事がしたい。前回はこちら
image.png
前回はEC2(Server)にSCPでEC2(Client)の鍵(.pem)を配置しましたので、SSH接続ができるようになったはずです。AnsibleはホストにSSH接続してPlaybookを実行するので、これで実行準備はできました。

Server → Client へ疎通確認(ICMP)

スクリーンショット (103).png
pingを打つだけですが、一応Ansibleのオプションの利用もできます。

Server → Client へSSH接続

スクリーンショット (104).png
こちらも問題なく成功。ちなみに、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>"

スクリーンショット (101).png
何度か実行した後のキャプチャなので、実際に実行した人の画面とはRECAPの値が異なる可能性があるが、FailedやUnreachableがカウントされていない限りはほぼ大丈夫だと思う。

スクリーンショット (102).png
EC2(Client)にログインしてsystemdを確認すると無事nginxのインストールおよびenableが完了しています。

余談

EC2におけるhostnameの修正について。今回使用しているAmazon Linux2はhostnameを修正する方法については以下を参照。

hostnamectlを使えばリブート後もちゃんと変わっている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?