概要
Codebuildのbuildspec.yaml
内で、ソースコードをLambdaへのアップロードを実施するようにしました。
その際に以下のエラーに遭遇。原因と解決方法を紹介します。
An error occurred (AccessDeniedException) when calling the UpdateFunctionCode operation: User: arn:aws:sts:::assumed-role/CodeBuildRole/AWSCodeBuild-xxxxxxxx is not authorized to perform: lambda:UpdateFunctionCode on resource: arn:aws:lambda:::function: because no identity-based policy allows the lambda:UpdateFunctionCode action
原因
原因は、CodeBuildの実行ロールにlambda:UpdateFunctionCode
アクションを実行するための権限がないため。IAMロールに権限付与が必要です。
解決
CodeBuildの実行ロールに、lambda:UpdateFunctionCode
アクションを許可するポリシーを追加すればOKです。
CodeBuildプロジェクトの「サービスロール」と書いてあるところから該当のIAMロールへ飛べます。
私の場合は、既存で利用していたロールに以下のように追加しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"codebuild:CreateReportGroup",
"codebuild:CreateReport",
"codebuild:UpdateReport",
"codebuild:BatchPutTestCases",
"codebuild:BatchPutCodeCoverages",
"codebuild:StartBuild",
"codebuild:StopBuild",
"codebuild:RetryBuild",
"lambda:UpdateFunctionCode" ## これを追加!
],
"Resource": "*"
}
]
}
これにより、
CodeBuildがLambda関数のコードを更新できるようになり、エラーがなくなりました。