[英]How to detect changes in ECR image when using sam deploy and CloudFormation
我有此模板中引用的 CF 模板和 ECR 圖像
Image: !Sub <registry_id>.dkr.ecr.eu-central-1.amazonaws.com/<repo_name>:${AWS::StackName}
如果我更新圖像然后運行
sam deploy --template-file devops/templates/${CFFILENAME}.yml \
--capabilities CAPABILITY_NAMED_IAM --stack-name "${STACK_NAME}" \
--region ${AWS_DEFAULT_REGION} --no-fail-on-empty-changeset
它不會檢測到任何變化,我必須運行
aws ecs update-service --cluster Env-${STACK_NAME}-ClusterALB --service Env-Backend --force-new-deployment
稍后在管道中更新 ECS 任務,但它會導致堆棧漂移。 我想避免它,並在我的 CI 管道中一步完成所有操作,並且只使用 CF。 有什么漂亮的方法嗎?
在給它更多的思考之后 - 這就是我想出的。 我在我的 cloudformation 文件中引入了新參數,例如:
Parameters:
ImageTag:
Description: "Image SHA"
Type: String
然后我在任務定義中引用了它
ContainerDefinitions:
- Name: admin
Essential: true
Image: !Sub <repo_id>.dkr.ecr.eu-central-1.amazonaws.com/<repo_name>:${AWS::StackName}-${ImageTag}
並使用--parameter-overrides
將參數傳遞給 SAM,如下所示:
sam deploy --template-file devops/templates/${CFFILENAME}.yml \
--capabilities CAPABILITY_NAMED_IAM --stack-name "${STACK_NAME}" \
--region ${AWS_DEFAULT_REGION} --no-fail-on-empty-changeset \
--parameter-overrides ImageTag=${IMAGE_TAG}
並且圖像標簽是在 GitLab CI 的管道期間使用提交 SHA 生成的,如下所示:
- IMAGE_TAG="$(echo $CI_COMMIT_SHA | head -c 8)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.