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 参数创建启动模板
-
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择启动模板,然后选择创建启动模板。
-
对于设备模板名称,请为您的启动模板输入描述性名称。
-
在 Application and OS Images (Amazon Machine Image) [应用程序和操作系统镜像(Amazon 机器映像)] 下,选择 Browse more AMIs(浏览其他 AMI)。
-
选择搜索栏右侧的箭头按钮,然后选择指定自定义值/Systems Manager 参数。
-
在指定自定义值或 Systems Manager 参数对话框中,执行以下操作:
-
对于 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
-
选择 Save(保存)。
-
根据需要指定任何其他启动模板参数,然后选择创建启动模板。
有关从控制台创建启动模板的更多信息,请参阅 为 Auto Scaling 组创建启动模板。
- Amazon CLI
-
指定客户自有参数的示例启动模板。
-
使用以下语法: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
}
}
-
要确认启动模板获得的 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 自有的公有参数示例启动模板
-
请使用以下语法: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
}
}
-
要确认启动模板获得的 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 定价。