😊

codebuildからlambda deployができない

2024/03/04に公開

codebuildでlambda update-function-codeをしようとすると

An error occurred (AccessDeniedException) when calling the UpdateFunctionCode operation: Lambda does not have permission to access the ECR image. Check the ECR permissions.

というエラーが起きた。
awsのre:Postに解決策があった。

Following error when trying to create a Lambda Function: An error occurred (AccessDeniedException) when calling the CreateFunction operation: None | AWS re:Post

以下のpリシーをcodebuildのroleに設定する必要がある。

{
  "Effect": "Allow",
  "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy" ],
  "Resource": "arn:aws:ecr:<region>:<account>:repository/<repo name>/"
}

lambdaからのpullをECRが許可しているかポリシーの取得が必要ということみたい。

なぜ、調査に手こずったのかというと
すでにlambdaに該当レポジトリからイメージがdeployされているときは、問題が起きない。
ため。

開発の段階においてECRのpushはlocalから実施して動作確認したりすると思う。
そうすると上記ポリシーを付与していなくてもcodebuildからdeploy出来てしまう。

まっさらな環境でだけ問題が起きて、
「イメージがないのかな?pushはできるよな?localからpush試してみるか。」
とやった途端に症状が再現しなくなる。

とはいえ、根本的な問題は理論的な背景なくpushを試してみたりしちゃう杜撰さですね。

Discussion