Amazon Linux 2でAnsibleを使ってnginxを入れる

微妙にハマったのでメモ

# 結論

```yaml
- name: Enable to install NGINX.
  shell: "amazon-linux-extras enable nginx1"
  become: yes
```
を**yumの前に入れる。yumはそのまま使う。**

**【注意】以前、この記事ではnginx1.12を使用していましたが、現在では古くなっているので、nginx1（現在では1.18が入る）を使ってください**

とりあえずインストールをするためのシンプルなymlは以下のとおり。

```yaml
---
- name: Install openssl
  yum: name=openssl-devel

- name: Enable to install NGINX.
  shell: "amazon-linux-extras enable nginx1"
  become: yes

- name: Install NGINX.
  yum: name=nginx

- command: chkconfig nginx on
- command: service nginx restart
```

# 従来のtask

```yaml:main.yml
---
- name: Install openssl
  yum: name=openssl-devel

- name: Install NGINX.
  yum: name=nginx

- command: chkconfig nginx on
- command: service nginx restart

```

これを実行するとエラー。

```shell
fatal: [epapp01]: FAILED! => {"changed": false, "msg": "No package matching 'nginx' found available, installed or updated", "rc": 126, "results": ["No package matching 'nginx' found available, installed or updated"]}
```

# トラブルシューティング

このメッセージでは何もわからないので、直接yumを叩いてみる。

```shell
$ sudo yum install nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
パッケージ nginx は利用できません。
エラー: 何もしません


nginx is available in Amazon Linux Extra topic "nginx1.12"

To use, run
# sudo amazon-linux-extras install nginx1.12

Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras
```
なるほど？
`amazon-linux-extras install nginx1.12`
という未知のコマンドを実行しろと言われるので、**enableではなくinstallを使って**ansibleで実行してみる。（正解は後述の通りenableなので、installでは動かない）
※注意：このメッセージは記事を書いた時点でのものですが、現在はnginx1を使用するようにしてください

```yaml:動かない.yml
---
- name: Install openssl
  yum: name=openssl-devel

- name: Enable to install NGINX.
  shell: "amazon-linux-extras install nginx1.12"
  become: yes

- command: chkconfig nginx on
- command: service nginx restart
```

...10分ぐらい反応がない。
仕方がないので、ちょっとプロセスとかを見てみる。

```shell
$ ps -ef
ec2-user 10844 10834  0 15:41 ?        00:00:00 sshd: ec2-user@pts/1
ec2-user 10845 10844  0 15:41 pts/1    00:00:00 /bin/sh -c sudo -H -S -n -u root /bin/sh -c 'echo BECOME-SUCCESS-hnxarzgysfonogwhauwudlqaqqqwgpyd; /usr/bin/python /home/ec2-user/.ansible/tmp/a
root     10862 10845  0 15:41 pts/1    00:00:00 sudo -H -S -n -u root /bin/sh -c echo BECOME-SUCCESS-hnxarzgysfonogwhauwudlqaqqqwgpyd; /usr/bin/python /home/ec2-user/.ansible/tmp/ansible-tmp-1
root     10863 10862  0 15:41 pts/1    00:00:00 /bin/sh -c echo BECOME-SUCCESS-hnxarzgysfonogwhauwudlqaqqqwgpyd; /usr/bin/python /home/ec2-user/.ansible/tmp/ansible-tmp-1549899685.433528-97384
root     10864 10863  0 15:41 pts/1    00:00:00 /usr/bin/python /home/ec2-user/.ansible/tmp/ansible-tmp-1549899685.433528-9738494689918/AnsiballZ_command.py
root     10865 10864  0 15:41 pts/1    00:00:00 python -m amazon_linux_extras install nginx1.12
root     10868 10865  0 15:41 pts/1    00:00:02 /usr/bin/python /bin/yum install nginx
```
結局yumなんかーい！
しかし、yumの実行途中で止まっているような挙動に見える。y/Nとかで止まってるのかな…とか思って、直接ansibleを通さずにyumを実行すると、なぜかすんなりと動きそうになっている。

