AWSでS3のWebサイトホスティングを運用している場合、毎回aws s3コマンドを使ったり、手動でアップロードするにはなかなかの手間です。今回はCircleCIのOrbsである circleci/aws-s3
を使って、Masterマージ後にS3バケットへSyncされるように、さくっと実装してみました。
■circleci/aws-s3@1.0.16
https://circleci.com/orbs/registry/orb/circleci/aws-s3
- 構成
このドキュメント通りに作ればOKで構成は非常に簡単なので、あえて説明はしません!と言いたいところですが、以下!
- Masterマージ
- CircleCIのコンテナが立ち上がる
-
aws s3 sync
でdocsディレクトリ配下をadachin.jp/docs
バケットにアップロード
■Setting IAM policy and user
まずは adachin.jp
バケットのみアクセスできるようにポリシーを作って、クレデンシャルを取得するためにユーザーを紐付けましょう。ここらへん雑にしてると危険ですからね…
- policy
s3-access-adachin.jp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::adachin.jp", "arn:aws:s3:::adachin.jp/*" ] } ] } |
- IAM user
s3-adachin.jp: s3-access-adachin.jpをアタッチして、クレデンシャルをメモりましょう。
- 確認
1 2 3 4 5 6 |
$ aws s3 ls --profile prd-adachin.jp s3://adachin.jp PRE docs/ 2018-09-21 18:22:21 0 index.html $ aws s3 ls --profile prd-adachin.jp s3://test-adachin-jp An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied |
これで他のバケットには閲覧できないのでOK。
■CircleCI
- Environment Variables
AWS_ACCESS_KEY_ID:xxxxxxxxxxxx
AWS_REGION:ap-northeast-1
AWS_SECRET_ACCESS_KEY:xxxxxxxxxxx
上記をCircleCIの環境変数に追加しましょう。
- .circleci/config.yml
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 28 29 |
version: 2.1 orbs: aws-s3: circleci/aws-s3@1.0.16 jobs: build: working_directory: ~/app docker: - image: 'cimg/python:3.6' steps: - checkout - aws-s3/sync: arguments: | --acl public-read \ --acl bucket-owner-full-control \ --cache-control "max-age=86400" \ --delete from: docs overwrite: true to: 's3://adachin.jp/docs' workflows: version: 2 s3-deploy: jobs: - build: filters: branches: only: master |
17行目のaws s3 syncのオプションで --delete
を指定していますが、GitHubで管理されているソースコードとまったく同じにしたく、ソースに存在しないファイルをバケットから削除したいという理由です。そのままsyncすると不要なファイルが残ってしまうので追記しました。18行目の from
ですが、これは実際のソースコードのディレクトリを指しています。 あとはworkflowsでブランチをmasterにすれば自動でソースがアップロードされます。
- 確認
これでバケットにtestファイル作って、Githubから削除してもバケットから消えてればOK!
■まとめ
手動でやっている方!今すぐCircleCIで自動化しましょう!
0件のコメント