我对使用AWS Fargate在ECS中运行的docker容器的健康检查工作方式感到非常困惑。我认为让人困惑的是,有三个核心组件协同工作,我看到的每个组件都有自己的";健康检查";关注点:
- ECS
- EC2
- ALB
首先,如果我检查健康检查文档,很明显,我的docker映像中的内置HEALTHCHECK
将不会被使用。然而,我在SO上看到了其他人的评论,他们被使用了,那是哪一个呢?
关于ECS的健康检查设置,当我通过AWS仪表板(web界面(中的Fargate为我的ECS服务创建任务定义时,我看不到任何配置健康检查命令的方法。我正在使用C#中的CDK设置基础设施,但出于学习目的,我会查看AWS仪表板并从中编辑内容。我想在尝试自动化之前,我需要学习如何手动设置
我会提到我所看到的,但我不确定这一切是如何拼凑在一起的。
-
ECS->群集->单击群集名称->点击服务名称:我看到";健康目标";以及";不健康目标";
-
ECS->群集->单击群集名称->单击服务名称->部署和事件选项卡:有一个日志显示";服务X端口80在目标组Y中不正常,原因是(使用这些代码进行健康检查失败的原因:[404](。如果我点击Y的链接;EC2->目标群体->Y(远门(";,其具有";健康检查";在那里,我可以点击";编辑";并指定健康检查";路径";。这似乎消除了错误。
-
ECS->任务定义->单击任务定义名称->单击修订版名称->JSON选项卡:未提及";健康;该文件中的任何位置
从CDK中,您似乎可以在创建ApplicationLoadBalancedFargateService
之后设置健康检查,此时您可以调用ApplicationLoadBalancedFargateService.TargetGroup.ConfigureHealthCheck()
,这需要一个我还没有弄清楚如何创建的IHealthCheck
。
此外,在CDK中,有QueueProcessingFargateService
(不确定这与FargateService的ALB版本有何不同(具有HealthCheck
属性,我可以初始化,而ALB版本则没有。只是增加了更多的困惑。我不一定关心QueueProcessingFargateService
本身,但它确实出现在CDK文档中HealthCheck
的代码示例中
所有这些都令人困惑。AWS的web用户界面非常糟糕,很难导航。我在SO和谷歌搜索结果上看到了很多关于如何设置健康检查的相互矛盾的信息。有人能帮我弄清楚这一切吗?
关于ECS的健康检查设置,当我在AWS面板中通过Fargate为我的ECS服务创建任务定义时,我看不到任何配置健康检查命令的方法
您必须手动编辑任务定义JSON,而不是使用ECS web控制台的点击功能。ECS网络控制台目前缺少很多功能。
所有这些都非常令人困惑。AWS的web用户界面非常糟糕,很难导航。我在SO和网络搜索结果上看到了很多关于如何设置健康检查的相互矛盾的信息。我下一步可以尝试什么?
我建议根本不要使用web UI。使用CDK,或使用Terraform创建资源。使用web UI只查看创建的内容。
至于如何设置健康检查,这取决于你要做什么。如果你使用的是负载均衡器,那么目标组的健康检查是必需的。你可以在负载均衡器的目标组上设置这些,你可以通过UI来完成,因为这在EC2 web UI中已经结束,并且功能齐全。目标组健康检查将定期向ECS任务执行网络请求,并确保收到正确的响应。
如果您没有使用负载均衡器,或者您只想在目标组检查之外进行额外的健康检查,则可以在ECS任务定义中设置健康检查命令。它们定期在容器内运行一个命令。你不能真正通过web UI来设置这些,即使是更高级别的CDK构造也可能掩盖这一点,或者使其不那么明显。这是ECS的一个可选的高级功能,大多数人都不使用,我相信如果您使用CDK,您将不得不降级到较低级别的CDK构造。