GitHub ActionsでCloudFront + S3にファイルをアップロードする
先日、仕事で初めてAWSでシステムを構築したんですが、S3のアップロード方法を全く考えられておらず、S3に直アップロードという方法を取りました。
当然、チームでの作業にかなり支障をきたしてしまいました・・・。
今回はその反省としてGitHub Actionsを使ってS3にアップロードすることに成功したので、備忘録として書いておきます。
CloudFront経由のS3の公開については過去記事にて紹介しているので割愛します。 suguru-no-rururu.hatenablog.com
1.レポジトリ作成
まずはgithubに管理用のレポジトリを作成します。 久々にレポジトリ作ると毎回忘れているのでこの記事を参考にしています。 qiita.com
2. Github Actionsの設定
レポジトリが作成できたら、Actionsをクリック。
「Set up this workflow」があるので、それをクリック。
Actionsには以下のように書きました。
access_key_idとsecret_access_keyは後々githubで設定するので、直書きはしないでください。
name: CI on: push: branches: [ main ] pull_request: branches: [ main ] workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Configure AWS credentials from account uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.TEST_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.TEST_AWS_SECRET_ACCESS_KEY }} aws-region: ap-northeast-1 - name: Copy Files to s3 run: | aws s3 sync ./public s3://test-aws-service-k --delete
コードの紹介をしていきます。
mainというブランチにpushされた時にjobsが走るようにしています。
masterなど使っているブランチ名に変更してください。
on: push: branches: [ main ] pull_request: branches: [ main ]
リージョンはS3のバケットがあるリージョンに変更してください。
aws-region: ap-northeast-1
今回はpublic配下にあるファイルを付け足すようにしています。
--deleteオプションはS3のバケットにあるが、githubのレポジトリにないファイル・ディレクトリを削除するものです。
aws s3 sync ./public s3://test-aws-service-k --delete
3. SercretsにAWSのaccess_key_idとsecret_access_keyを設定
続いてgithubのSettings > サイドバーのSecretsから「New repository secret」をクリック。
そちらにIAMユーザーのaccess_key_idとsecret_access_keyを貼り付けます。
keyは先ほど、Github Actionsに設定したTEST_AWS_ACCESS_KEY_ID、TEST_AWS_SECRET_ACCESS_KEYとします。
以上で設定は完了です。
作成したレポジトリにpushするとS3のバケットに反映されていると思います。