创建 Amazon EC2 启动模板
您可以通过为实例配置参数指定自己的值,或者从现有启动模板或 Amazon EC2 实例中获取值来创建 Amazon EC2 启动模板。
您无需为启动模板中的每个参数指定值;只需指定一个实例配置参数即可创建启动模板。要指明您选择不指定的参数,请在使用控制台时选择不包括在启动模板中。使用命令行工具时,不包含参数表示您选择不在启动模板中指定这些参数。
如果想在启动模板中指定 AMI,您可以选择一个 AMI,也可以指定一个在实例启动时将指向 AMI 的 Systems Manager 参数。
使用启动模板启动实例时,将使用启动模板中指定的值来配置相应的实例参数。如果启动模板中未指定值,则使用相应实例参数的默认值。
通过指定参数创建启动模板
要创建启动模板,您必须指定启动模板名称和至少一个实例配置参数。
有关每个参数的说明,请参阅Amazon EC2 实例配置参数参考。
- Console
-
使用控制台创建启动模板
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择启动模板,然后选择创建启动模板。
-
在启动模板名称和说明下,执行以下操作:
-
对于设备模板名称,请为您的启动模板输入描述性名称。
-
对于模板版本说明,提供此版本的启动模板的简短说明。
-
要在创建时标记启动模板,请展开模板标签,选择添加新标签,然后输入标签键值对。为每个要添加的其他标签选择添加新标签。
要标记启动实例时创建的资源,必须在 Resource tags(资源标签)下面指定标签。有关更多信息,请参阅此过程中的步骤 9。
-
在应用程序和操作系统映像(亚马逊机器映像)下,您可以保持选中不包括在启动模板中,也可以选择实例的操作系统(OS),然后选择 AMI。或者,您可以指定 Systems Manager 参数而非指定 AMI。有关更多信息,请参阅 使用 Systems Manager 参数而非 AMI ID。
AMI 是一个模板,其中包含启动实例所需的操作系统和软件。
-
在实例类型下,您可以保持选中不包括在启动模板中,也可以选择一个实例类型,或者指定实例属性并让 Amazon EC2 使用这些属性识别实例类型。
实例类型决定了用于实例的硬件配置(CPU、内存、存储和网络容量)和主机大小。
如果不确定要选择哪种实例类型,则可以执行以下操作:
如果 AWS 账户 创建不到 12 个月,您可以选择 t2.micro 实例类型,或在 t2.micro 不可用的区域中选择 t3.micro 实例类型,来使用免费套餐下的 Amazon EC2。请注意,在启动 t3.micro 实例时,默认会启用无限模式,该模式可能会根据 CPU 使用情况产生额外费用。如果实例类型符合 Free Tier(免费套餐)条件,则会标记为 Free tier eligible(符合免费套餐条件)。
-
在密钥对(登录)下,对于密钥对名称,请保持选中不包括在启动模板中、选择现有密钥对或创建一个新密钥对。
-
在网络设置下,您可以保持选中不包括在启动模板中,也可以为各种网络设置指定值。
-
在配置存储下,如果您在启动模板中指定了 AMI,则 AMI 会包含一个或多个存储卷,包括根卷 [卷 1(AMI 根)]。您可以选择指定要附加到实例的其他卷。要添加新卷,请选择 Add new volume(添加新卷)。
-
要标记启动实例时创建的资源,在资源标签下,选择添加标签,然后输入标签键值对。对于 Resource types(资源类型),指定创建时要标记的资源。您可以为所有资源指定相同的标签,也可以为不同的资源指定不同的标签。为每个要添加的其它标签选择 Add tag(添加标签)。
您可以为使用启动模板时创建的以下资源指定标签:
-
实例
-
卷
-
Elastic Graphics
-
竞价型实例请求
-
网络接口
要为启动模板本身添加标签,您必须在 Template tags(模板标签)下指定标签。有关更多信息,请参阅此过程中的步骤 3。
-
对于高级详细信息,请展开该部分以查看字段并(可选)为实例指定任何其他参数。
-
使用摘要面板查看启动模板配置。您可以通过选择其链接导航到任何部分,然后进行任何必要的更改。
-
当您准备好创建启动模板时,请选择创建启动模板。
- AWS CLI
-
以下示例使用 create-launch-template 命令创建具有指定名称和实例配置的启动模板。
aws ec2 create-launch-template \
--launch-template-name TemplateForWebServer
\
--version-description WebVersion1
\
--tag-specifications 'ResourceType=launch-template,Tags=[{Key=purpose
,Value=production
}]' \
--launch-template-data file://template-data
.json
以下是一个示例 JSON,其指定实例配置的启动模板数据。将 JSON 保存到文件中并将其包含在 --launch-template-data
参数中,如示例命令中所示。
{
"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"
}
}
- PowerShell
-
以下示例使用 New-EC2LaunchTemplate cmdlet 创建具有指定名称和实例配置的启动模板。
$launchTemplateData = [Amazon.EC2.Model.RequestLaunchTemplateData]@{
ImageId = 'ami-8c1be5f6'
InstanceType = 'r4.4xlarge'
NetworkInterfaces = @(
[Amazon.EC2.Model.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest]@{
AssociatePublicIpAddress = $true
DeviceIndex = 0
Ipv6AddressCount = 1
SubnetId = 'subnet-7b16de0c'
}
)
TagSpecifications = @(
[Amazon.EC2.Model.LaunchTemplateTagSpecificationRequest]@{
ResourceType = 'instance'
Tags = [Amazon.EC2.Model.Tag]@{
Key = 'Name'
Value = 'webserver'
}
}
)
CpuOptions = [Amazon.EC2.Model.LaunchTemplateCpuOptionsRequest]@{
CoreCount = 4
ThreadsPerCore = 2
}
}
$tagSpecificationData = [Amazon.EC2.Model.TagSpecification]@{
ResourceType = 'launch-template'
Tags = [Amazon.EC2.Model.Tag]@{
Key = 'purpose'
Value = 'production'
}
}
New-EC2LaunchTemplate -LaunchTemplateName 'TemplateForWebServer' -VersionDescription 'WebVersion1' -LaunchTemplateData $launchTemplateData -TagSpecification $tagSpecificationData
下面是示例输出。
CreatedBy : arn:aws:iam::123456789012:root
CreateTime : 9/19/2023 16:57:55
DefaultVersionNumber : 1
LatestVersionNumber : 1
LaunchTemplateId : lt-01238c059eEXAMPLE
LaunchTemplateName : TemplateForWebServer
Tags : {purpose}
从现有启动模板创建启动模板
您可以克隆现有的启动模板,然后调整参数以创建新的启动模板。但是,您只能在使用 Amazon EC2 控制台时执行此操作。AWS CLI 不支持克隆模板。有关每个参数的说明,请参阅Amazon EC2 实例配置参数参考。
- Console
-
从现有启动模板创建启动模板
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择启动模板,然后选择创建启动模板。
-
对于设备模板名称,请为您的启动模板输入描述性名称。
-
对于模板版本说明,提供此版本的启动模板的简短说明。
-
要在创建时标记启动模板,请展开模板标签,选择添加新标签,然后输入标签键值对。
-
展开源模板,对于启动模板名称,选择要作为新启动模板基础的启动模板。
-
对于源模板版本,请选择新启动模板版本所基于的启动模板版本。
-
根据需要,调整任何启动参数,然后选择Create launch template (创建启动模板)。
从实例创建启动模板
您可以克隆现有 Amazon EC2 实例的参数,然后调整参数以创建启动模板。有关每个参数的说明,请参阅Amazon EC2 实例配置参数参考。
- Console
-
- AWS CLI
-
您可以使用 AWS CLI 从现有实例创建启动模板,方法是先从实例获取启动模板数据,然后使用启动模板数据创建启动模板。
从实例获取启动模板数据
-
使用 get-launch-template-data 命令,并指定实例 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
使用 Systems Manager 参数而非 AMI ID
您可以指定 AWS Systems Manager 参数,而不是在启动模板中指定 AMI ID。如果 AMI ID 发生变更,您可以通过更新 Systems Manager Parameter Store 中的 Systems Manager 参数在一个位置更新 AMI ID。参数也可以与其他 AWS 账户 共享。您可以在一个账户中集中存储和管理 AMI 参数,并与需要引用这些参数的所有其他账户共享。使用 Systems Manager 参数,只需一次操作即可更新所有启动模板。
Systems Manager 参数是用户定义的键值对,您可以在 AWS Systems Manager Parameter Store 中创建该键值对。Parameter Store 提供了一个集中位置来存储应用程序配置值。
在下图中,golden-ami
参数首先映射到 Parameter Store 中的原始 AMI ami-aabbccddeeffgghhi
。在启动模板中,AMI ID 的值为 golden-ami
。使用此启动模板启动实例时,AMI ID 解析为 ami-aabbccddeeffgghhi
。之后,AMI 会更新,从而生成新的 AMI ID。在 Parameter Store 中,golden-ami
参数将映射到新的 ami-00112233445566778
。启动模板保持不变。使用此启动模板启动实例时,AMI ID 解析为新的 ami-00112233445566778
。
根据启动模板要求,用户定义的 Systems Manager 参数在替换 AMI ID 时应遵循以下格式:
有关为 AMI ID 创建有效参数的更多信息,请参阅《AWS Systems Manager 用户指南》中的创建 Systems Manager 参数。
要在启动模板中使用 Systems Manager 参数替换 AMI ID,必须在启动模板中指定参数时采用以下格式之一:
要引用公有参数,请执行以下操作:
要引用存储在同一账户中的参数,请执行以下操作:
-
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
参数版本
Systems Manager 参数是版本控制资源。更新参数时,会创建该参数的连续新版本。Systems Manager 支持参数标签,您可以将其映射到参数的特定版本。
例如,golden-ami
参数可能有三个版本:1
、2
和 3
。您可以创建映射到版本 2
的参数标签 beta
,以及映射到版本 3
的参数标签 prod
。
在启动模板中,您可以使用以下任一格式指定 golden-ami
参数的版本 3:
指定版本或标签是可选的。如果未指定版本或标签,将使用参数的最新版本。
在启动模板中指定 Systems Manager 参数
创建启动模板或其新版本时,可以在启动模板中指定 Systems Manager 参数,而不是 AMI ID。
- Console
-
在启动模板中指定 Systems Manager 参数
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择启动模板,然后选择创建启动模板。
-
对于设备模板名称,请为您的启动模板输入描述性名称。
-
在应用程序和操作系统镜像(Amazon 机器映像)下,选择浏览其他 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
要引用其他 AWS 账户 共享的参数,请执行以下操作:
-
resolve:ssm:parameter-ARN
-
resolve:ssm:parameter-ARN
:version-number
-
resolve:ssm:parameter-ARN
:label
-
选择保存。
-
根据需要指定任何其他启动模板参数,然后选择创建启动模板。
有关更多信息,请参阅 通过指定参数创建启动模板。
- AWS CLI
-
在启动模板中指定 Systems Manager 参数
-
使用 create-launch-template 命令创建启动模板。要指定要使用的 AMI,请使用以下格式之一输入 Systems Manager 参数名称:
要引用公有参数,请执行以下操作:
要引用存储在同一账户中的参数,请执行以下操作:
-
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
下面的示例创建一个指定以下内容的启动模板:
aws ec2 create-launch-template \
--launch-template-name TemplateForWebServer
\
--tag-specifications 'ResourceType=launch-template,Tags=[{Key=purpose
,Value=production
}]' \
--launch-template-data file://template-data
.json
以下是一个示例 JSON 文件,其中包含实例配置的启动模板数据。ImageId
的值是以所需格式 resolve:ssm:golden-ami
输入的 Systems Manager 参数名称。
{"LaunchTemplateData": {
"ImageId": "resolve:ssm:golden-ami
",
"InstanceType": "m5.4xlarge
",
"TagSpecifications": [{
"ResourceType": "instance",
"Tags": [{
"Key":"Name
",
"Value":"webserver
"
}]
}]
}
}
验证启动模板是否获得正确的 AMI ID
将 Systems Manager 参数解析为实际的 AMI ID
使用 describe-launch-template-versions 命令并包含 --resolve-alias
参数。
aws ec2 describe-launch-template-versions \
--launch-template-name my-launch-template
\
--versions $Default
\
--resolve-alias
响应包含 ImageId
的 AMI ID。在本示例中,使用此启动模板启动实例时,AMI ID 解析为 ami-0ac394d6a3example
。
{
"LaunchTemplateVersions": [
{
"LaunchTemplateId": "lt-089c023a30example",
"LaunchTemplateName": "my-launch-template",
"VersionNumber": 1,
"CreateTime": "2022-12-28T19:52:27.000Z",
"CreatedBy": "arn:aws:iam::123456789012:user/Bob",
"DefaultVersion": true,
"LaunchTemplateData": {
"ImageId": "ami-0ac394d6a3example",
"InstanceType": "t3.micro",
}
}
]
}
有关使用 Systems Manager 参数的更多信息,请参阅 Systems Manager 文档中的以下参考资料。
限制
-
只有 instant
类型的 EC2 实例集支持使用指定了 Systems Manager 参数而不是 AMI ID 的启动模板。
-
maintain
和 request
类型的 EC2 实例集以及竞价型实例集不支持使用指定了 Systems Manager 参数而不是 AMI ID 的启动模板。对于 maintain
和 request
类型的 EC2 实例集以及竞价型实例集,如果您在启动模板中指定 AMI,则必须指定 AMI ID。
-
如果在 EC2 实例集中使用基于属性的实例选择,则无法指定 Systems Manager 参数来代替 AMI ID。如果基于属性的实例选择,则必须指定 AMI ID。
-
Amazon EC2 Auto Scaling 提供其他限制。有关更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的在启动模板中使用 AWS Systems Manager 参数代替 AMI ID。