Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

通过启动模板启动实例

您可以创建一个启动模板,其中包含用于启动实例的配置信息。您可以在启动模板中存储启动参数,而无需在每次启动实例时都指定这些参数。例如,启动模板可能包含您通常用于启动实例的 AMI ID、实例类型和网络设置。在使用 Amazon EC2 控制台、AWS SDK 或命令行工具启动实例时,您可以指定要使用的启动模板。

对于每个启动模板,您可以创建一个或多个编号的启动模板版本。每个版本可能具有不同的启动参数。在通过启动模板启动实例时,您可以使用任何版本的启动模板。如果未指定版本,则使用默认版本。您可以将任何启动模板版本设置为默认版本,默认情况下,这是启动模板的第一个版本。

下图显示了具有三个版本的启动模板。第一个版本指定用于启动实例的实例类型、AMI ID、子网和密钥对。第二个版本基于第一个版本,并且还为实例指定了一个安全组。第三个版本在某些参数中使用不同的值。版本 2 设置为默认版本。如果通过该启动模板启动实例,并且未指定任何其他版本,则使用版本 2 中的启动参数。

 启动模板

启动模板限制

以下规则适用于启动模板和启动模板版本:

  • 您最多可以为每个区域创建 1,000 个启动模板,并且每个启动模板最多具有 10,000 个版本。

  • 启动参数是可选的。不过,您必须确保启动实例的请求包含所需的所有参数。例如,如果启动模板不包含 AMI ID,您必须在启动实例时指定启动模板和 AMI ID。

  • 在创建启动模板时,不会验证启动模板参数。确保您为参数指定正确的值,并使用支持的参数组合。例如,要在置放群组中启动实例,您必须指定一种支持的实例类型。

  • 您可以标记启动模板,但无法标记启动模板版本。

  • 启动模板版本是按创建顺序编号的。在创建启动模板版本时,您无法自行指定版本号。

使用启动模板控制启动参数

启动模板可以包含用于启动实例的全部或部分参数。在使用启动模板启动实例时,您可以覆盖在启动模板中指定的参数,也可以指定在启动模板中不包含的额外参数。

注意

您无法在启动期间删除启动模板参数 (例如,无法为参数指定空值)。要删除某个参数,请创建不包含该参数的新启动模板版本,并使用该版本启动实例。

要启动实例,IAM 用户必须有权使用 ec2:RunInstances 操作,并且他们必须有权创建或使用与该实例关联的资源。您可以使用 ec2:RunInstances 操作的资源级权限控制用户可以指定的启动参数,或者您可以为用户授予使用启动模板启动实例的权限。这样,您就可以在启动模板中管理启动参数,而不是在 IAM 策略中管理,并将启动模板作为授权方法以启动实例。例如,您可以指定用户只能使用启动模板启动实例,并且他们只能使用特定的启动模板。您还可以控制用户可以在启动模板中覆盖的启动参数。有关示例策略,请参阅 启动模板

控制如何使用启动模板

默认情况下,IAM 用户无权使用启动模板。您可以创建一个 IAM 用户策略,以便为用户授予创建、修改、描述和删除启动模板和启动模板版本的权限。您还可以将资源级权限应用于某些启动模板操作,以控制用户能否在这些操作中使用特定的资源。有关更多信息,请参阅Amazon EC2 API 操作支持的资源级权限以及以下示例策略:13. 使用启动模板

在为用户授予使用 ec2:CreateLaunchTemplateec2:CreateLaunchTemplateVersion 操作的权限时,应格外小心。这些操作不支持资源级权限,您无法控制用户可以在启动模板中指定哪些资源。要限制用于启动实例的资源,请确保仅为相应的管理员授予创建启动模板和启动模板版本的权限。

创建启动模板

您可以使用定义的参数创建新的启动模板,也可以将现有的实例作为基础以创建新的启动模板。

