AWS 自动扩展组 AMI

Posted

技术标签:

【中文标题】AWS 自动扩展组 AMI【英文标题】:AWS auto-scaling group AMI 【发布时间】:2018-05-01 01:29:12 【问题描述】:

我有四个使用 ELB 在 AWS 上运行的 EC2(API 服务器)实例,我想应用自动扩展组。据我了解,我首先应该为我正在运行的四个 EC2 实例之一创建一个 AMI,它会从我根据配置创建的 AMI 自动扩展。此时,我是否应该在推送新代码时重新创建 AMI,以便从最新版本向上扩展?

【问题讨论】:

【参考方案1】:

是的,更新后的代码应该被烘焙到一个新的AMI 中,只要您修改代码,它就会被推送到 EC2(部署)。

另一种方法是使用docker image,这样您就可以使用相同的 AMI 并更新您的 docker 映像。

【讨论】:

【参考方案2】:

你已经掌握了基础知识。

当您使用 Auto Scaling 组 (ASG) 时,您的 EC2 实例应该是无状态的。这意味着您不会将数据保存在实例上,而是将数据存储在其他地方,例如 RDS 或 S3。当 ASG 启动新实例时,您的 EC2 实例应该有一个脚本(例如在 EC2 用户数据中)来下载或复制新实例所需的任何数据。

如果您已经拥有良好的 EC2 实例配置和设置,请从其中一个 EC2 实例创建一个 AMI,作为 ASG 的新 AMI。

当您使用永久信息(例如新的 Windows 或 Linux 补丁、软件或应用程序更新等)修改您的实例时,您将创建一个新的 AMI 来替换以前的 AMI。

Auto Scaling Groups

【讨论】:

【参考方案3】:

您无需在每次更改代码时都重新创建 AMI。事实上,您可以将 AWS CodeDeploy 与 Autoscaling 组一起使用,以便在每次创建新的 EC2 实例时部署您的最新代码。

这里有解释:https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-auto-scaling-group.html

【讨论】:

【参考方案4】:

管理用于启动的 AMI 的选项不止一种;从完整的 AMI 到启动时配置的基本操作系统 AMI。各有优缺点。

在管理完整的 AMI 多年后,我们正在转向 AMI 构建管道方法 - 实例在首次启动时自行配置 - 将以更“持续集成”的方式管理 AMI 配置。

所以要回答您的问题,是的您可以使用预烘焙的 AMI 在您的自动扩展组中使用。但是这种方法限制了灵活性,并且可能会导致维护问题,尤其是在运行多个帐户和/或环境时。

来自AWS AMI Design:

AMI 设计选项属于部署简单性的范围 与部署灵活性有关。最简单的 AMI 完全出炉 并且专门用于部署完整的运行实例,包括 安装和配置所有必需的软件。然而,这 方法限制了灵活性,因为完全烘焙的 AMI 只能用于 部署单个实例或一组相同实例。最多 灵活的 AMI 之前仅包含最少的配置和软件 然后在首次启动时动态安装所需的软件包。这 方法以简单性换取灵活性,因为每个实例都必须是 正确引导,然后才能按预期运行。

正确的方法将考虑您的技能组合、AWS 经验和 DevOps 基础设施。

【讨论】:

以上是关于AWS 自动扩展组 AMI的主要内容,如果未能解决你的问题,请参考以下文章

在 Terraform 中为价格配置 AWS 自动扩展组?

如何自动扩展 AWS 目标组?

AWS 实例调度程序和自动扩展组

带有预留实例的 AWS Auto Scaling

有啥方法可以编辑用于 AWS 中自动缩放的 AMI?

使用 boto3 在 aws 中其 CPU 扩展策略低于特定阈值的所有自动扩展组的列表