Github Actionsを使ってプッシュされた内容をs3に自動で反映します。(作業時のメモなので抜け漏れがある可能性があります。検証用環境を用意してお試しください。)
前提条件
Githubに検証用リポジトリが用意されている
s3にバケットを用意
ファイル配置用にs3上にバケットを新規作成します。
バケット名は任意の名前、そのほかの設定はデフォルトのまま進めます。必要に応じて各種設定は調整してください。
IAMユーザーを用意
バケット操作用のIAMユーザーを新規追加します。
追加するユーザーには用途に応じて権限を絞ったポリシーをアタッチします。
参考:Amazon S3のアクセスに必要な最低限のIAMポリシーの設定
ユーザー作成時に生成されるアクセスキーID
とシークレットキー
はこの後の手順で利用するので控えておいてください。
GitHub Secretsの設定
前の手順で用意したアクセスキーID
とシークレットキー
をGithub Secretsに登録します。
作業リポジトリのsettings
> Actions
へアクセスし、new repository secret
から登録を行います。
## Secret1
name:AWS_ACCESS_KEY_ID
secret:{{IAMユーザー作成時に控えたアクセスキーIDを保存する}}
## Secret2
name:AWS_SECRET_ACCESS_KEY
secret:{{IAMユーザー作成時に控えたシークレットキーを保存する}}
GitHub Actions設定用にyamlファイルを作成
対象のリポジトリ直下に.github/workflows
という名前でディレクトリを新規作成し、その中にyamlファイルを配置します。
name: Upload to S3
on:
push:
branches:
- release
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: aws s3 sync --region ap-northeast-1 ./src/ s3://[バケット名]/ --delete
-
${{ secrets.AWS_ACCESS_KEY_ID }}
と${{ secrets.AWS_SECRET_ACCESS_KEY }}
の記載で、登録したIDとキーを取得します - バケット名は初めに作成したファイル配置用の名前を入れます
- 対象のブランチを変更する場合は
branches
の値を変更します
以上の設定で、release
というブランチにプッシュされた際にGithub Actionsが発火し、/src
ディレクトリの中身がs3に反映されます。
うまく動かない場合確認する箇所
GithubのPersonal access tokensにworkflowの権限が付与されているか
git push
する際に権限エラーが出た場合、GithubのPersonal access tokensの権限を確認しましょう。
参考:GitHubActionsで自動ビルドする際、Tokenのスコープでつまづいた話
IAMユーザー ポリシーのResource
のスコープは適切か
今回作成した検証用の環境で動いたが、実際の環境に適用した際に動かなくなった場合はIAMユーザーのポリシーのResource
のスコープを確認しましょう。テスト用のバケットのみを指定している場合、他のバケットでは権限の問題でエラーになります。
参考:複数のアカウントのバケットポリシーの設定
yamlファイルのawsコマンドで指定しているパスは適切か
今回のyamlファイルの設定では/src
ディレクトリ配下のファイルを反映しています。反映するディレクトリのパスが変わる場合、併せてyamlファイルの修正しましょう。