メインコンテンツへスキップ

codebuildからlambda deployができない

· loading · loading ·
kiitosu
著者
kiitosu
画像処理やデバイスドライバ、データ基盤構築からWebバックエンドまで、多様な領域に携わってきました。地図解析や地図アプリケーションの仕組みにも経験があり、幅広い技術を活かした開発に取り組んでいます。休日は草野球とランニングを楽しんでいます。

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を試してみたりしちゃう杜撰さですね。

Reply by Email

関連記事

localstackを使ったlambdaのdeployについて
· loading · loading
postgresql の insert on conflict で not null 制約エラーが起きる
· loading · loading
hasura data delivery networkとは
· loading · loading