0
0

ECRにdocker pushしてもLambdaが古いイメージを参照する

Posted at

課題

Makefileを用いてECRにイメージをdocker pushした。
Lambdaはlatestタグのイメージを使用しており、新しいイメージがlatestタグを取得したにも関わらず、新しいイメージが使われなかった。

code

PROFILE ?= default

ECR_URI := 123456789.dkr.ecr.ap-northeast-1.amazonaws.com
IMAGE_NAME=image-name
LAMBDA_FUNCTION_NAME=my-function

.PHONY: deploy
deploy: ecr_login
	docker build -t $(IMAGE_NAME):latest -f ./xxx/runtime/xxx/Dockerfile ./xxx/runtime --no-cache
	docker tag $(IMAGE_NAME):latest $(ECR_URI)/$(IMAGE_NAME):latest
	docker push $(ECR_URI)/$(IMAGE_NAME):latest
 
.PHONY: ecr_login
ecr_login:
	aws ecr get-login-password --profile $(PROFILE) --region ap-northeast-1 | docker login --username AWS --password-stdin $(ECR_URI)

問題点

ECRにイメージをpushしただけではLambdaが使用するイメージは更新されない。
明示的にLambdaの使用イメージを更新しなければならない。

Lambda は、イメージタグを特定のイメージダイジェストに解決します。これは、関数のデプロイに使用されたイメージタグを Amazon ECR 内の新しいイメージを指すように変更しても、Lambda は新しいイメージを使用するように自動的に関数を更新しないことを意味します。新しいイメージを同じ Lambda 関数にデプロイするには、Amazon ECR のイメージタグが同じままであっても、update-function-code コマンドを使用する必要があります。

from: コンテナイメージで Python Lambda 関数をデプロイする - AWS Lambda

解決法

Lambdaが新しいイメージを使用するようにLambda関数の更新が必要だった。次のコマンドをMakefileに追加する。

aws lambda update-function-code --profile $(PROFILE) --function-name $(LAMBDA_FUNCTION_NAME) --image-uri $(ECR_URI)/$(IMAGE_NAME):latest

Makefileは次のようになる。

PROFILE ?= default

ECR_URI := 123456789.dkr.ecr.ap-northeast-1.amazonaws.com
IMAGE_NAME=image-name
LAMBDA_FUNCTION_NAME=my-function

.PHONY: deploy
deploy: ecr_login
	docker build -t $(IMAGE_NAME):latest -f ./xxx/runtime/xxx/Dockerfile ./xxx/runtime --no-cache
	docker tag $(IMAGE_NAME):latest $(ECR_URI)/$(IMAGE_NAME):latest
	docker push $(ECR_URI)/$(IMAGE_NAME):latest
	aws lambda update-function-code --profile $(PROFILE) --function-name $(LAMBDA_FUNCTION_NAME) --image-uri $(ECR_URI)/$(IMAGE_NAME):latest

.PHONY: ecr_login
ecr_login:
	aws ecr get-login-password --profile $(PROFILE) --region ap-northeast-1 | docker login --username AWS --password-stdin $(ECR_URI)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0