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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在启动模板中使用 Amazon Systems Manager 参数而不是 AMI ID

本节介绍如何创建启动模板,该模板指定引用亚马逊系统映像 (AMI) ID 的 Amazon Systems Manager 参数。您可以使用存储在您的同一个参数中的参数 Amazon Web Services 账户、从另一个 Amazon Web Services 账户共享的参数或由维护的公共 AMI 的公共参数 Amazon。

借助 Systems Manager 参数,您可以更新您的自动扩缩组以使用新的 AMI ID,而无需在每次 AMI ID 更改时创建新的启动模板或启动模板的新版本。这些 ID 可能会定期更改,例如当 AMI 使用最新的操作系统或软件更新进行更新时。

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

有关为 AMI ID 创建有效参数的更多信息,请参阅创建 Systems Manager 参数

创建为 AMI 指定参数的启动模板

要创建为 AMI 指定参数的启动模板,请使用以下方法之一:

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:public-parameter

      要引用存储在同一账户中的参数,请执行以下操作:

      • resolve:ssm:parameter-name

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

      • resolve:ssm:parameter-name:label

      要引用其他人共享的参数,请执行 Amazon Web Services 账户以下操作:

      • resolve:ssm:parameter-ARN

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

      • resolve:ssm:parameter-ARN:label

    2. 选择保存

  7. 根据需要配置任何其他启动模板设置,然后选择创建启动模板。有关更多信息,请参阅为 Auto Scaling 组创建启动模板

Amazon CLI

要创建指定 Systems Manager 参数的启动模板,可以使用以下示例命令之一。将每个用户输入占位符替换为您自己的信息。

示例:创建一个启动模板,该模板指定了 Amazon拥有的公共参数

请使用以下语法:resolve:ssm:public-parameter,其中 resolve:ssm 是标准前缀,public-parameter 是公有参数的路径和名称。

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

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 } }
示例:创建启动模板以指定存储在同一账户中的参数

使用以下语法: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 } }
示例:创建启动模板以指定与另一个共享的参数 Amazon Web Services 账户

使用以下语法:resolve:ssm:parameter-ARN,其中resolve:ssm是标准前缀,是 Systems Manager 参数parameter-ARN的 ARN。

以下示例创建了一个启动模板,该模板从现有 Systems Manager 参数中获取 AMI ID,ARN 为。arn:aws:ssm:us-east-2:123456789012:parameter/MyParameter

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:arn:aws:ssm:us-east-2:123456789012:parameter/MyParameter", "InstanceType":"t2.micro" }

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

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

{ "ImageId":"resolve:ssm:arn:aws:ssm:us-east-2:123456789012:parameter/MyParameter:3", "InstanceType":"t2.micro" }

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

{ "ImageId":"resolve:ssm:arn:aws:ssm:us-east-2:123456789012:parameter/MyParameter:prod", "InstanceType":"t2.micro" }

以下为响应示例。

{ "LaunchTemplate": { "LaunchTemplateId": "lt-00f93d4588example", "LaunchTemplateName": "my-template-for-auto-scaling", "CreateTime": "2024-01-08T12:43:21.000Z", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

要在启动模板中从 Parameter Store 中指定参数,您必须拥有指定参数的ssm:GetParameters权限。任何使用启动模板的人也需要ssm:GetParameters权限才能验证参数值。有关更多信息,请参阅Amazon Systems Manager 用户指南中的使用 IAM 策略限制对 Systems Manager 参数的访问

验证启动模板获得的 AMI ID 是否正确

使用describe-launch-template-versions命令并添加将参数解析为实际的 AMI ID 的--resolve-alias选项。

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 参数的更多详情,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的 “使用系统管理器参数代替 AMI ID”。

有关使用 Systems Manager 参数的更多信息,请参阅 Systems Manager 文档中的以下参考资料。

限制

使用 Systems Manager 参数时,请注意以下限制:

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

  • 目前不支持使用指定 Systems Manager 参数的启动模板创建或更新混合实例组

  • 如果您的 Auto Scaling 组使用的启动模板指定 Systems Manager 参数,则您将无法使用所需的配置或使用跳过匹配来启动实例刷新。

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