フェーズ6で手動で行ったデプロイ操作を、フェーズ7で構築したOIDCの信頼関係を使ってシステム化します。
リポジトリに .github/workflows/cd.yml を作成してください。
name: "CD - Deploy to Lambda"
on:
workflow_dispatch:
permissions:
id-token: write
contents: read
env:
AWS_REGION: ap-northeast-1
AWS_ROLE_ARN: arn:aws:iam::123456789012:role/github-actions-deploy
FUNCTION_NAME: hello-world
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: $
aws-region: $
- name: Package and deploy
run: |
cd src
zip lambda.zip index.py
aws lambda update-function-code \
--function-name $ \
--zip-file fileb://lambda.zip
env: にリージョン、ロールARN、関数名といった環境依存の情報をまとめて宣言しています。AWS_ROLE_ARN にはフェーズ7のCloudFormation出力タブで確認した RoleArn の値を設定してください。FUNCTION_NAME もフェーズ1で作成した関数名に合わせてください。
フェーズ6で手動で行った操作が、そのままワークフローのステップになっています。
やっていることは同じです。認証方法が人間のログインからOIDCに変わっただけです。
| 手動(フェーズ6) | 自動(フェーズ8) |
|---|---|
aws login |
aws-actions/configure-aws-credentials(OIDC) |
cd src && zip lambda.zip index.py |
run: cd src && zip lambda.zip index.py |
aws lambda update-function-code ... |
run: aws lambda update-function-code ... |
ワークフローファイルを main ブランチにマージしたら、GitHubのActionsタブからデプロイを実行してみましょう。

実行が完了すると、ワークフローの実行結果が表示されます。緑のチェックマークが出ていれば成功です。
このように workflow_dispatch をトリガーにしたワークフローは、Actionsタブから任意のタイミングで手動実行できます。
AWSコンソールでLambda関数を開いて、テスト実行してください。
コードが更新されていれば成功です。
フェーズ4のCI(ci.yml)と比較すると、permissions の違いが見えます。
| CI | CD | |
|---|---|---|
| 目的 | コードのテスト | AWSへのデプロイ |
| permissions | contents: read |
id-token: write + contents: read |
| AWS接続 | なし | あり(OIDC経由) |
id-token: write は、GitHub ActionsがOIDCトークンを発行するために必要な権限です。CIではAWSに接続しないため不要でした。
CDの仕組みが整いました。次のフェーズでは、実際の開発フローに沿ってIssueからデプロイまでを一通り体験します。
フェーズ9: CI/CDパイプラインで変更 に進みましょう。