share facebook facebook2 twitter menu hatena pocket slack

2017.06.12 MON

EC2 Systems Manager で Ansibleを実行する【cloudpack大阪ブログ】

cloudpack大阪の佐々木です。
EC2 Systems Manager で Ansibleが直接実行できるらしいのでやってみました。

https://aws.amazon.com/jp/blogs/mt/running-ansible-playbooks-using-ec2-systems-manager-run-command-and-state-manager/

2017/05/26時点では、東京リージョンで AWS-RunAnsiblePlaybook のドキュメントが見つからないので、対応していないのかと思います。今回は、us-east-1で実行しています。

EC2の作成

OSはAmazonLinux(amzn-ami-hvm-2017.03.0.20170417-x86_64-gp2 (ami-c58c1dd3))でやってみます。
SSMが実行できるIAM Roleを適用します。
起動後にSSMエージェントと、ansibleのインストールが必要ですが、どうせならログインせずにやりたいので、UserDataをこんな感じにしときます。

#!/bin/sh
cd /tmp
curl https://amazon-ssm-$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g').s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.rpm
yum install -y amazon-ssm-agent.rpm
/usr/bin/pip install ansible

インストールに成功していれば、マネージドインスタンスの一覧に表示されているかと思います。

関連付けの作成

一覧から該当の実行するインスタンスをチェックし、関連付けの作成 をクリックします。

ドキュメントを選択 から AWS-RunAnsiblePlaybook を選択します。

インスタンス選択し、パラメーターのところのにAnsibleの設定をします。
Playbook に下記のような実行したいAnsibleのPlaybookを入力します。

- hosts: all
  become: true

  tasks:
  - name: yum install for Apache Web Server
    yum: name=httpd24

  - name: Start and Enable to Apache
    service: name=httpd state=started enabled=yes

ログを残す場合は S3 への書き込み にチェックを入れ、バケット情報を入力します。

Playbookurlhttps://〜s3://〜 でyamlファイルを指定して、外部のPlaybookを読み込むこともできます。

関連付けの作成 をクリックします。

実行

しばらくすると、自動的に実行されます。ステータスが 成功 になっていれば適用されていると思います。

S3にログを保存しているとこんなログが残ります。

ansible 2.3.0.0
  config file = 
  configured module search path = Default w/o overrides
  python version = 2.7.12 (default, Sep  1 2016, 22:14:00) [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)]

PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [yum install for Apache Web Server] ***************************************
changed: [localhost]

TASK [Start and Enable to Apache] **********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0   

まとめ

今までもUserDataやRunCommandで実行していましたが、yamlを書くだけでできるので、簡単に利用できるようになっています。
ただ、外部から取り込む場合、1ファイルで完結するPlaybookしか読み込めないようなので、Role等ディレクトリを分けて管理している場合は使えないのではないのかな・・・。
そうなると簡単なものしか使えないような気がしますので、そのあたりが改善されればって感じです。

元記事はこちら

EC2 Systems Manager で Ansibleを実行する【cloudpack大阪ブログ】

佐々木真也

佐々木真也

2016年cloudpack join。 前職では構築・設計・PMを担当。 その経験を生かし、案件対応だけでなく検証環境の構築も行います。