提问人:LurenzZ 提问时间:11/16/2023 最后编辑:Mark BLurenzZ 更新时间:11/23/2023 访问量:33
使用 AWS CLI 更新 ECS 服务,避免 CFN 偏移
Update ECS service with AWS CLI avoiding CFN drift
问:
目前,我使用 resolve:ssm 通过 CFN 部署了 ECS 服务的第一个版本,以添加对容器映像标签和任务定义 ARN 的动态引用。然后,我在 Gitlab-ci 管道中使用 AWS cli 更新服务,这样我就可以避免大部分漂移问题,但不是全部。完全避免漂移的最佳方法是什么?我是否可以更新 SSM 上的参数(在本例中为 image 标签)并在 Gitlab 的作业中调用“aws sam deploy”?
我正在使用动态引用,因为我想避免在 gitlab 的作业中更新 CFN 模板,然后提交它
谢谢:)
答:
0赞
sytech
11/17/2023
#1
您可以在 CFN 模板和工作流中结合使用静态值,以防止在应用导致服务更新的 cloudformation 更新时出现问题。
在 cloud-formation 模板中,图像标签仅定义为静态名称,就像环境名称一样,例如 //。这一点永远不会改变。dev
staging
production
通过 CICD 工作流程,构建新图像并使用唯一标签进行标记。该唯一标记用于更新服务。然后,在更新成功后,我们立即将 CFN 模板中使用的相同静态标签(例如 //)添加到 ECR 中的新映像中。dev
staging
production
因此,分步:
- 使用唯一标签构建镜像标签,推送到 ECR
- 使用新的映像标记创建新的任务定义并更新服务
- 等待业务稳定成功
- 将静态标记(CFN 模板中使用的标记)推送到刚刚成功部署的同一新映像
这具有以下重要影响:
- 由于模板使用静态标记值,因此 CFN 永远不会认为它需要更新服务,因为标记更改。您的 CFN 变更集中永远不会有标签更改。
- 通过确保 ECR 中 CFN 中使用的标记遵循服务上应用的当前映像,每当后续 CFN 更新发生因任何其他原因导致服务更新时,它将使用已在使用的相同映像。
如果您在部署工作流中更新参数,则这与 SSM 参数方法类似。
从技术上讲,仍然存在漂移(即:资源在当前已知 CFN 状态之外发生了变化),但是通过工作流可以缓解由该漂移引起的问题。
另一个完全避免偏移的选项是始终使用 CFN 更新服务,并且永远不要在 CFN 之外更新服务。
评论