

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

# 使用创建和管理启动模板的示例 AWS CLI
<a name="examples-launch-templates-aws-cli"></a>

您可以通过 AWS 管理控制台、 AWS Command Line Interface (AWS CLI) 或 SDK 创建和管理启动模板。本节向您展示了从中创建和管理 Amazon EC2 Auto Scaling 启动模板的示例 AWS CLI。

**Topics**
+ [示例用法](#example-usage)
+ [创建基本的启动模板](#example-simple-launch-template)
+ [指定在启动时标记实例的标签](#example-tag-instances)
+ [指定要传递到实例的 IAM 角色](#example-iam-profile)
+ [分配公有 IP 地址](#example-primary-network-interface)
+ [指定用于在启动时配置实例的用户数据脚本](#example-user-data)
+ [指定块储存设备映射](#example-block-device-mapping)
+ [指定专属主机以从外部供应商获得软件许可证](#example-dedicated-hosts)
+ [指定现有网络接口](#example-existing-eni-launch-template)
+ [创建多个网络接口](#example-multiple-efa-enabled-network-interfaces)
+ [管理启动模板](#launch-templates-additional-cli-commands)
+ [更新 Auto Scaling 组以使用启动模板](#update-asg-launch-template-cli)

## 示例用法
<a name="example-usage"></a>

```
{
    "LaunchTemplateName": "my-template-for-auto-scaling",
    "VersionDescription": "test description",
    "LaunchTemplateData": {
        "ImageId": "ami-04d5cc9b88example",
        "InstanceType": "t2.micro",
        "SecurityGroupIds": [
            "sg-903004f88example"
        ], 
        "KeyName": "MyKeyPair",
        "Monitoring": {
            "Enabled": true
        },
        "Placement": {
            "Tenancy": "dedicated"
        },
        "CreditSpecification": {
            "CpuCredits": "unlimited"
        },
        "MetadataOptions": {
            "HttpTokens": "required",
            "HttpPutResponseHopLimit": 1,
            "HttpEndpoint": "enabled"
        }
    }
}
```

## 创建基本的启动模板
<a name="example-simple-launch-template"></a>

要创建基本的启动模板，请按以下方式使用[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)命令，并进行以下修改：
+ 将 `ami-04d5cc9b88example` 替换为要从其中启动实例的 AMI 的 ID。
+ 将 `t2.micro` 替换为与指定的 AMI 兼容的实例类型。

此示例创建了一个名为的启动模板*my-template-for-auto-scaling*。如果在默认 VPC 中启动由此启动模板创建的实例，则默认情况下它们会收到一个公有 IP 地址。如果在非默认 VPC 中启动实例，则默认情况下它们不会收到一个公有 IP 地址。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

有关引用 JSON 格式参数的更多信息，请参阅 *AWS Command Line Interface 用户指南*中的[在 AWS CLI中将引号和字符串结合使用](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html)。

或者，您可以在配置文件中指定 JSON 格式参数。

以下示例创建了基本的启动模板，其中引用了启动模板参数值的配置文件。

```
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":"ami-04d5cc9b88example",
    "InstanceType":"t2.micro"
}
```

## 指定在启动时标记实例的标签
<a name="example-tag-instances"></a>

以下示例在启动时将标签（例如，`purpose=webserver`）添加到实例。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"TagSpecifications":[{"ResourceType":"instance","Tags":[{"Key":"purpose","Value":"webserver"}]}],"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

**注意**  
如果您在启动模板中指定了实例标签，然后选择将 Auto Scaling 组的标签传播到其实例，则所有标签都会合并。如果为启动模板中的标签和 Auto Scaling 组中的标签指定了相同的标签键，则优先使用该组中的标签值。

## 指定要传递到实例的 IAM 角色
<a name="example-iam-profile"></a>

以下示例指定启动时要传递给实例的与 IAM 角色关联的实例配置文件的名称。有关更多信息，请参阅 [在 Amazon EC2 实例上运行的应用程序的 IAM 角色](us-iam-role.md)。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
--launch-template-data '{"IamInstanceProfile":{"Name":"my-instance-profile"},"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

## 分配公有 IP 地址
<a name="example-primary-network-interface"></a>

以下[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)示例将启动模板配置为向在非默认 VPC 中启动的实例分配公有地址。

**注意**  
指定网络接口时，请为 `Groups` 指定值（对应于 Auto Scaling 组将实例启动到其中的 VPC 的安全组）。指定 VPC 子网作为 Auto Scaling 组的属性。



```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"NetworkInterfaces":[{"DeviceIndex":0,"AssociatePublicIpAddress":true,"Groups":["sg-903004f88example"],"DeleteOnTermination":true}],"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

## 指定用于在启动时配置实例的用户数据脚本
<a name="example-user-data"></a>

以下示例将用户数据脚本指定为 base64 编码的字符串，用于在启动时配置实例。该[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)命令需要使用 base64 编码的用户数据。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
--launch-template-data '{"UserData":"IyEvYmluL2Jhc...","ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

## 指定块储存设备映射
<a name="example-block-device-mapping"></a>

以下[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)示例创建了一个带有块储存设备映射的启动模板：一个 22 GB 的 EBS 卷映射到。`/dev/xvdcz``/dev/xvdcz` 卷使用通用型 SSD (gp2) 卷类型，在它连接的实例终止时会被删除。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"BlockDeviceMappings":[{"DeviceName":"/dev/xvdcz","Ebs":{"VolumeSize":22,"VolumeType":"gp2","DeleteOnTermination":true}}],"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

## 指定专属主机以从外部供应商获得软件许可证
<a name="example-dedicated-hosts"></a>

如果您指定*主机*租赁，您可以指定主机资源组和 License Manager 许可证配置，以便从外部供应商获得合格的软件许可证。然后，您可以使用以下[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)命令在 EC2 实例上使用许可证。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"Placement":{"Tenancy":"host","HostResourceGroupArn":"arn"},"LicenseSpecifications":[{"LicenseConfigurationArn":"arn"}],"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

## 指定现有网络接口
<a name="example-existing-eni-launch-template"></a>

以下[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)示例将主网络接口配置为使用现有网络接口。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"NetworkInterfaces":[{"DeviceIndex":0,"NetworkInterfaceId":"eni-b9a5ac93","DeleteOnTermination":false}],"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

## 创建多个网络接口
<a name="example-multiple-efa-enabled-network-interfaces"></a>

以下[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)示例添加了一个辅助网络接口。主网络接口的设备索引为 0，而辅助网络接口的设备索引为 1。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"NetworkInterfaces":[{"DeviceIndex":0,"Groups":["sg-903004f88example"],"DeleteOnTermination":true},{"DeviceIndex":1,"Groups":["sg-903004f88example"],"DeleteOnTermination":true}],"ImageId":"ami-04d5cc9b88example","InstanceType":"t2.micro"}'
```

如果您使用的实例类型支持多个网卡和弹性结构适配器 (EFAs)，则可以使用以下[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)命令向辅助网卡添加辅助接口并启用 EFA。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[将 EFA 添加到启动模板](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-efa.html#efa-launch-template)。

```
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
  --launch-template-data '{"NetworkInterfaces":[{"NetworkCardIndex":0,"DeviceIndex":0,"Groups":["sg-7c2270198example"],"InterfaceType":"efa","DeleteOnTermination":true},{"NetworkCardIndex":1,"DeviceIndex":1,"Groups":["sg-7c2270198example"],"InterfaceType":"efa","DeleteOnTermination":true}],"ImageId":"ami-09d95fab7fexample","InstanceType":"p4d.24xlarge"}'
```

**警告**  
p4d.24xlarge 实例类型产生的成本高于本节中的其他示例。有关 P4d 实例定价的更多信息，请参阅 [Amazon EC2 P4d 实例定价](https://aws.amazon.com/ec2/instance-types/p4/)。

**注意**  
将来自同一子网的多个网络接口附加到一个实例可能会引入非对称路由，尤其是在使用非 Amazon Linux 变体的实例上。如果需要此类配置，则必须在操作系统中配置辅助网络接口。有关示例，请参阅[如何使我的辅助网络接口在我的 Ubuntu EC2 实例中运行？](https://repost.aws/knowledge-center/ec2-ubuntu-secondary-network-interface) 在 AWS 知识中心中。

## 管理启动模板
<a name="launch-templates-additional-cli-commands"></a>

 AWS CLI 包括其他几个可帮助您管理启动模板的命令。

**Topics**
+ [列出并描述启动模板](#describe-launch-template-aws-cli)
+ [创建启动模板版本](#example-create-launch-template-version)
+ [删除启动模板版本](#example-delete-launch-template-version)
+ [删除启动模板](#example-delete-launch-template)

### 列出并描述启动模板
<a name="describe-launch-template-aws-cli"></a>

您可以使用两个 AWS CLI 命令来获取有关启动模板的信息：[describe-launch-templates](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-launch-templates.html)和[describe-launch-template-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-launch-template-versions.html)。

该[describe-launch-templates](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-launch-templates.html)命令使您可以获取已创建的任何启动模板的列表。您可以使用选项筛选启动模板名称、创建时间、标签键或标记键值组合的结果。此命令可返回有关任何启动模板的汇总信息，包括启动模板标识符、最新版本和默认版本。

以下示例提供指定启动模板的汇总。

```
aws ec2 describe-launch-templates --launch-template-names my-template-for-auto-scaling
```

以下为响应示例。

```
{
    "LaunchTemplates": [
        {
            "LaunchTemplateId": "lt-068f72b729example",
            "LaunchTemplateName": "my-template-for-auto-scaling",
            "CreateTime": "2020-02-28T19:52:27.000Z",
            "CreatedBy": "arn:aws:iam::123456789012:user/Bob",
            "DefaultVersionNumber": 1,
            "LatestVersionNumber": 1
        }
    ]
}
```

如果您未使用 `--launch-template-names` 选项将输出限制为一个启动模板，则将返回所有启动模板的相关信息。

以下[describe-launch-template-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-launch-template-versions.html)命令提供描述指定启动模板版本的信息。

```
aws ec2 describe-launch-template-versions --launch-template-id lt-068f72b729example
```

以下为响应示例。

```
{
    "LaunchTemplateVersions": [
        {
            "VersionDescription": "version1",
            "LaunchTemplateId": "lt-068f72b729example",
            "LaunchTemplateName": "my-template-for-auto-scaling",
            "VersionNumber": 1,
            "CreatedBy": "arn:aws:iam::123456789012:user/Bob",
            "LaunchTemplateData": {
                "TagSpecifications": [
                    {
                        "ResourceType": "instance",
                        "Tags": [
                            {
                                "Key": "purpose",
                                "Value": "webserver"
                            }
                        ]
                    }
                ],
                "ImageId": "ami-04d5cc9b88example",
                "InstanceType": "t2.micro",
                "NetworkInterfaces": [
                    {
                        "DeviceIndex": 0,
                        "DeleteOnTermination": true,
                        "Groups": [
                            "sg-903004f88example"
                        ],
                        "AssociatePublicIpAddress": true
                    }
                ]
            },
            "DefaultVersion": true,
            "CreateTime": "2020-02-28T19:52:27.000Z"
        }
    ]
}
```

### 创建启动模板版本
<a name="example-create-launch-template-version"></a>

以下[create-launch-template-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template-version.html)命令基于启动模板的版本 1 创建新的启动模板版本并指定不同的 AMI ID。

```
aws ec2 create-launch-template-version --launch-template-id lt-068f72b729example --version-description version2 \
  --source-version 1 --launch-template-data "ImageId=ami-c998b6b2example"
```

要设置启动模板的默认版本，请使用[modify-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-launch-template.html)命令。

### 删除启动模板版本
<a name="example-delete-launch-template-version"></a>

以下[delete-launch-template-versions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/delete-launch-template-versions.html)命令删除指定的启动模板版本。

```
aws ec2 delete-launch-template-versions --launch-template-id lt-068f72b729example --versions 1
```

### 删除启动模板
<a name="example-delete-launch-template"></a>

如果您不再需要启动模板，则可以使用以下[delete-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/delete-launch-template.html)命令将其删除。如果删除启动模板，则会删除该模板的所有版本。

```
aws ec2 delete-launch-template --launch-template-id lt-068f72b729example
```

## 更新 Auto Scaling 组以使用启动模板
<a name="update-asg-launch-template-cli"></a>

您可以使用[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令将启动模板添加到现有 Auto Scaling 组中。

### 更新 Auto Scaling 组以使用最新版本的启动模板
<a name="example-update-asg-launch-template-latest-version"></a>

以下[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令更新指定的 Auto Scaling 组，使其使用指定启动模板的最新版本。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --launch-template LaunchTemplateId=lt-068f72b729example,Version='$Latest'
```

### 更新 Auto Scaling 组以使用特定版本的启动模板
<a name="example-update-asg-launch-template-specific-version"></a>

以下[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令更新指定的 Auto Scaling 组，使其使用指定启动模板的特定版本。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --launch-template LaunchTemplateName=my-template-for-auto-scaling,Version='2'
```