lambda-cicd-workshop

フェーズ8: CD – GitHub Actionsからの自動デプロイ

フェーズ6で手動で行ったデプロイ操作を、フェーズ7で構築したOIDCの信頼関係を使ってシステム化します。

CDワークフローを作成する

リポジトリに .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の手動デプロイとの対比

フェーズ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 ...

動作確認: Actionsタブから手動デプロイ

ワークフローファイルを main ブランチにマージしたら、GitHubのActionsタブからデプロイを実行してみましょう。

  1. リポジトリのActionsタブを開く
  2. 左のワークフロー一覧から「CD - Deploy to AWS Lambda」を選択する
  3. 「Run workflow」ボタンをクリックする
  4. ブランチを選択して「Run workflow」を実行する

実行が完了すると、ワークフローの実行結果が表示されます。緑のチェックマークが出ていれば成功です。

このように workflow_dispatch をトリガーにしたワークフローは、Actionsタブから任意のタイミングで手動実行できます。

動作確認: AWSでLambda関数を動作確認

AWSコンソールでLambda関数を開いて、テスト実行してください。

コードが更新されていれば成功です。

CIとの権限の違い

フェーズ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パイプラインで変更 に進みましょう。