github ActionsとAWS S3で自動デプロイ環境を作る

githubActionsを使ってテストが成功するとAWS上のElasticBeanstalkに自動的にデプロイしてくれるタスクを作ります。
React.jsで生成した静的ファイル群をデプロイしていきます。

AWS上での設定

事前にデプロイ対象となるAWS S3のarnをメモしておきます。
例として「aws-my-sample-s3」というパケットを作成しました。

arnは「arn:aws:s3:::aws-my-sample-s3」です

S3デプロイ用のポリシーを作る

例として「aws-deploy-policy」というポリシーを作成しました。

jsonで作っていきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::aws-my-sample-s3"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::aws-my-sample-s3"
            ]
        }
    ]
}

デプロイ用のIAMユーザを作る

IAMからCICD用のユーザを追加していきます。
この時、アクセスの種類は「プログラムによるアクセス」を選択します。

S3へのデプロイのために必要な権限をアタッチする

アクセス権限の設定では、「既存のポリシーを直接アタッチ」を選択し、先程作ったポリシーをアタッチします。

  • aws-deploy-policy

確認画面

タグは特に指定してないです。

githubでの設定に必要な情報を取得する

ユーザの作成が完了すると、以下のような画面に移ります。
csvファイルをダウンロードして保存しておきます。
※このタイミングでしかcsvファイルやシークレットアクセスキーは確認できません。紛失した場合はアクセスキーを再発行します。

github上での設定

Secretsにアクセスキーとシークレットキーを登録する

githubのproject -> Settings -> Secrets
今回は
CICD_DEVELOP_AWS_ACCESS_KEY_ID・・・アクセスキー
CICD_DEVELOP_AWS_SECRET_ACCESS_KEY・・・シークレットキー
で登録しました。

Actionsでworkflowを作成する

  
# This is a basic workflow to help you get started with Actions
name: CICD for Development

# Controls when the action will run. 
on:
  # mainブランチにpush,margeされたタイミングで発火する
  push:
    branches: [ main ]

  # 手動で実行する
  workflow_dispatch:

jobs:

  build:
    name: Build And Upload to Devlopment S3 
    runs-on: ubuntu-latest

    steps:

      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup
        uses: actions/setup-node@v1
        with:
          node-version: '12'
      - run: yarn

      # テスト実行
      - name: Test
        run: yarn test
      
      # ビルド
      - name: Build
        run: yarn build
      
      # S3へのデプロイ準備
      - name: Configure AWS credentials from account
        uses: aws-actions/configure-aws-credentials@v1
        with:
          # Secretsで登録したキーを設定
          aws-access-key-id: ${{ secrets.CICD_DEVELOP_AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.CICD_DEVELOP_AWS_SECRET_ACCESS_KEY }}
          # S3のリージョン
          aws-region: ap-northeast-1

      # デプロイ(ファイルをアップロード)
      - name: Copy Files to s3
        run: |
          aws s3 sync ./build s3://aws-my-sample-s3


関連

github ActionsとElasticBeanstalkで自動デプロイ環境を作る

AWSカテゴリの最新記事