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

Zha*_* Yi 3 amazon-web-services amazon-ecs amazon-cloudwatch aws-fargate

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

Phi*_*nan 5

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

aws ecs wait services-stable
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


das*_*iel 5

现在您可以使用部署断路器,它于 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


小智 4

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

我不确定你使用的是哪种 CI 工具,但如果你使用 Jenkins,你可以在舞台上做到这一点post

Deployments当您更新ECS服务后, ECS服务控制台上会有一个标签,您可以在那里查看,直到该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
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。