AnsibleでAWS操作シリーズ
- aws-cliインストール編
- EC2インスタンス編
- S3バケット編
- CloudFrontディストリビューション編
- Simple Email Service編
- Certificate Manager編
- Lambda編
関連記事
aws-cliにて、複数の認証情報を使い分けたい場合の設定方法
やりたかったこと
やったこと
概要
user
-> Jenkins
-> Ansible
-> aws-cli
の関係性で運用しているが、今回の記事では
Ansible
-> aws-cli
ここだけに注目してまとめます。
前提
- CIサーバー(
ansible
実行サーバー)構築済み - CLIサーバー(
aws-cli
実行サーバー)構築済み -
Ansible
インストール済み - 各サーバーへのSSH接続設定済み
-
${~}
は各環境に合わせて値を設定してください。
作業フロー
実行コマンド
- aws-cliをインストール
command
ansible-playbook -i inventory/production install-aws-cli.yml
- aws-cliコマンドの動作確認
command
ansible-playbook -i inventory/production view-aws-ec2-instance.yml
ディレクトリ構成
├── ansible.cfg
├── files
│ └── production
│ ├── aws
│ │ └── cli
│ │ ├── config
│ │ └── credentials
│ └── ssh
│ └── jenkins
│ └── config
├── install-aws-cli.yml
├── inventory
│ └── production
│ └── inventory
├── roles
│ ├── install-aws-cli
│ │ └── tasks
│ │ └── main.yml
│ ├── setup-aws-cli
│ │ └── tasks
│ │ └── main.yml
│ └── view-aws-ec2-instance
│ └── tasks
│ └── main.yml
├── vars
│ └── all.yml
└── view-aws-ec2-instance.yml
Ansible構成ファイル
inventory
inventory/production/inventory
[ciservers]
${CIサーバーホスト}
[cliservers]
${CLIサーバーホスト}
[all:vars]
ENV=production
vars
vars/all.yml
GET_URL_TEMP_DIRECTORY: /tmp
AWS_CLI:
URL: https://bootstrap.pypa.io/get-pip.py
FILE_NAME: get-pip.py
WORK_USER:
NAME: ${ユーザー名}
GROUP: ${ユーザーグループ}
playbook
install-aws-cli.yml
- hosts: cliservers
roles:
- install-aws-cli
- setup-aws-cli
vars_files:
- vars/all.yml
tasks
role/install-aws-cli/tasks/main.yml
- name: "download"
become: yes
shell: curl {{ AWS_CLI.URL }} -o {{ GET_URL_TEMP_DIRECTORY }}/{{ AWS_CLI_FILE_NAME }}
- name: "install"
become: yes
shell: python {{ GET_URL_TEMP_DIRECTORY }}/{{ AWS_CLI.FILE_NAME }}
role/setup-aws-cli/tasks/main.yml
- name: "create .aws dir"
file:
dest=~/.aws/
state=directory
owner={{ WORK_USER.NAME }}
group={{ WORK_USER.GROUP }}
- name: "copy config"
copy:
src={{ ENV }}/aws/cli/config
dest=~/.aws/config
owner={{ WORK_USER.NAME }}
group={{ WORK_USER.GROUP }}
tags:
- always
- name: "copy credentials"
copy:
src={{ ENV }}/aws/cli/credentials
dest=~/.aws/credentials
owner={{ WORK_USER.NAME }}
group={{ WORK_USER.GROUP }}
tags:
- always
files
files/production/aws/cli/config
[default]
output = json
region = ${REGION}
files/production/aws/cli/credentials
[default]
aws_access_key_id = ${AWS_ACCESS_KEY}
aws_secret_access_key = ${AWS_SECRET_KEY}
エラーが出ずに処理が終了したら、念のため以下の確認用playbookを実行してみます。
playbook
view-aws-ec2-instance.yml
- hosts: cliservers
roles:
- view-aws-ec2-instance
vars_files:
- vars/all.yml
tasks
role/view-aws-ec2-instance/tasks/main.yml
- name: "View ec2 instans list"
shell: |
aws ec2 describe-instances \
--query 'Reservations[].Instances[].{PublicIp:PublicIpAddress,PrivateIp:PrivateIpAddress,InstanceId:InstanceId,Name:Tags[?Key==`Name`].Value}'
register: result
- debug: var=result.stdout_lines
when: result | success
tags:
- always
これでEC2
上のインスタンス情報が出力されます。
終わりに
aws-cli
は導入さえしてしまえばあとはいろいろやりたい放題出来ます!
AWS
はダッシュボードが充実していて便利ですが、サービスがありすぎて誰が何をやったかが残らないので出来る限りAnsible
+aws-cli
の組み合わせで構成管理を把握しやすい状態にする事でみんなが幸せになると思います。
次は、EC2インスタンス
の作成をAnsible
+aws-cli
でやってみようと思います。
じゃあの。