我正在使用 Pulumi 将应用程序部署到 AWS Fargate。在健康部署中,大约 10 分钟即可完成。在不健康的部署中,应用程序将报告不健康的状态,并且 Fargate 将一遍又一遍地重新启动它大约 45 分钟,然后才确定部署失败。在 99% 的情况下,我们在部署后一分钟内就知道它是否永远不会成功。
部署期间的健康检查因此具有三种状态;
一旦应用程序报告“不,此代码已损坏,此代码的部署将无法工作,请中止部署”,我们如何告诉 Fargate 放弃重新启动?
这是当前配置:
const lb = new awsx.classic.lb.ApplicationLoadBalancer('app-alb', {})
const lbTargetGroup = new awsx.classic.lb.ApplicationTargetGroup(
'app-targetgroup',
{
loadBalancer: lb,
protocol: 'HTTP',
port: appConfig.requireNumber('webPort'),
healthCheck: {
protocol: 'HTTP',
path: '/health',
unhealthyThreshold: 10,
healthyThreshold: 2,
timeout: 20,
interval: 30,
matcher: '200',
},
}
)
并且因为
matcher
仅区分两种状态; lgtm 等。我们可以添加第三种状态吗?
您唯一的选择是启用 ECS 部署断路器(如果您尚未启用)。除此之外,没有任何选择可以让 ECS 更快地失败部署。
ECS 断路器是最接近您所描述的:
“一旦应用程序报告“不,此代码已损坏,此代码的任何部署都将无法工作,请中止部署”,请告诉 Fargate 放弃重新启动?”
但是它仍然会重试至少 10 次,因此仍然需要很长时间才能确定部署失败。
目前,ECS、Fargate、负载均衡器或目标组中没有其他设置可以进一步控制。