GitHub ActionsでAWS Code Deployを回す


GitHub ActionsからAWSコマンドを簡単に叩けるようだったので試してみました。
今回CIでやることは『masterにプッシュされたらCodeDeployを走らせる』のみです。

AWS Code Deployの設定

こちらの記事で手順を紹介しています。
AWS Code DeployでEC2にデプロイする

AWS IAMの設定

こちらの記事で手順を紹介しています。
今回CircleCIは使わないので、「IAM準備」の手順のみ参照してください。
CircleCIからAWS Code Deployを実行する

GitHub Secretsへのキー登録

前手順で取得したIAMユーザーの『アクセスキーID』と『シークレットアクセスキー』をGitHubのSecretsに登録します。

まず、GitHubの対象リポジトリの『Settings > Secrets』を開き、『Add a new secret』をクリックします。

Secretsの設定画面になるので以下2つを設定します。

Name Value
AWS_ACCESS_KEY_ID IAMのアクセスキーID
AWS_SECRET_ACCESS_KEY IAMのシークレットアクセスキー

GitHub Actionsの設定

デプロイしたいリポジトリのGitHubページの『Actions』タブを開き、
「Set up a workflow yourself」をクリックします。

.github/workflows/main.ymlの編集画面が開くので、以下のように記載します。

name: AWS Code Deploy

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Run AWS CodeDeploy
      with:
        args: deploy create-deployment --application-name "※APP_NAME※" --deployment-group-name "※GROUP_NAME※" --github-location repository="※REPO※",commitId="${{ github.sha }}"
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_DEFAULT_REGION: ※REGION※

※2020/11/20 修正
以前は以下を参考にmain.ymlを記載していたが、2020年11月現在使えなくなっていたので上記の通り切り替えた。
AWS Cli install action

なお、以下の部分は各自の環境に合わせて読み替えてください。

読み替える文字列 設定する値
※APP_NAME※ CodeDeployで設定したアプリケーション名
※GROUP_NAME※ CodeDeployで設定したデプロイグループ名
※REPO※ デプロイ対象のGitHubリポジトリ(「ユーザー名/リポジトリ名」形式)
※REGION※ CodeDeployを走らせるAWSのリージョン(例:ap-northeast-1)

記載できたらコミットします。
コミットしたら、今回のコミットに対してGitHub Actionが動くので正常終了するか確認してください。

これで設定は完了です。
masterブランチが更新される度にAWS Code Deployが走りデプロイされるようになりました。

今回はデプロイのみのCIだからか、1回1分以内で処理完了していました。
Actionsはプライベートリポジトリで月間2,000分まで無料(2020年3月現在)なので、2,000回くらいリリースできる想定。