如何使用加壳器更新自定义 AMI 并与自动缩放组集成?
How to update custom AMIs using packer and integrated with auto-scaling group?
目标:保持启动实例以实现负载平衡的最短启动周期并减少故障排除时间。
方法:
- 为 ec2-instances 创建基础自定义 AMI
- Update/rebundle 每个版本的自定义 AMI 和 s/w 补丁(与健康 运行 实例相关的代码和软件更新)。
2.a。 Packer/any CI 可以用于更新吗?如果是这样,如何? (无法在包的文档中找到分步方法)
- 使用 Chef 自动执行第 1 步和第 2 步。
- 将此 AMI 集成到 Auto scaling 组中(对此进行了实验)。
- 将负载均衡器映射到 ASG [完成]。
- 通过在失败时使用 LB 在 ASG 中从更新的 AMI 中启动实例来维持所需的实例数量。
Crux:终止不健康的实例并尽快用ami启动健康的实例。
--
P.S:
我浏览了 [http://blog.kik.com/2016/03/09/using-packer-io-to-optimize-and-manage-ami-creation/] and https://alestic.com/ 的许多帖子。
使用 docker 不在讨论之列。
但还是想不出一个明确的办法。
在现有 ASG 中换出新 AMI 的最简单方法是更新启动配置,然后使用旧 AMI ID 逐个终止任何实例。 ASG 将根据需要调出新实例,这些实例应该使用新的 AMI。如果您想变得更高级(比如让旧实例保持活动状态以便快速回滚),请查看像 Spinnaker 这样的工具,它将每个新的 AMI 作为一个新的相应 ASG 出现,然后重新映射 ELB 以在没有检测到问题的情况下交换流量,然后稍后当您确定部署良好时,它会杀死旧的 ASG 和所有关联的实例。
目标:保持启动实例以实现负载平衡的最短启动周期并减少故障排除时间。
方法:
- 为 ec2-instances 创建基础自定义 AMI
- Update/rebundle 每个版本的自定义 AMI 和 s/w 补丁(与健康 运行 实例相关的代码和软件更新)。 2.a。 Packer/any CI 可以用于更新吗?如果是这样,如何? (无法在包的文档中找到分步方法)
- 使用 Chef 自动执行第 1 步和第 2 步。
- 将此 AMI 集成到 Auto scaling 组中(对此进行了实验)。
- 将负载均衡器映射到 ASG [完成]。
- 通过在失败时使用 LB 在 ASG 中从更新的 AMI 中启动实例来维持所需的实例数量。
Crux:终止不健康的实例并尽快用ami启动健康的实例。
-- P.S: 我浏览了 [http://blog.kik.com/2016/03/09/using-packer-io-to-optimize-and-manage-ami-creation/] and https://alestic.com/ 的许多帖子。
使用 docker 不在讨论之列。
但还是想不出一个明确的办法。
在现有 ASG 中换出新 AMI 的最简单方法是更新启动配置,然后使用旧 AMI ID 逐个终止任何实例。 ASG 将根据需要调出新实例,这些实例应该使用新的 AMI。如果您想变得更高级(比如让旧实例保持活动状态以便快速回滚),请查看像 Spinnaker 这样的工具,它将每个新的 AMI 作为一个新的相应 ASG 出现,然后重新映射 ELB 以在没有检测到问题的情况下交换流量,然后稍后当您确定部署良好时,它会杀死旧的 ASG 和所有关联的实例。