簡體   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