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

7
我正在尝试将一组微服务从Docker Swarm迁移到AWS ECS使用Fargate。 我已经创建了一个ECS集群。此外,我已经使用ECR初始化了仓库,每个仓库都包含一个微服务的镜像。我已经成功地想出了一种方法来创建新的镜像,并将它们推送到ECR中。实际上,每次代码更改时,都会构建,标记和推送一个新的Docker镜像。此外,我创建了一个任务定义,该任务定义链接到一个服务。此任务定义包含一个容器和所有必要的信息。此外,它的服务定义任务将在VPC中运行,并链接到负载均衡器,并具有目标组。我假设每个新部署都使用带有“latest”标签的映像。至此,一切都清晰并且工作得很好。
以下是令我感到困惑的部分。每次构建后,我希望更新服务,以便部署具有更新映像的新任务。我使用以下命令进行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. 不知道。
  2. 我监控Fargate的方式是使用CloudWatch日志。
  3. 在部署失败时,AWS HealthCheck会失败,不是吗?这将显示在CloudWatch日志中。
- Niklas Rosencrantz
2个回答

4

目前,您有一种方法可以这样做:

aws ecs wait services-stable --cluster MyCluster --services MyService

前面的例子会在确认集群上运行的服务稳定后暂停并继续。在 40 次失败检查后将返回 255 的退出代码。

要取消部署,请在创建服务时启用 ECS 断路器:

aws ecs create-service \
     --service-name MyService \
     --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \
     {...}

参考资料:


1
谢谢,我只是想等待最新的部署完成。唯一需要补充的是你可能需要在命令中添加 --region <地区> - jackofallcode

1
目前,ECS没有直接提供部署状态。一旦您发出部署指令,除了不断轮询更新以获取足够的信息来推断状态之外,没有其他确定其状态的方法。此外,“意外容器退出”未在任何地方记录。您必须搜索失败的任务。我获取它们的方式是通过云监控规则,在任务状态更改时触发Lambda函数。建议阅读:https://medium.com/@aaron.kaz.music/monitoring-the-health-of-ecs-service-deployments-baeea41ae737

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接