amazon-web-services - 无停机 AWS + ECS Cloudformation

标签 amazon-web-services docker amazon-ec2 aws-cloudformation elastic-load-balancer

伙计们。

我遇到了一个小问题,到目前为止还没有解决。 事情是这样的:我有一个在 ECS 上运行的小应用程序。 为了创建应用程序,我创建了一个 ASG,并在 LaunchConfig 上将实例注册到我的 ECS 集群。后来,我在我的ASG前面放了一个ALB,这样我的应用程序就可以在互联网上使用;到目前为止一切都很好。当我想要在我的 ECS 实例上滚动更新时,问题就出现了。我有大约 20 秒的短暂停机时间。

嗯,这并不是完全停机,但发生的情况是我的 LB 在更新滚动期间不断向我的 ECS1 发送请求,所以我得到了一个非常好的结果浏览器上的 502。当然,一旦更新完成,一切都会好起来的。当我的 ECS2 实例更新时,也会发生同样的 502。如果我刷新,我会得到一个可以运行的应用程序;如果我第二次刷新,我会收到 502,因为正如我所说,ALB 不断向我的IN PROGRESS 发送请求(滚动更新) ) ECS 实例。

因此,我认为我可以在升级时取消注册 ECS 实例,然后在完成后将其重新注册。但我使用 CloudFormation 滚动更新,并且我真的不想手动执行操作。

我当前的运行状况检查每30秒进行一次,以便目标组将实例视为不健康,因此停止向其发送请求。

我怎样才能实现它?

谢谢!

最佳答案

有一个很棒的 article on the AWS blog解释了如何实现这一点。他们甚至使用 CloudFormation 作为示例,因此不涉及手动步骤。

它们基本上利用 Autoscaling Groups Lifecycle hook 与 SNS 和 Lambda 配合,在 ASG 实例停止服务时触发连接耗尽。最重要的是,当 CloudFormation 触发滚动更新时,这也适用。

They open sourced the solution on GitHub ,您可以使用整个内容,也可以根据需要复制有趣的部分。

关于amazon-web-services - 无停机 AWS + ECS Cloudformation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014463/

相关文章:

amazon-web-services - 通过使用 amazon api-gateway 的客户端 ssl 身份验证在 EB 环境中进行身份验证

amazon-web-services - Amazon CloudFront 备用域名

amazon-web-services - Cloudformation 中的循环依赖

php - CloudFlare 用于缓存在核心 php 中开发的 REST API 响应

java - 运行 Docker Maven 容器

docker - ** kiwi-tcms ** docker容器未在Raspberry上启动

c# - 将 EC2 实例启动到 vpc 并使用公共(public) IP

amazon-web-services - SSM 中未选择 ECS 上的 EC2

amazon-web-services - Amazon Cloudfront 允许所有备用域名 (CNAMES)

docker - 如何禁用docker容器的root访问权限?