

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

# IDs 在启动模板中使用 AWS Systems Manager 参数而不是 AMI
<a name="using-systems-manager-parameters"></a>

本节向您演示如何创建启动模板，该模板指定引用亚马逊机器映像（AMI）ID 的 AWS Systems Manager 参数。您可以使用存储在您的同一个参数中的参数 AWS 账户、从另一个 AWS 账户共享的参数或由维护的公共 AMI 的公共参数 AWS。

使用 Systems Manager 参数，您可以更新 Auto Scaling 组以使用新的 AMI，而 IDs 无需在每次更改 AMI ID 时创建新的启动模板或新版本的启动模板。它们 IDs 可能会定期更改，例如在 AMI 使用最新操作系统或软件更新进行更新时。

您可以使用参数[存储器创建、更新或删除自己的 Systems Manager 参数，该功能](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)为 AWS Systems Manager。必须先创建 Systems Manager 参数，然后才能在启动模板中使用该参数。首先，您可以创建数据类型为 `aws:ec2:image` 的参数，并输入 AMI ID 作为其值。AMI ID 的格式为 `ami-{{<identifier>}}`，例如，`ami-123example456`。AMI ID 是否正确取决于您在其中启动自动扩缩组的实例类型和 AWS 区域 。

有关为 AMI ID 创建有效参数的更多信息，请参阅[创建 Systems Manager 参数](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-create.html)。

## 创建指定 AMI 参数的启动模板
<a name="using-systems-manager-parameters-create-launch-template"></a>

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

------
#### [ Console ]

**使用 AWS Systems Manager 参数创建启动模板**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**启动模板**，然后选择**创建启动模板**。

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

1. 在 “**应用程序和操作系统映像（Amazon 系统映像）**” 下，选择 “**浏览更多**” AMIs。

1. 选择搜索栏右侧的箭头按钮，然后选择 “**指定自定义 value/Systems Manager 参数**”。

1. 在**指定自定义值或 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}}**

      要引用其他 AWS 账户共享的参数，请执行以下操作：
      + **resolve:ssm:{{parameter-ARN}}**
      + **resolve:ssm:{{parameter-ARN}}:{{version-number}}**
      + **resolve:ssm:{{parameter-ARN}}:{{label}}**

   1. 选择**保存**。

1. 根据需要配置任何其他启动模板设置，然后选择**创建启动模板**。有关更多信息，请参阅 [为 Auto Scaling 组创建启动模板](create-launch-template.md)。

------
#### [ AWS CLI ]

要创建指定 Systems Manager 参数的启动模板，您可以使用以下示例命令之一。将每个 {{user input placeholder}} 替换为您自己的信息。

**示例：创建一个启动模板，该模板指定了 AWS拥有的公共参数**  
请使用以下语法：`resolve:ssm:{{public-parameter}}`，其中 `resolve:ssm` 是标准前缀，`{{public-parameter}}` 是公有参数的路径和名称。

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

```
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
    }
}
```

**示例：创建启动模板以指定与另一个共享的参数 AWS 账户**  
使用以下语法：`resolve:ssm:{{parameter-ARN}}`，其中 `resolve:ssm` 是标准前缀，而 `{{parameter-ARN}}` 是 Systems Manager 参数的 ARN。

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

```
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` 权限才能验证参数值。有关更多信息，请参阅《AWS Systems Manager 用户指南》中的[使用 IAM 策略限制对 Systems Manager 参数的访问](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-access.html)**。

## 验证启动模板是否获得正确的 AMI ID
<a name="using-systems-manager-parameters-verify-launch-template"></a>

使用[describe-launch-template-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-launch-template-versions.html)命令并添加将参数解析为实际的 AMI ID 的`--resolve-alias`选项。

```
aws ec2 describe-launch-template-versions --launch-template-name {{my-template-for-auto-scaling}} \
   --versions {{1}} --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",
            }
        }
    ]
}
```

## 相关资源
<a name="using-systems-manager-parameters-related-resources"></a>

有关在启动模板中指定 Systems Manager 参数的更多详细信息，请参阅《Amazon EC2 用户指南》**中的[使用 Systems Manager 参数而非 AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id)。

有关使用 Systems Manager 参数的更多信息，请参阅 Systems Manager 文档中的以下参考资料。
+ 要创建参数版本和标签，请参阅[使用参数版本](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-versions.html)和[使用参数标签](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-labels.html)。
+ 有关如何查找 Amazon EC2 支持的 AMI 公有参数的信息，请参阅 [Calling AMI public parameters](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters-ami.html)。
+ 有关与其他 AWS 账户或通过其他账户共享参数的信息 AWS Organizations，请参阅[使用共享参数](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-shared-parameters.html)。
+ 有关监控参数是否成功创建的信息，请参阅 [Amazon 系统映像的原生参数支持 IDs](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)。

## 限制
<a name="using-systems-manager-parameters-limitations"></a>

使用 Systems Manager 参数时，请注意以下限制：
+ Amazon EC2 Auto Scaling 仅支持将 AMI 指定 IDs 为参数。
+ 不支持使用指定 Systems Manager 参数的启动模板创建或更新具有[基于属性的实例类型选择](create-mixed-instances-group-attribute-based-instance-type-selection.md)的[混合实例组](ec2-auto-scaling-mixed-instances-groups.md)。
+ 如果您的自动扩缩组使用指定 Systems Manager 参数的启动模板，则您将无法使用所需的配置或使用跳过匹配开始实例刷新。
+ 如果自动扩缩组使用指定了 Systems Manager 参数的启动模板，则不支持暖池。
+ 每次调用创建或更新自动扩缩组时，Amazon EC2 Auto Scaling 都会解析启动模板中的 Systems Manager 参数。如果您使用的是高级参数或更高的吞吐量限制，则频繁调用 Parameter Store（即 `GetParameters` 操作）可能会增加 Systems Manager 的成本，因为每次 Parameter Store API 交互都会产生费用。有关更多信息，请参阅[AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/)。