AWS

AnsibleをAmazon Linuxにセットアップする

AWSAmazon LinuxAnsible

はじめに

こんにちは。インフラエンジニアレベル1のf_prgです。
普段業務では、MacからAnsibleを使用しております。
Amazon Linuxから使う必要がでたので、インストールの作業内容をまとめたいとおもいます。

インストール

  1. pipのインストール

    [root@ip-172-31-21-105 ~]# sudo easy_install pip
    
  2. Ansibleのインストール

    [root@ip-172-31-21-105 ~]# sudo pip install ansible
    
  3. Ansibleの確認

    [root@ip-172-31-21-105 ~]# which ansible
    /usr/bin/ansible
    

AWS EC2 External Inventory Scriptと組み合わせる

Ansible and Dynamic Amazon EC2 Inventory Management
が、AWSのブログにあります。

$ export AWS_ACCESS_KEY_ID='YOUR_AWS_API_KEY'
$ export AWS_SECRET_ACCESS_KEY='YOUR_AWS_API_SECRET_KEY'
$ export ANSIBLE_HOSTS=/etc/ansible/ec2.py
$ export EC2_INI_PATH=/etc/ansible/ec2.ini

とあるので、これを拡張したいと思います。ただ、毎回ログインしてexportコマンドを打つのは大変なので
assume-roleからアクセスキーとシークレットキーを取得して起動するようにセットアップします。

assume-roleからアクセスキーとシークレットキーを取得するようにセットアップする

jqを使いますので、インストール済みの状態で説明します。

ansible用ディレクトリ作成してモジュールを設置する

mkdir /opt/ansible
cd /opt/ansible
curl -O https://raw.githubusercontent.com/ansible/ansible/devel/plugins/inventory/ec2.py
curl -O https://raw.githubusercontent.com/ansible/ansible/devel/plugins/inventory/ec2.ini

/etc/profile.dにファイルを設置する

/etc/profile.d/ansible_ec2.shにファイルを設置します

EC2_ROLE=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/`
AWS_ACCESS_KEY_ID=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$EC2_ROLE|jq '.AccessKeyId'|sed "s/\"//g"`
AWS_SECRET_ACCESS_KEY=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$EC2_ROLE|jq '.SecretAccessKey'|sed "s/\"//g"`
export EC2_INI_PATH=/opt/ansible/ec2.ini

一覧を取得する

/opt/ansible/ec2.py --list

結果は割愛します。

まとめ

これで動的にセットアップができるようになります。
とても便利になりました。

参考資料・リンク

http://docs.ansible.com/guide_aws.html
http://docs.ansible.com/intro_dynamic_inventory.html
https://aws.amazon.com/jp/blogs/apn/getting-started-with-ansible-and-dynamic-amazon-ec2-inventory-management/
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

こちらは関係ないですが、おまけとして載せておきます。
http://docs.ansible.com/ec2_module.html