やりたいことは以下の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とかになってますが、もちろん成立する範囲で修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
├──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に設定を書きます。
1 2 3 4 5 |
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に配置します。
1 2 3 |
[default] output = json region = {{s3.region}} |
roles/awscli/templates/credentials.conf.j2にs3の設定を書きます。
s3.keyとs3.secretが評価され値が入ります。相手の~/.aws/credentialsに配置します。
1 2 3 |
[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/以下に設定ファイルがコピーされた状態
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
--- - 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)は以下の通りです。
1 2 3 4 5 6 7 |
- hosts: remote_machine remote_user: "{{ user }}" gather_facts: "{{ check_env | default(True) }}" become: yes become_method: sudo roles: - { role: awscli } |
実行結果
Playbookを実行します。
1 |
$ ansible-playbook -i hosts/staging provisiong.yml |
相手のユーザディレクトリに.awsというディレクトリが作られ、中にファイルが作られます。
1 2 3 4 |
~/ └─.aws ├─config └─credentials |
相手側でaws s3 lsコマンドを打って設定しろと言われなければ成功です。
1 2 |
$ aws s3 ls 2019-10-20 11:11:20 hogehoge |
おわり。