やりたいことは以下の2つ。
- ansibleでaws-cliをインストールする
- ansibleでインストールしたaws-cliでs3コマンドを打てるようにする
なお、相手には既にpipがインストールがしてあるものとします。
ansibleを実行するために最小構成でPythonをインストールしたもののpipは入れていない、
という状況であれば、先にpipをインストールする必要があります。
リージョン、S3のkey,secretは仮に以下とします。
事前にAWSのコンソールで設定,取得してください。
- region: ap-northeast-1
- s3.key: AHJKOKODAJOIFAJDJDIOA
- s3.secret: AugioaiARJOIfjop20FJIOADOiFJAODA
ファイル達
構成は以下の通りです。(※)のファイルが核心です。
stagingとかになってますが、もちろん成立する範囲で修正してください。
├──provision.yml (※)
├──ansible.cfg
├──group_vars
│ └───staging.yml (※)
├──hosts
| └───staging
├──host_vars
| └───default.yml
└──roles
└─awscli (※)
├─templates
| └─config.conf.j2
| └─credentials.conf.j2
└─tasks
└─main.yml
group_vars/staging.ymlに設定を書きます。
user: ubuntu
s3:
region: ap-northeast-1 # S3.region
key: AHJKOKODAJOIFAJDJDIOA # S3.key
secret: AugioaiARJOIfjop20FJIOADOiFJAODA # S3.secret
roles/awscli/templates/config.conf.j2にaws-cliの設定を書きます。
s3.regionが評価され値が入ります。相手の~/.aws/configに配置します。
[default]
output = json
region = {{s3.region}}
roles/awscli/templates/credentials.conf.j2にs3の設定を書きます。
s3.keyとs3.secretが評価され値が入ります。相手の~/.aws/credentialsに配置します。
[default]
aws_access_key_id = {{s3.key}}
aws_secret_access_key = {{s3.secret}}
rokes/awscli/tasks/main.ymlに状態を定義します。
内容は以下の通りです。
1) aws-cliがpip installされた状態
2) ~/.aws/以下に設定ファイルがコピーされた状態
---
- name: install aws-cli
pip:
name: awscli
- name: create .aws dir
file:
dest: /home/{{user}}/.aws
state: directory
owner: "{{user}}"
group: "{{user}}"
- name: copy config
template:
src: config.conf.j2
dest: /home/{{user}}/.aws/config
owner: "{{user}}"
group: "{{user}}"
- name: copy credential
template:
src: credential.conf.j2
dest: /home/{{user}}/.aws/credentials
owner: "{{user}}"
group: "{{user}}"
~
~
Playbook(provision.yml)は以下の通りです。
- hosts: remote_machine
remote_user: "{{ user }}"
gather_facts: "{{ check_env | default(True) }}"
become: yes
become_method: sudo
roles:
- { role: awscli }
実行結果
Playbookを実行します。
$ ansible-playbook -i hosts/staging provisiong.yml
相手のユーザディレクトリに.awsというディレクトリが作られ、中にファイルが作られます。
~/
└─.aws
├─config
└─credentials
相手側でaws s3 lsコマンドを打って設定しろと言われなければ成功です。
$ aws s3 ls
2019-10-20 11:11:20 hogehoge
おわり。