EC2 Systems Manager からの Ansible Playbook の実行

:beginner: 
東京リージョンでも AWS-RunAnsiblePlaybook が使用出来るようになったようなので、
以下を参考に試しにEC2 System Manager から Ansible Playbook を実行してみます。
[Running Ansible Playbooks using EC2 Systems Manager Run Command and State Manager](https://aws.amazon.com/jp/blogs/mt/running-ansible-playbooks-using-ec2-systems-manager-run-command-and-state-manager/)

以下の作業を行います。
・特定のインスタンスへAnsibleをインストール
・Playbook を使った Apache のインストールと起動 

内容としては初心者向けになります。

## 前提条件
SSMエージェントのインストールは実施済みであること。
[:beginner: Amazon EC2 Simple Systems Manager (SSM) エージェントのインストール](http://qiita.com/YoshihiroMatsuda/items/fc1099b610dddd29fa20)

## 対象インスタンスへのAnsible のインストール
EC2のSYSTEMS MANAGER SERVICE > 「コマンドを実行」で「AWS-RunShellScript」を選択。

![2017-06-27-13-36-59.png](https://qiita-image-store.s3.amazonaws.com/0/11547/fbb8bb0c-6a51-23d7-2340-df173040bd67.png)


対象のインスタンスを選択します。試しに複数インスタンスを選択してみます。
「Commands」に以下を記入し「RUN」を選択します。 

:warning: 以下はAmazon Linux 用になります。
CentOSやUbuntuの場合はyum or apt を使用してAnsible をインストールして下さい。

```bash:Commands
/usr/bin/pip install ansible
ansible --version
```

![2017-06-27-13-50-31.png](https://qiita-image-store.s3.amazonaws.com/0/11547/82813ed2-f1e9-ecbe-0af9-c13daa66d83e.png)


![2017-06-27-13-52-24.png](https://qiita-image-store.s3.amazonaws.com/0/11547/9335aa62-2fd3-c47e-c7af-58267cc57de1.png)


複数インスタンスを指定した場合はインスタンス毎に同じコマンドIDの履歴が表示されます。
![2017-06-27-13-57-29.png](https://qiita-image-store.s3.amazonaws.com/0/11547/55ae823c-cfde-7f7f-a129-62a87754bc32.png)


インスタンスごとに表示されるので複数インスタンスにRunCommandを実行した場合でも、
実行結果を各インスタンス単位で確認することが可能です。
![2017-06-27-14-02-44.png](https://qiita-image-store.s3.amazonaws.com/0/11547/5122f9ff-46a1-a893-011e-b4a5fba92ea4.png)


なお出力結果にpipのバージョンに関してERRORが出ていますがAnsibleのインストールは出来ています。

```
----------ERROR-------
You are using pip version 6.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
```

![2017-06-27-14-11-11.png](https://qiita-image-store.s3.amazonaws.com/0/11547/39a1dd15-5be4-e8fd-867d-eabb6ae26621.png)

ちなみに pip の更新も同時に行う場合は以下の設定でコマンドを実行すればOKです。

```bash:Commands
pip install --upgrade pip
pip install ansible
ansible --version
```

![2017-06-27-14-16-19.png](https://qiita-image-store.s3.amazonaws.com/0/11547/3b00702d-8b58-6c79-45e5-f62b616ea027.png)

## Ansible Playbook の実行
EC2のSYSTEMS MANAGER SERVICE > 「コマンドを実行」で「AWS-RunAnsiblePlaybook」を選択します。

![2017-06-27-16-51-00.png](https://qiita-image-store.s3.amazonaws.com/0/11547/634afb07-91de-b09f-9d0a-aeb3c505de3f.png)

Playbook に 以下のYAMLを記入します。
HTTPで取得可能な場所にplaybookがある場合は「playbookurl」にURLを入力してもOKです。

```yaml:Playbook
- hosts: all
  become: true

  tasks:
    - name: gather ec2 facts
      action: ec2_facts

    - name: install apache on redhat or centos instances
      yum: name=httpd state=present
      when: ansible_os_family == "RedHat"

    - name: install apache on debian or ubuntu instances
      apt: name=apache2 state=present
      when: ansible_os_family == "Debian"

    - name: enable apache on startup and start service for redhat or centos
      service: name=httpd enabled=yes state=started
      when: ansible_os_family == "RedHat"

    - name: enable apache on startup and start service for debian or ubuntu
      service: name=apache2 enabled=yes state=started
      when: ansible_os_family == "Debian"
```

![2017-06-28-14-20-01.png](https://qiita-image-store.s3.amazonaws.com/0/11547/466eab64-c42d-5cfc-5226-3787843f5517.png)

出力の表示を確認すると以下のような結果が表示されてAnsibleが無事に実行されていることがわかります。

![2017-06-28-14-38-43.png](https://qiita-image-store.s3.amazonaws.com/0/11547/42fb3446-12f4-fd96-35d5-5ec7311c2980.png)

## 実行結果の確認
インスタンスにSSHでログインしログとWebページが表示されることを確認できました。

```log:/var/log/messages
Jun 28 05:20:20 ip-10-0-13-43 ansible-setup: Invoked with filter=* gather_subset=['all'] fact_path=/etc/ansible/facts.d gather_timeout=10
Jun 28 05:20:21 ip-10-0-13-43 ansible-ec2_facts: Invoked with url_password=NOT_LOGGING_PARAMETER force=False use_proxy=True url=None force_basic_auth=False http_agent=ansible-httpget url_username=None validate_certs=True
Jun 28 05:20:22 ip-10-0-13-43 ansible-yum: Invoked with name=['httpd'] list=None install_repoquery=True conf_file=None disable_gpg_check=False state=present disablerepo=None update_cache=False enablerepo=None exclude=None validate_certs=True installroot=/ skip_broken=False
Jun 28 05:20:25 ip-10-0-13-43 yum[23264]: Installed: apr-1.5.1-1.12.amzn1.x86_64
Jun 28 05:20:25 ip-10-0-13-43 yum[23264]: Installed: apr-util-1.4.1-4.17.amzn1.x86_64
Jun 28 05:20:25 ip-10-0-13-43 yum[23264]: Installed: httpd-tools-2.2.32-1.9.amzn1.x86_64
Jun 28 05:20:25 ip-10-0-13-43 yum[23264]: Installed: apr-util-ldap-1.4.1-4.17.amzn1.x86_64
Jun 28 05:20:25 ip-10-0-13-43 yum[23264]: Installed: httpd-2.2.32-1.9.amzn1.x86_64
Jun 28 05:20:27 ip-10-0-13-43 ansible-service: Invoked with name=httpd pattern=None enabled=True state=started sleep=None arguments= runlevel=default
```

今回はPrivate Subnet にインスタンスを作ってしまったので確認できれば良いと思いlynxを使って確認しました。

![2017-06-28-15-56-06.png](https://qiita-image-store.s3.amazonaws.com/0/11547/72dbdc9f-e1fc-2a97-3820-3283981e667c.png)


ひとまず、Ansibleが実行できることまでは確認できたので次回はawslogsの設定などをやってみようかな