LoginSignup
12
10

More than 5 years have passed since last update.

AnsibleでAWS操作 aws-cliインストール編

Last updated at Posted at 2017-07-26

AnsibleでAWS操作シリーズ

  1. aws-cliインストール編
  2. EC2インスタンス編
  3. S3バケット編
  4. CloudFrontディストリビューション編
  5. Simple Email Service編
  6. Certificate Manager編
  7. Lambda編

関連記事

aws-cli コマンド一覧(随時追記)

aws-cliにて、複数の認証情報を使い分けたい場合の設定方法

やりたかったこと

  • Ansibleaws-cliを使う
  • 出来る限りのAWSサービスの操作をコマンドで行いたい
  • GUIを使わずに黒い画面でコマンドを「ッターーン!」してかっこつけたい

やったこと

概要

user -> Jenkins -> Ansible -> aws-cli

の関係性で運用しているが、今回の記事では

Ansible -> aws-cli

ここだけに注目してまとめます。

前提

  • CIサーバー(ansible実行サーバー)構築済み
  • CLIサーバー(aws-cli実行サーバー)構築済み
  • Ansibleインストール済み
  • 各サーバーへのSSH接続設定済み
  • ${~}は各環境に合わせて値を設定してください。

作業フロー

実行コマンド

  1. aws-cliをインストール
command
ansible-playbook -i inventory/production install-aws-cli.yml
  1. 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でやってみようと思います。

じゃあの。

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10