AWS ECS新部署服务进入健康状态时的通知需求
解决ECS部署后健康实例上线通知的方案
这个需求其实挺普遍的,我之前帮不少团队实现过类似的场景,给你几个靠谱的落地思路:
方案一:利用EventBridge捕获ECS健康任务事件(最省心)
ECS会把任务的状态变更事件推送到EventBridge,咱们可以精准过滤出「任务运行且容器健康」的事件,再触发通知:
- 首先确保你的ECS任务配置了容器健康检查(这是关键,不然ECS没法判断容器是否健康),比如在Dockerfile里定义
HEALTHCHECK指令,或者在ECS任务定义里配置健康检查规则。 - 登录EventBridge控制台,创建一条规则:
- 事件源选择「ECS」,事件类型选「ECS Task State Change」
- 添加过滤条件:匹配
detail.lastStatus为RUNNING,同时detail.containers[*].healthStatus为HEALTHY(如果是多容器任务,可根据需求调整过滤逻辑) - 把规则的目标设置为SNS主题,你可以订阅这个主题到邮箱、SMS,或者用Lambda把消息转换成Slack/Teams的格式再推送。
方案二:基于CodeDeploy蓝绿部署的事件通知(适合有蓝绿需求的场景)
如果你的ECS部署用了CodeDeploy的蓝绿部署模式,那CodeDeploy本身会在部署完成(新实例全部健康且流量切换完成)时发送事件:
- 在EventBridge里创建规则,捕获CodeDeploy的「Deployment Successful」事件,过滤条件可以指定你的ECS服务对应的部署组。
- 同样把目标指向SNS或Lambda,触发通知。这个方案的优势是CodeDeploy已经帮你完成了健康验证和流量切换的校验,通知时机更精准。
方案三:自定义Lambda监控(灵活定制逻辑)
如果上面的现成事件满足不了你的定制需求(比如要对比新旧任务、自定义健康判断逻辑),可以写个Lambda函数定时监控:
- 用ECS的
describe-servicesAPI获取当前服务的运行任务列表,记录新部署任务的ARN(可以通过部署时间或者镜像标签来区分) - 再调用
describe-tasksAPI检查这些任务的容器健康状态 - 当检测到所有新任务都进入
HEALTHY状态时,调用SNS或者直接调用通知API(比如Slack的Webhook)发送通知 - 可以用CloudWatch Events给这个Lambda设置定时触发,比如每30秒检查一次,直到满足条件后停止(或者标记已通知避免重复发送)
注意事项
- 一定要配置容器健康检查:没有健康检查的话,ECS只会知道任务在运行,但不知道服务是否真的可用,通知会不准确。
- 避免重复通知:可以在Lambda里用DynamoDB记录已经通知过的部署批次,或者通过EventBridge的事件ID去重。
- 通知内容定制:可以在Lambda里拼接更详细的信息,比如服务名称、镜像版本、健康实例数量,让团队更清楚上线情况。
内容的提问来源于stack exchange,提问作者user1686402
相关产品推荐
相关产品推荐