```shell:yum
$ sudo yum install nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                                                                               | 2.4 kB  00:00:00     
amzn2extra-docker                                                                                                                                                        | 1.3 kB  00:00:00     
amzn2extra-nginx1.12                                                                                                                                                     | 1.3 kB  00:00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nginx.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
--> 依存性の処理をしています: nginx-filesystem = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: nginx-all-modules = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: nginx-filesystem のパッケージ: 1:nginx-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: libprofiler.so.0()(64bit) のパッケージ: 1:nginx-1.12.2-2.amzn2.0.1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ gperftools-libs.x86_64 0:2.6.1-1.amzn2 を インストール
---> パッケージ nginx-all-modules.noarch 1:1.12.2-2.amzn2.0.1 を インストール
--> 依存性の処理をしています: nginx-mod-stream = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-all-modules-1.12.2-2.amzn2.0.1.noarch
--> 依存性の処理をしています: nginx-mod-mail = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-all-modules-1.12.2-2.amzn2.0.1.noarch
--> 依存性の処理をしています: nginx-mod-http-xslt-filter = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-all-modules-1.12.2-2.amzn2.0.1.noarch
--> 依存性の処理をしています: nginx-mod-http-perl = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-all-modules-1.12.2-2.amzn2.0.1.noarch
--> 依存性の処理をしています: nginx-mod-http-image-filter = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-all-modules-1.12.2-2.amzn2.0.1.noarch
--> 依存性の処理をしています: nginx-mod-http-geoip = 1:1.12.2-2.amzn2.0.1 のパッケージ: 1:nginx-all-modules-1.12.2-2.amzn2.0.1.noarch
---> パッケージ nginx-filesystem.noarch 1:1.12.2-2.amzn2.0.1 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ nginx-mod-http-geoip.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
---> パッケージ nginx-mod-http-image-filter.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
--> 依存性の処理をしています: gd のパッケージ: 1:nginx-mod-http-image-filter-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: libgd.so.2()(64bit) のパッケージ: 1:nginx-mod-http-image-filter-1.12.2-2.amzn2.0.1.x86_64
---> パッケージ nginx-mod-http-perl.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
---> パッケージ nginx-mod-http-xslt-filter.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
--> 依存性の処理をしています: libxslt.so.1(LIBXML2_1.0.18)(64bit) のパッケージ: 1:nginx-mod-http-xslt-filter-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: libxslt.so.1(LIBXML2_1.0.11)(64bit) のパッケージ: 1:nginx-mod-http-xslt-filter-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: libxslt.so.1()(64bit) のパッケージ: 1:nginx-mod-http-xslt-filter-1.12.2-2.amzn2.0.1.x86_64
--> 依存性の処理をしています: libexslt.so.0()(64bit) のパッケージ: 1:nginx-mod-http-xslt-filter-1.12.2-2.amzn2.0.1.x86_64
---> パッケージ nginx-mod-mail.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
---> パッケージ nginx-mod-stream.x86_64 1:1.12.2-2.amzn2.0.1 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ gd.x86_64 0:2.0.35-26.amzn2.0.2 を インストール
--> 依存性の処理をしています: libpng15.so.15(PNG15_0)(64bit) のパッケージ: gd-2.0.35-26.amzn2.0.2.x86_64
--> 依存性の処理をしています: libpng15.so.15()(64bit) のパッケージ: gd-2.0.35-26.amzn2.0.2.x86_64
--> 依存性の処理をしています: libfontconfig.so.1()(64bit) のパッケージ: gd-2.0.35-26.amzn2.0.2.x86_64
--> 依存性の処理をしています: libXpm.so.4()(64bit) のパッケージ: gd-2.0.35-26.amzn2.0.2.x86_64
--> 依存性の処理をしています: libX11.so.6()(64bit) のパッケージ: gd-2.0.35-26.amzn2.0.2.x86_64
---> パッケージ libxslt.x86_64 0:1.1.28-5.amzn2.0.2 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ fontconfig.x86_64 0:2.10.95-11.amzn2.0.2 を インストール
--> 依存性の処理をしています: fontpackages-filesystem のパッケージ: fontconfig-2.10.95-11.amzn2.0.2.x86_64
--> 依存性の処理をしています: font(:lang=en) のパッケージ: fontconfig-2.10.95-11.amzn2.0.2.x86_64
---> パッケージ libX11.x86_64 0:1.6.5-1.amzn2.0.2 を インストール
--> 依存性の処理をしています: libX11-common >= 1.6.5-1.amzn2.0.2 のパッケージ: libX11-1.6.5-1.amzn2.0.2.x86_64
--> 依存性の処理をしています: libxcb.so.1()(64bit) のパッケージ: libX11-1.6.5-1.amzn2.0.2.x86_64
---> パッケージ libXpm.x86_64 0:3.5.12-1.amzn2.0.2 を インストール
---> パッケージ libpng.x86_64 2:1.5.13-7.amzn2.0.2 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ fontpackages-filesystem.noarch 0:1.44-8.amzn2 を インストール
---> パッケージ libX11-common.noarch 0:1.6.5-1.amzn2.0.2 を インストール
---> パッケージ libxcb.x86_64 0:1.12-1.amzn2.0.2 を インストール
--> 依存性の処理をしています: libXau.so.6()(64bit) のパッケージ: libxcb-1.12-1.amzn2.0.2.x86_64
---> パッケージ stix-fonts.noarch 0:1.1.0-5.amzn2 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ libXau.x86_64 0:1.0.8-2.1.amzn2.0.2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================================================================================================================================
 Package                                                アーキテクチャー                  バージョン                                      リポジトリー                                     容量
================================================================================================================================================================================================
インストール中:
 nginx                                                  x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                            532 k
依存性関連でのインストールをします:
 fontconfig                                             x86_64                            2.10.95-11.amzn2.0.2                            amzn2-core                                      231 k
 fontpackages-filesystem                                noarch                            1.44-8.amzn2                                    amzn2-core                                       10 k
 gd                                                     x86_64                            2.0.35-26.amzn2.0.2                             amzn2-core                                      147 k
 gperftools-libs                                        x86_64                            2.6.1-1.amzn2                                   amzn2-core                                      274 k
 libX11                                                 x86_64                            1.6.5-1.amzn2.0.2                               amzn2-core                                      614 k
 libX11-common                                          noarch                            1.6.5-1.amzn2.0.2                               amzn2-core                                      164 k
 libXau                                                 x86_64                            1.0.8-2.1.amzn2.0.2                             amzn2-core                                       29 k
 libXpm                                                 x86_64                            3.5.12-1.amzn2.0.2                              amzn2-core                                       57 k
 libpng                                                 x86_64                            2:1.5.13-7.amzn2.0.2                            amzn2-core                                      214 k
 libxcb                                                 x86_64                            1.12-1.amzn2.0.2                                amzn2-core                                      216 k
 libxslt                                                x86_64                            1.1.28-5.amzn2.0.2                              amzn2-core                                      243 k
 nginx-all-modules                                      noarch                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             17 k
 nginx-filesystem                                       noarch                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             17 k
 nginx-mod-http-geoip                                   x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             23 k
 nginx-mod-http-image-filter                            x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             27 k
 nginx-mod-http-perl                                    x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             36 k
 nginx-mod-http-xslt-filter                             x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             26 k
 nginx-mod-mail                                         x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             55 k
 nginx-mod-stream                                       x86_64                            1:1.12.2-2.amzn2.0.1                            amzn2extra-nginx1.12                             76 k
 stix-fonts                                             noarch                            1.1.0-5.amzn2                                   amzn2-core                                      1.3 M

トランザクションの要約
================================================================================================================================================================================================
インストール  1 パッケージ (+20 個の依存関係のパッケージ)

総ダウンロード容量: 4.2 M
インストール容量: 11 M
Is this ok [y/d/N]: N
Exiting on user command
```

ナンデ！YUMナンデ！
ここで
https://www.reddit.com/r/aws/comments/8ug8y5/scripting_amazonlinuxextras/
とかを見てみると、enableというものを使っている。
installがenbale + yumなのかな？という推測のもとで、enableで書き直すと、普通に動くようになった。結果は冒頭のとおり。
つらい。