AWS ECS:监控服务更新的状态

Nic*_*ury 7 amazon-web-services amazon-ecs continuous-deployment aws-fargate

我正在尝试使用 Fargate 将一组微服务从 Docker Swarm 迁移到 AWS ECS。

我已经创建了一个ECS集群。此外,我还使用 ECR 初始化了存储库,每个存储库都包含一个微服务的映像。

我已经成功地想出了一种创建新图像并将它们推入 ECR 的方法。事实上,随着代码的每次更改,都会构建、标记并推送一个新的 docker 镜像。

此外,我还创建了一个链接到服务的任务定义。该任务定义包含一个容器以及所有必要的信息。此外,其服务定义该任务将在VPC中运行,并链接到负载均衡器,并且具有目标组。我假设每个新部署都使用带有“最新”标签的映像。

到目前为止,根据我的解释,一切都很清楚并且运行良好。

下面是让我困惑的部分。在每次新构建之后,我想更新服务,以便部署具有更新映像的新任务。我使用 cli 通过以下命令来执行此操作:

aws ecs update-service --cluster <cluster-name> --service <service-name>

通常,执行命令后,我会在事件选项卡下监视部署日志,并使用以下命令检查服务的状态:

aws ecs describe-services --cluster <cluster-name> --service <service-name>

最后,我尝试模拟新创建的图像包含错误代码的情况。因此,新任务将无法部署。我所目睹的是 Fargate 将继续尝试(不间断)部署新任务。此外,除了事件日志之外,describe-services除了 Fargate 正在执行的操作(例如,注册/取消注册任务)之外,该命令不包含相关信息。令我惊讶的是,我找不到任何指示 Fargate 或服务停止部署并回滚到现有部署的机制。

我找到这篇文章(https://aws.amazon.com/blogs/compute/automating-rollback-of-failed-amazon-ecs-deployments/),它提供了一个解决方案。然而,这是一个相当复杂的问题,并且假设每个新部署都是由新任务定义触发的,这不是我想要的。

因此,考虑到我上面的描述,我希望你能回答以下问题:

1)使用CLI命令(出于自动化目的)是否有一种方法可以指示Fargate在几次尝试部署新任务失败后自动停止当前部署?

2)使用CLI命令,有没有办法监控部署的当前状态?例如,当对Docker swarm上的服务进行服务更新时,终端会生成更新过程的实时日志

3) 部署失败后,Fargate 是否有办法发出错误代码、标志或消息?

小智 1

目前,ECS 不直接提供部署状态。一旦发布部署,除了不断轮询更新,直到您有足够的信息可以从中推断出更新之外,没有其他方法可以确定其状态。另外unexpected container exits,没有在任何地方记录。您必须搜索失败的任务。我获取它们的方式是通过 cloudwatch 规则,该规则在任务状态更改时触发 lambda。

我建议您阅读:https://medium.com/@aaron.kaz.music/monitoring-the-health-of-ecs-service-deployments-baeea41ae737