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: 部分を上書きする。





