AWS 如何让 ASG 始终使用最新的 AMI?

Posted

技术标签:

【中文标题】AWS 如何让 ASG 始终使用最新的 AMI?【英文标题】:AWS how to make ASG always use the latest AMI? 【发布时间】:2020-02-27 21:44:44 【问题描述】:

因此,我们正在尝试频繁构建映像并将它们更新到我们的启动配置,并且我们希望我们的启动配置始终使用最新的 AMI(亚马逊机器映像)。

当然,我们希望这一切都以自动化的方式发生。

我们正在尝试找出如何最好地实现自动化,以便 ASG(Auto Sacking Group)使用最新的 AMI。

这里的一种有效方法是让 Lambda 将最新的 AMI 应用于启动配置。

有没有一种方法可以让我们的启动配置自动知道使用最新的 AMI,launch templates 会让这成为可能吗?

如果可能,我们不想使用 lambda。

如果launch templates 使这成为可能。如果 AMI 出现故障,有什么建议可以回滚到以前的版本。

【问题讨论】:

【参考方案1】:

launch templateslaunch configurations 都是不可变的。一旦创建它们,就无法更改它们,因此答案是否定的,您不能在任何这些中引用 variable AMI 参数,这意味着您需要构建新的启动配置/模板使用您选择的新(最新)版本的 AMI。

有一些方法可以从 SSM 中提取这些信息,例如,在 CF 模板中引用它而不需要 Lambda 函数。

Parameters:
  LatestAmiId:
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'

Resources:
 Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: !Ref LatestAmiId

但这仅在您构建堆栈时才会生效。堆栈运行后,您将被困在启动期间的最新版本。

【讨论】:

【参考方案2】:

我们打算评估的一种方法是从构建管道中获取 AMI ID,并将其注入拥有自己管道的部署存储库中。

我们已经使用构建 ID 标记提交,所以......理论上......也许......这对我们有用。

【讨论】:

以上是关于AWS 如何让 ASG 始终使用最新的 AMI?的主要内容,如果未能解决你的问题,请参考以下文章

我不明白如何让领域服务器在 AWS AMI 上运行

在 AWS AMI Linux 服务器上设置 Supervisord [关闭]

AWS 自动扩展组 AMI

Terraform - 具有混合实例策略的 ASG

AWS:如何使用 Boto3 从实例创建公共 AMI?

如何将变量传递/连接到`aws_instance`资源中的`data.aws_ami`部分