AWS

GitHub Actionsで Lambdaにデプロイ失敗した原因を調査


press
GitHub Actionsで Lambdaにデプロイ失敗した原因を調査

GitHub Actionsで Lambdaにデプロイ失敗した原因を調査

GitHub ActionsでLambdaへデプロイ中に発生したエラーを調査し、適切なポリシーの追加と deploy.ymlへのコマンド追加で解消する方法を解説します。

エラー発生の経緯と対応

  1. –environmentでGitHub ActionsからLambdaに環境変数を読み込ませようとしてUpdateFunctionConfigurationエラー発生
    • 関数の更新権限(UpdateFunctionConfiguration)をポリシーに追加
  2. コードの更新中に環境変数の更新が競合してしまいResourceConflictExceptionエラー発生
    • 進行中の処理の完了を待って次の処理を実行するwaitコマンドをdeploy.ymlに追加
  3. waitコマンドで処理の完了を待って次の処理へ進もうとしてAccessDeniedExceptionエラー発生
    • 関数の取得権限(GetFunctionConfiguration)をポリシーに追加

UpdateFunctionConfiguration

aws lambda update-function-configurationを追加して環境変数を読み込ませようとしましたが、Lambda関数の設定を更新する権限が無いため下記エラーが発生しました。

エラー内容

An error occurred (AccessDeniedException) when calling the UpdateFunctionConfiguration operation: User: arn:aws:sts::AWSARN:assumed-role/LambdaDeploymentFromGitHubRole/GitHubActions is not authorized to perform: lambda:UpdateFunctionConfiguration on resource: arn:aws:lambda:***:AWSARN:function:LAMBDAFUNCTIONNAME because no identity-based policy allows the lambda:UpdateFunctionConfiguration action

UpdateFunctionConfigurationのポリシーを追加することでエラーは解消されましたが、update-function-codeでコードの更新中にupdate-function-configurationで環境変数の更新処理も進み処理が競合(コンフリクト)してしまい下記エラーが発生しました。

ResourceConflictException

エラー内容

An error occurred (ResourceConflictException) when calling the UpdateFunctionConfiguration operation: The operation cannot be performed at this time. An update is in progress for resource: arn:aws:lambda:***:AWSARN:function:LAMBDAFUNCTIONNAME

aws lambda wait function-updated --function-name LAMBDAFUNCTIONNAMEを追加してコードの更新が完了されるまで待機するようにしましたが、Lambda関数の設定を取得するための権限が無いため下記エラーが発生しました。

GetFunctionConfiguration

エラー内容

Waiter FunctionUpdated failed: An error occurred (AccessDeniedException): User: arn:aws:sts::AWSARN:assumed-role/LambdaDeploymentFromGitHubRole/GitHubActions is not authorized to perform: lambda:GetFunctionConfiguration on resource: arn:aws:lambda:***:AWSARN:function:LAMBDAFUNCTIONNAME because no identity-based policy allows the lambda:GetFunctionConfiguration action

GetFunctionConfigurationのポリシーを追加することでエラーが解消され、コードの更新、環境変数の更新が正常に処理されるようになりました。

最終的なコード

ポリシー(JSON)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunctionConfiguration",
                "lambda:UpdateFunctionCode",
                "lambda:UpdateFunctionConfiguration"
            ],
            "Resource": "arn:aws:lambda:ID:function:LAMBDAFUNCTIONNAME"
        }
    ]
}

deploy.yml

name: AWS Lambda Deploy 
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ${{ secrets.AWS_REGION }}
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
          role-session-name: GitHubActions

      - name: get-caller-identity is allowed to run on role.
        run: aws sts get-caller-identity

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: |
          cd lambda
          pip install -r requirements.txt -t .

      - name: Deploy to AWS Lambda
        run: |
          cd lambda && zip -r package.zip ./*
          aws lambda update-function-code \
          --function-name LAMBDAFUNTIONCNAME --zip-file fileb://package.zip --publish

          aws lambda wait function-updated --function-name LAMBDAFUNCTIONNAME

          aws lambda update-function-configuration \
          --function-name LAMBDAFUNCTIONNAME \
          --environment "Variables={API_KEY=${{ secrets.API_KEY }}}"

株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Related Articles

    AWS

    AWSで追加したユーザのMFAに1Passwordを設定

    AWSで追加したユーザのMFAに1Passwordを設定 AWSのコンソールにログインする際にMFA(Multi-Factor Authentication)という多要素認証を設定することで、メールアドレスとパスワードに […]

    Posted on by press
    AWS

    AWSのCloud9を使ってPythonのプログラミング研修を開催

    AWSのCloud9を使ってPythonのプログラミング研修を開催 2022年11月から2023年2月までの期間で、群馬県庁職員を対象にしたDXを促進するためのPythonによるプログラミング研修を開催しました。現在、群 […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録するとファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません