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 への書き込み
にチェックを入れ、バケット情報を入力します。
Playbookurl
に https://〜
は 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等ディレクトリを分けて管理している場合は使えないのではないのかな・・・。
そうなると簡単なものしか使えないような気がしますので、そのあたりが改善されればって感じです。