目前,我使用resolve:ssm 通过CFN 部署了ECS 服务的第一个版本,以添加对容器映像标签和任务定义ARN 的动态引用。然后我在 Gitlab-ci 管道中使用 AWS cli 更新服务,这样我可以避免大多数漂移问题,但不是全部。完全避免漂移的最佳方法是什么?我可以更新 SSM 上的参数(在本例中为映像标签)并在 Gitlab 作业中调用“aws sam deploy”吗?
我使用动态引用是因为我想避免在 gitlab 的作业中更新 CFN 模板,然后提交它
谢谢:)
就我个人而言,我只是允许漂移发生。应用工作流程来防止应用 Cloudformation 更新导致服务更新时出现问题。
在云形成模板中,图像标签被定义为静态名称,就像环境名称一样,例如
dev
/staging
/production
。这永远不会改变。
通过 CICD 工作流程,构建新图像并使用唯一标签进行标记。该唯一标签用于更新服务。然后,在更新成功后,我们立即将 CFN 模板中使用的相同静态标签(例如
dev
/staging
/production
)添加到 ECR 中的新图像中。
这具有以下效果:
但是,技术上仍然存在偏差。
完全避免漂移的另一种选择是始终使用 CFN 来更新服务,并且从不在 CFN 之外更新服务。