使用控制台创建新启动模板

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择创建启动模板。提供启动模板的名称和描述。

  4. 对于启动模板内容,请提供以下信息。

    • AMI ID:指定从中启动实例的 AMI ID。您可以使用自己的 AMI,也可以查找合适的 AMI

    • 实例类型:选择实例类型。确保实例类型与指定的 AMI 兼容。有关更多信息,请参阅 实例类型

    • 密钥对名称:指定实例的密钥对。有关更多信息,请参阅 Amazon EC2 密钥对

    • 网络类型:如果适用,请选择是将实例启动到 EC2-Classic 还是 VPC。如果您的账户仅支持 EC2-VPC,则该选项不可用。如果选择 EC2-Classic,请确保在 EC2 Classic 中支持指定的实例类型,并为实例指定可用区。如果选择 EC2-VPC,请在网络接口部分中指定子网。

  5. 对于网络接口,您可以为实例最多指定两个网络接口

    • 设备:为网络接口指定设备号;例如,eth0 表示主网络接口。如果将该字段保留空白,AWS 将创建主网络接口。

    • 网络接口:指定网络接口的 ID,或者保留空白以让 AWS 创建新的网络接口。

    • 描述:可以选择为新的网络接口输入描述。

    • 子网:指定在其中创建新的网络接口的子网。对于主网络接口 (eth0),这是在其中启动实例的子网。如果为 eth0 指定现有的网络接口,将在该网络接口所在的子网中启动实例。

    • 自动分配公有 IP:指定是否自动为设备索引为 eth0 的网络接口分配公有 IP 地址。只能为单个新网络接口启用该设置。

    • 主 IP:输入您的子网范围内的私有 IPv4 地址,或者保留空白以让 AWS 选择一个私有 IPv4 地址。

    • 辅助 IP:输入您的子网范围内的辅助私有 IPv4 地址,或者保留空白以让 AWS 选择一个辅助私有 IPv4 地址。

    • (仅限 IPv6) IPv6 IP:输入子网范围内的 IPv6 地址。

    • 安全组 ID:输入您的 VPC 中与网络接口关联的安全组的 ID。

    • 终止时删除:选择在删除实例时是否删除网络接口。

  6. 对于存储 (卷),除了 AMI 指定的卷以外,还可以指定要附加到实例的卷。

    • 卷类型:指定与实例关联的实例存储或 Amazon EBS 卷。卷类型取决于您选择的实例类型。有关更多信息,请参阅 Amazon EC2 实例存储Amazon EBS 卷

    • 设备名称:指定卷的设备名称。

    • 快照:输入用于创建卷的快照的 ID。

    • 大小:对于 Amazon EBS 支持的卷,请指定存储大小。

    • 卷类型:对于 Amazon EBS 卷,请指定卷类型。有关更多信息,请参阅 Amazon EBS 卷类型

    • IOPS:如果选择了预配置 IOPS SSD 卷类型,则可以输入卷支持的每秒 I/O 操作数。

    • 终止时删除:对于 Amazon EBS 卷,请选中该复选框以在终止实例时删除卷。有关更多信息,请参阅 在实例终止时保留 Amazon EBS 卷

    • 加密:选择以对新的 Amazon EBS 卷加密。从加密快照还原的 Amazon EBS 卷会自动加密。加密卷只能附加到支持的实例类型

    • 密钥:如果您选择对新的 Amazon EBS 卷加密,则输入在对卷加密时要使用的主密钥。您可以输入自己账户的默认主密钥,也可以输入此前使用 AWS Key Management Service 创建的任何客户主密钥 (CMK)。您可以粘贴您可以访问的任何密钥的完整 ARN。有关更多信息,请参阅 AWS Key Management Service Developer Guide

  7. 对于标签,请提供键和值组合以指定标签。您可以标记实例、卷或两者。

  8. 对于安全组,请指定一个或多个要与实例关联的安全组。有关更多信息,请参阅 Linux 实例的 Amazon EC2 个安全组

  9. 对于高级详细信息,请展开该部分以查看字段并为实例指定任何其他参数。

    • IAM 实例配置文件:指定要与实例关联的 AWS Identity and Access Management (IAM) 实例配置文件。有关更多信息,请参阅 适用于 Amazon EC2 的 IAM 角色

    • Shutdown behavior (关闭行为):选择关闭时实例应该停止还是终止。有关更多信息,请参阅 更改实例的启动关闭操作

    • 终止保护:选择是否禁止意外终止。有关更多信息,请参阅 为实例启用终止保护

    • 监控:选择是否使用 Amazon CloudWatch 启用实例详细监控。将收取额外费用。有关更多信息,请参阅 使用 CloudWatch 监控您的实例

    • 置放群组名称:指定在其中启动实例的置放群组。并非可以在置放群组中启动所有实例类型。有关更多信息,请参阅 置放群组

    • EBS 优化实例:为 Amazon EBS I/O 提供额外的专用容量。并非所有实例类型都支持该功能,并产生额外的费用。有关更多信息,请参阅 Amazon EBS 优化实例

    • 租期:指定是在隔离的专用硬件 (专用) 上运行您的实例,还是在专用主机 (专用主机) 上运行您的实例。可能收取额外费用。有关更多信息,请参阅 专用实例专用主机。如果指定专用主机,您可以为实例选择特定的主机和关联。

    • RAM 磁盘 ID:实例的 RAM 磁盘。如果您选择了一个内核,则您可能需要选择带有可支持该内核的驱动程序的某个特定 RAM 磁盘。仅对半虚拟化 (PV) AMIs 有效。

    • 内核 ID:实例的内核。仅对半虚拟化 (PV) AMIs 有效。

    • User data:您可以指定用户数据在启动时配置实例或运行配置脚本。有关更多信息,请参阅启动时在 Linux 实例上运行命令

  10. 选择创建启动模板

