我正在尝试使用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是否可以发出错误代码,标志或消息的信号?
答案 0 :(得分:1)
当前,ECS不直接提供部署状态。发出部署后,除了不断地轮询更新,直到您有足够的信息可以从中推断出之前,无法确定其状态。加unexpected container exits
不会记录在任何地方。您必须搜索失败的任务。我得到它们的方法是通过cloudwatch规则,该规则会在任务状态更改时触发一个lambda。
我建议您阅读:https://medium.com/@aaron.kaz.music/monitoring-the-health-of-ecs-service-deployments-baeea41ae737