Zha*_* Yi 3 amazon-web-services amazon-ecs amazon-cloudwatch aws-fargate
我正在向 ALB 后面的 ECS fargate 部署服务。在部署过程中,ALB 向服务发送健康检查,如果健康检查连续 3 次失败,ECS 将销毁新部署的服务并保留旧版本的容器。我正在寻找一种方法来监控部署失败案例。一种可能的解决方案是监控 ECS 任务状态变化。如果容器状态变为 STOP,则发送警报。但此解决方案并非特定于部署。如果出现错误,容器可以随时变为 STOPPED。同样在部署期间,旧容器的状态也将变为 STOPPED。那么还有其他指标可以用来监控部署失败吗?
我认为上面的答案可能有点过时了。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
现在您可以使用部署断路器,它于 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)
希望对您有帮助。
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |