在启动模板中使用 Amazon Systems Manager 参数代替 AMI ID - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在启动模板中使用 Amazon Systems Manager 参数代替 AMI ID

Amazon EC2 Auto Scaling 支持在启动模板中使用引用了亚马逊云机器镜像(AMI)ID 的 Amazon Systems Manager 参数。借助 Systems Manager 参数,您可以更新您的自动扩缩组以使用新的 AMI ID,而无需在每次 AMI ID 更改时创建新的启动模板或启动模板的新版本。这些 ID 可能会定期更改,例如当 AMI 使用最新的操作系统或软件更新进行更新时。

您可以使用 Parameter Store(一项 Amazon Systems Manager 功能)创建、更新或删除 Systems Manager 参数。必须先创建 Systems Manager 参数,然后才能在启动模板中使用该参数。首先,您可以创建数据类型为 aws:ec2:image 的参数,并输入 AMI ID 作为其值。AMI ID 的格式为 ami-<identifier>,例如,ami-123example456。AMI ID 是否正确取决于您在其中启动自动扩缩组的实例类型和 Amazon Web Services 区域。

重要

要在启动模板中指定 Systems Manager 参数,您必须有权使用 ssm:GetParameters 操作。您还需要权限才能使用 ssm:GetParameters 操作来利用指定 Systems Manager 参数的启动模板。此举允许验证参数值。例如 IAM policy,请参阅《Amazon Systems Manager 用户指南》中的使用 IAM policy 限制对 Systems Manager 参数的访问

有关更多信息,请参阅以下资源:

Console
使用 Amazon Systems Manager 参数创建启动模板
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择启动模板,然后选择创建启动模板

  3. 对于设备模板名称,请为您的启动模板输入描述性名称。

  4. Application and OS Images (Amazon Machine Image) [应用程序和操作系统镜像(Amazon 机器映像)] 下,选择 Browse more AMIs(浏览其他 AMI)。

  5. 选择搜索栏右侧的箭头按钮,然后选择指定自定义值/Systems Manager 参数

  6. 指定自定义值或 Systems Manager 参数对话框中,执行以下操作:

    1. 对于 AMI ID 或 Systems Manager 参数字符串,使用以下格式之一输入 Systems Manager 参数名称:

      • resolve:ssm:parameter-name

      • resolve:ssm:parameter-name:version-number

      • resolve:ssm:parameter-name:label

      • resolve:ssm:public-parameter

    2. 选择 Save(保存)。

  7. 根据需要指定任何其他启动模板参数,然后选择创建启动模板

有关从控制台创建启动模板的更多信息,请参阅 为 Auto Scaling 组创建启动模板

Amazon CLI
指定客户自有参数的示例启动模板。
  1. 使用以下语法:resolve:ssm:parameter-name,其中 resolve:ssm 是标准前缀,parameter-name 是 Systems Manager 参数名称。

    以下示例可创建一个从名为 golden-ami 的现有 Systems Manager 参数获取 AMI ID 的启动模板。

    aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling \ --launch-template-data file://config.json

    config.json 的内容:

    { "ImageId":"resolve:ssm:golden-ami", "InstanceType":"t2.micro" }

    如果未指定,则参数的默认版本为最新版本。

    以下示例引用 golden-ami 参数的特定版本。该示例使用 golden-ami 参数的版本 3,但您可以使用任何有效的版本号。

    { "ImageId":"resolve:ssm:golden-ami:3", "InstanceType":"t2.micro" }

    以下类似示例引用了映射到 golden-ami 参数特定版本的参数标签 prod

    { "ImageId":"resolve:ssm:golden-ami:prod", "InstanceType":"t2.micro" }

    下面是示例输出。

    { "LaunchTemplate": { "LaunchTemplateId": "lt-068f72b724example", "LaunchTemplateName": "my-template-for-auto-scaling", "CreateTime": "2022-12-27T17:11:21.000Z", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }
  2. 要确认启动模板获得的 AMI ID 是否为首选,请使用 describe-launch-template-versions 命令。该命令使用 --resolve-alias 选项将参数解析为实际的 AMI ID。

    aws ec2 describe-launch-template-versions --launch-template-name my-template-for-auto-scaling \ --versions $Default --resolve-alias

    该示例返回 ImageId 的 AMI ID。使用此启动模板启动实例时,AMI ID 解析为 ami-04d5cc9b88example

    { "LaunchTemplateVersions": [ { "LaunchTemplateId": "lt-068f72b724example", "LaunchTemplateName": "my-template-for-auto-scaling", "VersionNumber": 1, "CreateTime": "2022-12-27T17:11:21.000Z", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersion": true, "LaunchTemplateData": { "ImageId": "ami-04d5cc9b88example", "InstanceType": "t2.micro" } } ] }
指定 Amazon 自有的公有参数示例启动模板
  1. 请使用以下语法:resolve:ssm:public-parameter,其中 resolve:ssm 是标准前缀,public-parameter 是公有参数的路径和名称。

    在此示例中,启动模板使用 Amazon 提供的公有参数,使用在 Amazon Web Services 区域 中为您的配置文件配置的最新 Amazon Linux 2 AMI 启动实例。

    aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \ --launch-template-data file://config.json

    config.json 的内容:

    { "ImageId":"resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2", "InstanceType":"t2.micro" }

    以下为响应示例。

    { "LaunchTemplate": { "LaunchTemplateId": "lt-089c023a30example", "LaunchTemplateName": "my-template-for-auto-scaling", "CreateTime": "2022-12-28T19:52:27.000Z", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }
  2. 要确认启动模板获得的 AMI ID 是否正确,请使用 describe-launch-template-versions 命令。该命令使用 --resolve-alias 选项将参数解析为实际的 AMI ID。

    aws ec2 describe-launch-template-versions --launch-template-name my-template-for-auto-scaling \ --versions $Default --resolve-alias

    该示例返回 ImageId 的 AMI ID。使用此启动模板启动实例时,AMI ID 解析为 ami-0ac394d6a3example

    { "LaunchTemplateVersions": [ { "LaunchTemplateId": "lt-089c023a30example", "LaunchTemplateName": "my-template-for-auto-scaling", "VersionNumber": 1, "CreateTime": "2022-12-28T19:52:27.000Z", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersion": true, "LaunchTemplateData": { "ImageId": "ami-0ac394d6a3example", "InstanceType": "t2.micro", } } ] }

限制

  • 目前,您不能在具有混合实例策略的自动扩缩组上使用指定 Systems Manager 参数而不是 AMI ID 的启动模板。

  • 您创建的 Systems Manager Parameter Store 参数必须存在于运行实例的同一账户中。

  • Amazon EC2 Auto Scaling 仅支持将 AMI ID 指定为参数。

  • 虽然您的自动扩缩组的启动模板引用了参数而不是 AMI ID,但您无法启动指定所需配置的实例刷新,也无法使用跳过匹配来替换组中的实例。

  • 每次调用创建或更新自动扩缩组时,Amazon EC2 Auto Scaling 都会解析启动模板中的 Systems Manager 参数。如果您使用的是高级参数或更高的吞吐量限制,则频繁调用 Parameter Store(即 GetParameters 操作)可能会增加 Systems Manager 的成本,因为每次 Parameter Store API 交互都会产生费用。有关更多信息,请参阅 Amazon Systems Manager 定价