Github Actionsでaws操作をするときの、汎用的なワークフロー定義

Github Actionsを使用し、awsを操作などすることがあり、その時に教えてもらったワークフロー定義がとても便利だった。

ワークフロー定義

ワークフロー定義は、コミットする際に、下記に配置する。

.github/workflows

以下は定義

name: [ワークフロー名]

on:
  workflow_dispatch:

env:
  AWS_REGION: ap-northeast-1 

  AWS_ROLE_ARN: [ロールARN]
  AWS_WEB_IDENTITY_TOKEN_FILE: /tmp/awscreds

  LOCALSTACK_CACHE_PATH: localstack-image
  LOCALSTACK_VERSION: 0.13.0

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    name: [ジョブ名]
    runs-on: ubuntu-latest
    environment: development

    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Configure AWS
      run: |
        echo AWS_WEB_IDENTITY_TOKEN_FILE=$AWS_WEB_IDENTITY_TOKEN_FILE >> $GITHUB_ENV
        echo AWS_ROLE_ARN=$AWS_ROLE_ARN >> $GITHUB_ENV
        echo AWS_DEFAULT_REGION=$AWS_REGION >> $GITHUB_ENV
        curl --silent -H "Authorization: bearer ${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=sigstore" | jq -r '.value' > $AWS_WEB_IDENTITY_TOKEN_FILE

    - name: [ステップ名]
      run: |
        sh ./[実行シェル名].sh

定義の名称は任意でよい。

補足前提

GithubのIPプロバイダー登録が必要。

Cloudformationを実行したい場合

#!/bin/sh

TemplateS3Bucket=[バケット名]
STACK_NAME=[スタック名]

aws s3 sync ./resources/ s3://${TemplateS3Bucket}/resources/

aws cloudformation deploy \
--template-file ./resources/cicd/root-stack.yaml \
--stack-name ${STACK_NAME} \
--capabilities CAPABILITY_NAMED_IAM \
--parameter-overrides `cat ./env/[パラメーターファイル名].vars`

Code Pipelineを実行したい場合

#!/bin/sh

PIPELINE_NAME=[パイプライン名]

aws codepipeline start-pipeline-execution \
--name ${PIPELINE_NAME}

個人的には、これが便利。

Githubにプッシュしたらデプロイするというのを、webhookで対応すると、すべてのプッシュで実行されてしまう。
これを制御しようとすると、パイプラインの作成時にフィルタを入れないといけないのだが、ワークフロー定義に下記を入れることでそれと同様のことができる。

on:
  push:
    branches:
      - [ブランチ名]
  workflow_dispatch:

ワークフロー定義の on: 部分を上書きする。