使用控制台从现有启动模板创建启动模板

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择创建启动模板。提供启动模板的名称和描述。

  4. 对于源模板,请选择新启动模板所基于的启动模板。

  5. 对于源模板版本,请选择新启动模板版本所基于的启动模板版本。

  6. 根据需要,调整任何启动参数,然后选择创建启动模板

使用命令行创建启动模板

  • 调用 create-launch-template (AWS CLI) 命令。以下示例创建一个启动模板,它指定要启动的实例类型 (r4.4xlarge) 和 AMI (ami-8c1be5f6),指定总共 8 个 vCPU 的核心数 (4) 和每个核心的线程数 (2)(4 个内核 x 2 个线程),指定要在其中启动实例的子网 (subnet-7b16de0c),向实例分配一个公共 IP 地址和一个 IPv6 地址,并为实例分配一个标签 (Name=webserver)。

    aws ec2 create-launch-template --launch-template-name TemplateForWebServer --version-description WebVersion1 --launch-template-data file://template-data.json

    下面是一个 template-data.json 示例文件。

    { "NetworkInterfaces": [{ "AssociatePublicIpAddress": true, "DeviceIndex": 0, "Ipv6AddressCount": 1, "SubnetId": "subnet-7b16de0c" }], "ImageId": "ami-8c1be5f6", "InstanceType": "r4.4xlarge", "TagSpecifications": [{ "ResourceType": "instance", "Tags": [{ "Key":"Name", "Value":"webserver" }] }], "CpuOptions": { "CoreCount":4, "ThreadsPerCore":2 } }

    下面是示例输出。

    { "LaunchTemplate": { "LatestVersionNumber": 1, "LaunchTemplateId": "lt-01238c059e3466abc", "LaunchTemplateName": "TemplateForWebServer", "DefaultVersionNumber": 1, "CreatedBy": "arn:aws:iam::123456789012:root", "CreateTime": "2017-11-27T09:13:24.000Z" } }

