AnsibleでAWS操作シリーズ
- aws-cliインストール編
- EC2インスタンス編
- S3バケット編
- CloudFrontディストリビューション編
- Simple Email Service編
- Certificate Manager編
- Lambda編
関連記事
やりたかったこと
- S3バケットの作成/削除
- S3バケットへのオブジェクトの転送/削除
- S3バケットを静的Webサイトホスティング化
GUIを使わずに黒い画面でコマンドを「ッターーン!」してかっこつけたい
やったこと
前提
- CIサーバー(
ansible
実行サーバー)構築済み - CLIサーバー(
aws-cli
実行サーバー)構築済み -
Ansible
インストール済み -
aws-cli
インストール済み - 各サーバーへのSSH接続設定済み
※ ${~}
は各環境に合わせて値を設定してください。
作業フロー
1. S3バケットを新規作成
command
ansible-playbook -i inventory/production create-aws-s3-bucket.yml
2. S3バケットをWebサイトホスティング化
command
ansible-playbook -i inventory/production setup-aws-s3-bucket.yml
3. オブジェクトを転送
command
ansible-playbook -i inventory/production upload-aws-s3-object.yml
4. オブジェクトの転送確認
command
ansible-playbook -i inventory/production view-aws-s3-object.yml
5. オブジェクトの削除
command
ansible-playbook -i inventory/production delete-aws-s3-object.yml
6. バケットの削除
command
ansible-playbook -i inventory/production delete-aws-s3-bucket.yml
ディレクトリ構成
├── ansible.cfg
├── create-aws-s3-bucket.yml
├── delete-aws-s3-bucket.yml
├── delete-aws-s3-object.yml
├── files
│ └── production
│ └── s3
│ └── sample.txt
├── inventory
│ └── production
│ └── inventory
├── roles
│ ├── create-aws-s3-bucket
│ │ └── tasks
│ │ └── main.yml
│ ├── delete-aws-s3-bucket.yml
│ │ └── tasks
│ │ └── main.yml
│ ├── delete-aws-s3-object.yml
│ │ └── tasks
│ │ └── main.yml
│ ├── setup-aws-s3-bucket.yml
│ │ └── tasks
│ │ └── main.yml
│ ├── upload-aws-s3-bucket.yml
│ │ └── tasks
│ │ └── main.yml
│ └── view-aws-s3-object.yml
│ └── tasks
│ └── main.yml
├── upload-aws-s3-object.yml
├── setup-aws-s3-bucket.yml
├── vars
│ └── all.yml
└── view-aws-s3-object.yml
Ansible構成ファイル
inventory
inventory/production/inventory
[ciservers]
${CIサーバーホスト}
[cliservers]
${CLIサーバーホスト}
[all:vars]
ENV=production
vars
vars/all.yml
AWS:
S3:
BUCKET:
NAME: ${バケット名}
playbook
create-aws-s3-bucket
- hosts: cliservers
roles:
- create-aws-s3-bucket
vars_files:
- vars/all.yml
delete-aws-s3-bucket
- hosts: cliservers
roles:
- delete-aws-s3-bucket
vars_files:
- vars/all.yml
delete-aws-s3-object
- hosts: cliservers
roles:
- delete-aws-s3-object
vars_files:
- vars/all.yml
setup-aws-s3-bucket
- hosts: cliservers
roles:
- setup-aws-s3-bucekt
vars_files:
- vars/all.yml
upload-aws-s3-object
- hosts: cliservers
roles:
- update-aws-s3-bucket
vars_files:
- vars/all.yml
view-aws-s3-object
- hosts: cliservers
roles:
- view-aws-s3-object
vars_files:
- vars/all.yml
tasks
role/create-aws-s3-bucket/tasks/main.yml
- name: Create Bucket
shell: "aws s3 mb s3://{{ AWS.S3.BUCKET.NAME }}"
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
role/delete-aws-s3-bucket/tasks/main.yml
- name: "Remove Bucket"
shell: "aws s3 rb s3://{{ AWS.S3.BUCKET.NAME }}"
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
role/delete-aws-s3-bucket/tasks/main.yml
- name: "Delete Bucket"
shell: "aws s3 rb s3://{{ AWS.S3.BUCKET.NAME }}"
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
role/delete-aws-s3-object/tasks/main.yml
- name: "Delete Object"
shell: "aws s3 rm s3://{{ AWS.S3.BUCKET.NAME }}/sample.txt"
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
role/setup-aws-s3-bucket/tasks/main.yml
- name: "Setup Bucket"
shell: |
aws s3 website s3://{{ AWS.S3.BUCKET.NAME }} \
--index-document index.html
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
role/upload-aws-s3-object/tasks/main.yml
- name: "Upload Object"
shell: "aws s3 cp files/{{ ENV }}/s3/sample.txt s3://{{ AWS.S3.BUCKET.NAME }}"
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
role/view-aws-s3-object/tasks/main.yml
- name: "View Objects"
shell: "aws s3 ls s3://{{ AWS.S3.BUCKET.NAME }}"
register: result
changed_when: False
- debug: var=result.stdout_lines
when: result | success
tags:
- always
終わりに
S3
のバケット作成やファイル操作も 簡単 に行うことが可能で、 静的サイト として利用する場合のためのindexドキュメントの指定などのオプションもあります。
また、今回は触れませんでしたが転送したファイル単位で パーミッション の設定も出来るので柔軟性もあります。
また、CloudFront
と組み合わせればキャッシュを有効利用してパフォーマンス向上を図ることも可能です。
S3
バケットは 静的コンテンツのホスティング や 簡易ファイルサーバー 、 Wordpressの記事をhtml化 したりとかなり汎用性が高く、 料金もかなり良心的 なのでどんどん利用していきましょう♪
じゃあの。