对于 AWS ASG,如何为新实例设置自定义就绪检查?

For AWS ASG, how to set up custom readiness check for new instances?

我们有一个包含 运行 个容器(使用 ECS)的 AutoScaling 组。当我们在 ASG 中添加或替换 EC2 实例时,它们没有我们想要的 docker 图像。因此,我们 运行 一些 docker pull 命令使用 cloud-init 在它们启动时获取图像。

但是,ASG认为新实例准备好了,终止了旧实例。但实际上,直到所有 docker 个图像都被拉出后,这个新实例才准备就绪。


例如 假设我的 ASG 需要的数量是 5,我必须使用 cloud-init 拉取 5 个容器。现在,我想替换我的 ASG 中的所有 EC2 实例。

随着新实例开始启动,ASG 将终止旧实例。但由于 docker pull 滞后,在部署过程中会有一段时间,实际有效实例将少于 3 或 2。


如何在 cloud-init 完成时 "mark an instance ready"

注意:我认为 Cloudformation 可以使用 CFN-Bootstrap 弥合这种沟通差距。但我没有使用 Cloudformation。

您看到的是AutoScaling Lifecycle Hooks。您可以将实例保持在 Pending:Wait 状态,直到 docker 拉取完成。然后您可以将该实例移动到 InService。所有这些都可以使用 AWS CLI 完成,因此应该可以在 docker 命令之前和之后使用 AWS AutoScaling 命令来实现。

我提供的文档 link 详细解释了此功能,并提供了有关如何使用它的很好的示例。