繁体   English   中英

使用 sam deploy 和 CloudFormation 时如何检测 ECR 映像的变化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM