😊
codebuildからlambda deployができない
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に解決策があった。
以下の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