使用 AWS CLI 创建和管理启动模板的示例 - Amazon EC2 Auto Scaling

使用 AWS CLI 创建和管理启动模板的示例

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

示例用法

{ "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" } } }

创建基本的启动模板

要创建基本的启动模板,请使用以下 create-launch-template 命令,并进行这些修改:

  • 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 中将引号和字符串结合使用

或者,您可以在配置文件中指定 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" }

指定在启动时标记实例的标签

以下示例在启动时将标签(例如,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 角色

以下示例指定启动时要传递给实例的与 IAM 角色关联的实例配置文件的名称。有关更多信息,请参阅 在 Amazon EC2 实例上运行的应用程序的 IAM 角色

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 地址

以下 create-launch-template 示例配置了启动模板,将公有地址分配给在非默认 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"}'

指定用于在启动时配置实例的用户数据脚本

以下示例将用户数据脚本指定为 base64 编码的字符串,用于在启动时配置实例。create-launch-template 命令需要 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"}'

指定块储存设备映射

以下 create-launch-template 示例创建了具有块设备映射的启动模板:映射到 /dev/xvdcz 的 22-gigabyte EBS 卷。/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"}'

指定专属主机以从外部供应商获得软件许可证

如果您指定主机租赁,您可以指定主机资源组和 License Manager 许可证配置,以便从外部供应商获得合格的软件许可证。然后,您可以通过使用以下 create-launch-template 命令来在 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"}'

指定现有网络接口

以下 create-launch-template 示例将主网络接口配置为使用现有网络接口。

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"}'

创建多个网络接口

以下 create-launch-template 示例添加了辅助网络接口。主网络接口的设备索引为 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"}'

如果您使用支持多个网卡和 Elastic Fabric Adapters (EFA) 的实例类型,则可以向辅助网卡添加辅助接口并使用以下 create-launch-template 命令来启用 EFA。有关更多信息,请参阅《Amazon EC2 用户指南》中的将 EFA 添加到启动模板

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 实例定价

注意

将来自同一子网的多个网络接口附加到一个实例可能会引入非对称路由,尤其是在使用非 Amazon Linux 变体的实例上。如果需要此类配置,则必须在操作系统中配置辅助网络接口。有关示例,请参阅 AWS 知识中心中的如何在我的 Ubuntu EC2 实例中使用我的辅助网络接口?

管理启动模板

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

列出并描述启动模板

您可以使用两个 AWS CLI 命令获取有关启动模板的信息:describe-launch-templatesdescribe-launch-template-versions

describe-launch-templates 命令可让您获取已创建的任何启动模板的列表。您可以使用选项筛选启动模板名称、创建时间、标签键或标记键值组合的结果。此命令可返回有关任何启动模板的汇总信息,包括启动模板标识符、最新版本和默认版本。

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

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 命令提供描述指定启动模板版本的信息。

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" } ] }

创建启动模板版本

以下 create-launch-template-version 命令将根据启动模板的版本 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 命令。

删除启动模板版本

以下 delete-launch-template-versions 命令将删除指定的启动模板版本。

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

删除启动模板

如果不再需要某个启动模板,则可以使用以下 delete-launch-template 命令进行删除。如果删除启动模板,则会删除该模板的所有版本。

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

更新 Auto Scaling 组以使用启动模板

您可以使用 update-auto-scaling-group 命令将启动模板添加到现有 Auto Scaling 组。

更新 Auto Scaling 组以使用最新版本的启动模板

以下 update-auto-scaling-group 命令会更新指定的 Auto Scaling 组以使用最新版本的指定启动模板。

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

更新 Auto Scaling 组以使用特定版本的启动模板

以下 update-auto-scaling-group 命令会更新指定的 Auto Scaling 组以使用特定版本的指定启动模板。

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