使用命令行获取启动模板的实例数据

  • 使用 get-launch-template-data (AWS CLI) 命令并指定实例 ID。您可以将输出作为基础以创建新的启动模板或启动模板版本。默认情况下,输出包含一个顶级 LaunchTemplateData 对象,无法在启动模板数据中指定该对象。请使用 --query 选项排除该对象。

    aws ec2 get-launch-template-data --instance-id i-0123d646e8048babc --query "LaunchTemplateData"

    下面是示例输出。

    { "Monitoring": {}, "ImageId": "ami-8c1be5f6", "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "DeleteOnTermination": true } } ], "EbsOptimized": false, "Placement": { "Tenancy": "default", "GroupName": "", "AvailabilityZone": "us-east-1a" }, "InstanceType": "t2.micro", "NetworkInterfaces": [ { "Description": "", "NetworkInterfaceId": "eni-35306abc", "PrivateIpAddresses": [ { "Primary": true, "PrivateIpAddress": "10.0.0.72" } ], "SubnetId": "subnet-7b16de0c", "Groups": [ "sg-7c227019" ], "Ipv6Addresses": [ { "Ipv6Address": "2001:db8:1234:1a00::123" } ], "PrivateIpAddress": "10.0.0.72" } ] }

    您可以将输出直接写入到一个文件中,例如:

    aws ec2 get-launch-template-data --instance-id i-0123d646e8048babc --query "LaunchTemplateData" >> instance-data.json

管理启动模板版本

您可以为特定启动模板创建启动模板版本,设置默认版本以及删除不再需要的版本。

创建启动模板版本

在创建启动模板版本时,您可以指定新的启动参数,或者将现有版本作为基础以创建新的版本。有关启动参数的更多信息,请参阅创建启动模板

使用控制台创建启动模板版本

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择创建启动模板

  4. 对于您要做什么,选择创建新模板版本

  5. 对于启动模板名称,从列表中选择现有启动模板的名称。

  6. 对于模板版本说明,键入启动模板版本的说明。

  7. (可选)选择启动模板的版本或其他启动模板的版本,以用作新启动模板版本的基础。新启动模板版本从此启动模板版本继承启动参数。

  8. 根据需要修改启动参数,然后选择创建启动模板

使用命令行创建启动模板版本

  • 使用 create-launch-template-version (AWS CLI) 命令。您可以指定新版本所基于的源版本。新版本从此版本继承启动参数,您可以使用 --launch-template-data 覆盖参数。以下示例根据启动模板的版本 1 创建新的版本并指定不同的 AMI ID。

    aws ec2 create-launch-template-version --launch-template-id lt-0abcd290751193123 --version-description WebVersion2 --source-version 1 --launch-template-data "ImageId=ami-c998b6b2"

设置默认启动模板版本

您可以设置启动模板的默认版本。如果通过启动模板启动实例并且未指定版本,将使用默认版本的参数启动实例。

使用控制台设置默认启动模板版本

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择启动模板,然后依次选择操作设置默认版本

  4. 对于默认版本,请选择版本号,然后选择设置为默认版本

使用命令行设置默认启动模板版本

  • 使用 modify-launch-template (AWS CLI) 命令,并指定要设置为默认版本的版本。

    aws ec2 modify-launch-template --launch-template-id lt-0abcd290751193123 --default-version 2

删除启动模板版本

如果不再需要某个启动模板版本,您可以将其删除。在删除该版本后,无法替换版本号。您无法删除启动模板的默认版本;您必须先分配一个不同的版本以作为默认版本。

使用控制台删除启动模板版本

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择启动模板,然后依次选择操作删除模板版本

  4. 选择要删除的版本,然后选择删除启动模板版本

使用命令行删除启动模板版本

  • 使用 delete-launch-template-versions (AWS CLI) 命令并指定要删除的版本号。

    aws ec2 delete-launch-template-versions --launch-template-id lt-0abcd290751193123 --versions 1

通过启动模板启动实例

您可以使用启动模板中包含的参数启动实例。在启动实例之前,您可以选择覆盖或添加启动参数。

将自动为使用启动模板启动的实例分配两个具有 aws:ec2launchtemplate:idaws:ec2launchtemplate:version 键的标签。您无法删除或编辑这些标签。

使用控制台通过启动模板启动实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择启动模板,然后依次选择操作从模板启动实例

  4. 选择要使用的启动模板版本。

  5. (可选) 您可以在实例详细信息部分中更改和添加参数以覆盖或添加启动模板参数。

  6. 选择通过模板启动实例

使用命令行通过启动模板启动实例

  • 使用 run-instances AWS CLI 命令并指定 --launch-template 参数。可以选择指定要使用的启动模板版本。如果未指定版本,则使用默认版本。

    aws ec2 run-instances --launch-template LaunchTemplateId=lt-0abcd290751193123,Version=1
  • 要覆盖启动模板参数,请在 run-instances 命令中指定该参数。以下示例覆盖在启动模板 (如果有) 中指定的实例类型。

    aws ec2 run-instances --launch-template LaunchTemplateId=lt-0abcd290751193123 --instance-type t2.small
  • 如果指定复杂结构包含的嵌套参数,则使用启动模板中指定的复杂结构以及您指定的任何其他嵌套参数启动实例。

    在以下示例中,将使用标签 Owner=TeamA 以及在启动模板中指定的任何其他标签启动实例。如果启动模板包含具有 Owner 键的现有标签,该值将替换为 TeamA

    aws ec2 run-instances --launch-template LaunchTemplateId=lt-0abcd290751193123 --tag-specifications "ResourceType=instance,Tags=[{Key=Owner,Value=TeamA}]"

    在以下示例中,将使用具有设备名称 /dev/xvdb 的卷以及在启动模板中指定的任何其他块储存设备映射启动实例。如果启动模板为 /dev/xvdb 定义了一个现有的卷,它的值将替换为指定的值。

    aws ec2 run-instances --launch-template LaunchTemplateId=lt-0abcd290751193123 --block-device-mappings "DeviceName=/dev/xvdb,Ebs={VolumeSize=20,VolumeType=gp2}"

如果实例无法启动或状态立即转至 terminated 而非 running,请参阅 排查实例启动问题

将启动模板与 Amazon EC2 Auto Scaling 一起使用

您可以创建一个 Auto Scaling 组,并指定一个用于该组的启动模板。在 Amazon EC2 Auto Scaling 启动 Auto Scaling 组中的实例时,它使用关联的启动模板中定义的启动参数。

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的使用启动模板创建 Auto Scaling 组

使用命令行通过启动模板创建或更新 Amazon EC2 Auto Scaling 组

将启动模板与 EC2 队列一起使用

您可以创建一个 EC2 队列请求,并在实例配置中指定一个启动模板。在 Amazon EC2 完成 EC2 队列请求时,它使用关联的启动模板中定义的启动参数。您可以覆盖启动模板中指定的某些参数。

有关更多信息,请参阅 创建 EC2 队列

通过命令行使用启动模板创建 EC2 队列

  • 使用 create-fleet AWS CLI 命令。请使用 --launch-template-configs 参数指定启动模板,并为启动模板指定任何覆盖值。

将启动模板与 Spot 队列一起使用

您可以创建一个 Spot 队列请求,并在实例配置中指定一个启动模板。在 Amazon EC2 完成 Spot 队列请求时,它使用关联的启动模板中定义的启动参数。您可以覆盖启动模板中指定的某些参数。

有关更多信息,请参阅 Spot 队列请求

使用命令行通过启动模板创建 Spot 队列请求

  • 使用 request-spot-fleet AWS CLI 命令。请使用 LaunchTemplateConfigs 参数指定启动模板,并为启动模板指定任何覆盖值。

删除启动模板

如果不再需要某个启动模板,您可以将其删除。如果删除启动模板,则会删除该模板的所有版本。

删除启动模板

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Launch Templates

  3. 选择启动模板,然后依次选择操作删除模板

  4. 选择删除启动模板

使用命令行删除启动模板

  • 使用 delete-launch-template (AWS CLI) 命令并指定启动模板。

    aws ec2 delete-launch-template --launch-template-id lt-01238c059e3466abc