正在寻找监控 ECS 部署失败通知的好方法?

Looking for a good way to monitor ECS deploy failure notification?

我正在将服务部署到 ALB 后面的 ECS fargate。在部署过程中,ALB 向服务发送健康检查,如果健康检查连续失败 3 次,ECS 将销毁新部署的服务并保留旧版本的容器。 我正在寻找一种方法来监视部署失败案例。一种可能的解决方案是监控 ECS 任务状态变化。如果容器状态变为 STOP,则发送警报。但是这个解决方案并不特定于部署。如果出现错误,容器可以随时停止。同样在部署期间,旧容器的状态也将变为 STOPPED。那么我可以使用任何其他指标来监控部署失败吗?

通常,我们会在 CI/CD 系统的末尾集成部署检查。

我不确定您使用的是哪个 CI 工具,但如果您使用 Jenkins,则可以在 post 阶段执行此操作。

并且更新ECS服务后,在ECS服务控制台上有一个Deployments标签,你可以在那里查看,直到ACTIVE行消失。这意味着新任务已经部署。它也适用于 aws-cli,因此您可以使用 aws-cli 和 jq 到 运行 一个简单的循环来检查您的新任务是否已部署。

下面我有一个示例脚本可以参考

 #!/bin/bash

 RESULT=$(aws ecs describe-services --cluster ${ECS_CLUSTER} --service ${SERVICE_NAME} \
   | jq -r '.services[].deployments[] | select(.status == "ACTIVE")')

 # No ACTIVE status means deployment complete
 if [ "$RESULT" = "" ]; then
   exit 0
 else
   echo "$RESULT"
   exit 1
 fi

希望对你有帮助。

我认为接受的答案可能有点过时了。 AWS CLI 有一个专门设计用于确保成功部署最近部署的 ECS 服务的命令。

aws ecs wait services-stable

上述命令将每 15 秒轮询一次,直到达到成功状态。在 40 次检查失败后,它将以 255 错误代码退出。

https://docs.aws.amazon.com/cli/latest/reference/ecs/wait/services-stable.html

此外,您可以使用 Amazon EventBridge 响应 ECS 事件(容器实例状态更改事件、任务状态更改事件和服务操作事件)。有很多有用的触发器:CloudWatch Logs、Lambda、EC2 运行 命令、Kinesis、Step Functions 和 SNS 主题或 SQS 队列。

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch_event_stream.html

现在您可以使用部署断路器,它于 2020 年 11 月发布:

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html

然后您可以使用 CloudWatch 获取状态变化并触发 lambda 函数:

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwet.html

然后您可以在“eventName”:“SERVICE_DEPLOYMENT_FAILED”时将其作为通知发送给 Slack 例如:

https://gist.github.com/KensoDev/d9f5ea978b16bac06463c6c78191f220