配置 Windows AMI 以实现快速启动 - Amazon Elastic Compute Cloud

配置 Windows AMI 以实现快速启动

必须对每个 EC2 Windows 实例执行标准的 Windows 操作系统(OS)启动步骤,其中包括多次重启,通常需要 15 分钟或更长时间才能完成。为更快启动而优化的 Windows AMI 可以完成其中一些步骤并提前重启,方法是在后台启动一组实例,然后在完成初始启动步骤后创建快照。在更快启动过程中使用这些快照可以显著减少在需要实例时启动实例所需的时间。

当您配置 Windows AMI 以加快启动速度时,Amazon EC2 会根据您的设置自动为您创建快照,您只需为该流程消耗的资源付费。该过程与 EBS 快速快照还原不同。EBS 快速快照还原必须逐个启用,并且会产生相关的成本。

注意

任何有权访问启用了更快启动的 AMI 的账户都可以从缩短的启动时间中受益。但是,提供用于启动的快照的是 AMI 拥有者的账户。

关键术语

  • 预置的快照 – 满足以下条件的实例的快照:已从启用更快启动的 Windows AMI 启动,完成了下列 Windows 启动步骤并根据需要重启。Amazon EC2 会根据您的配置自动创建这些快照。

    • Sysprep 专门化

    • Windows 全新体验(OOBE)

    完成这些步骤后,Amazon EC2 会停止实例并创建一个快照,这样即可缩短以后从 AMI 启动的时间。

  • 启动频率 – 控制 Amazon EC2 可在指定时间范围内启动的预置快照的数量。为 AMI 启用更快启动时,Amazon EC2 会在后台创建一组初始的预置快照。例如,如果启动频率设置为每小时启动五次(默认值),则 Amazon EC2 会创建一组初始的预置快照(共五张)。

    当 Amazon EC2 从启用了更快启动的 AMI 启动实例时,它使用其中一个预置快照来缩短启动时间。使用快照时,它们会自动补充,最多不超过启动频率指定的数量。

    如果您预计从 AMI 启动的实例数量会飙升(例如,在特殊活动期间),则可以提前提高启动频率以覆盖所需的其他实例。当启动速率恢复正常时,您可以重新调低频率。

    当您遇到的启动次数超过预期时,您可能会耗尽可用的更快启动快照。这不会导致任何启动失败。但是,它可能会导致某些实例经历标准启动过程,直到可以补充快照为止。

  • 目标资源计数 – 为启用了更快启动的 AMI 预留的预置快照数量。

  • 最大并行启动数 – 控制一次可以启动多少个实例以创建预置快照。如果您的目标资源数高于您配置的最大并行启动数,Amazon EC2 将首先启动最大并行启动数设置中为创建快照指定的实例数量。在这些实例完成流程的过程中,Amazon EC2 会创建快照并停止实例,更多实例会启动,直至可用快照总数达到目标资源计数。此值必须等于或大于 6。

资源成本

配置 Windows AMI 以实现更快启动时,无需支付服务费。但是,准备和存储预置快照的底层 AWS 资源会以标准定价收费。以下示例展示了如何分配相关成本。

示例场景:AtoZ Example 公司有一个具有 50 GiB EBS 根卷的 Windows AMI。它们可以帮助更快地启动 AMI,并将目标资源计数设置为五。在一个月的期限内,使用 Windows 更快启动 AMI 的成本约为 5.00 美元,成本细目如下:

  1. 当 AtoZ Example 启用更快启动时,Amazon EC2 会启动五个小型实例。每个实例都会完成 Sysprep 和 OOBE Windows 启动步骤,并根据需要重启。每个实例需要几分钟时间(时长可能有所不同,具体取决于该区域或可用区(AZ)的忙闲状况以及 AMI 的大小)。

    成本

    • 实例运行时成本(或最小运行时 [如适用]):五个实例

    • 卷成本:五个 EBS 根卷

  2. 预置过程完成后,Amazon EC2 会创建实例的快照并将其存储在 Simple Storage Service(Amazon S3)中。快照通常会存储 4-8 小时,然后才会被启动消耗。在这种情况下,每张快照的成本大约为 0.02 至 0.05 美元。

    成本

    • 快照存储 [Simple Storage Service(Amazon S3)]:五张快照

  3. Amazon EC2 创建快照后,会停止实例。此时,实例不再累积成本。但是,EBS 卷的成本会继续累积。

    成本

    • EBS 卷:关联的 EBS 根卷的成本会继续增加。

注意

此处显示的成本仅用于演示目的。成本可能有所不同,具体取决于您的 AMI 配置和定价套餐。

您可以使用 Amazon EC2 控制台、API、开发工具包或 AWS CLI 中的 ec2 命令配置您拥有的 Windows AMI 以加快启动速度。以下部分介绍了 Amazon EC2 控制台和 AWS CLI 的配置步骤。

先决条件

在为 EC2 Windows 实例设置更快的启动之前,请验证是否满足以下先决条件:

  • 如果您不使用启动模板配置设置,确保为 EC2 Windows 实例使用更快启动的区域配置了默认 VPC。即使您配置了默认 VPC,也无法在该区域启用 EC2 Classic。要了解有关 EC2 Classic 的更多信息,请参阅 EC2-Classic 联网正在停用 - 下面介绍如何准备

    注意

    如果您在计划为 EC2 Windows 实例配置更快启动的区域中意外删除了默认 VPC,则可以在该区域创建新的默认 VPC。要了解更多信息,请参阅 Amazon VPC 用户指南中的创建默认 VPC

  • 要指定非默认 VPC,您必须在配置 Windows 加快启动时使用启动模板。有关更多信息,请参阅在设置更快启动时使用启动模板

  • 如果账户包含对 Amazon EC2 实例强制实施 IMDSv2 的策略,您必须创建一个启动模板来指定元数据配置以强制实施 IMDSv2。

  • 要更改启用了更快启动的 EC2 Windows 实例的设置,您的 AWS 账户必须拥有 Windows AMI。

  • 您用于为 EC2 Windows 实例配置更快启动的 Windows AMI 必须使用 Sysprep 与关闭选项创建。在未运行 Sysprep 的情况下从实例创建的 AMI 目前不受支持。要使用 Sysprep 创建 AMI,请参阅 创建自定义 Windows AMI

在设置更快启动时使用启动模板

您可以使用启动模板配置一组启动参数,Amazon EC2 每次从该模板启动实例时都会使用这些参数。您可以指定用于基础映像的 AMI、实例类型、存储、网络设置等内容。启动模板是可选的,但以下特定情况除外:在配置更快启动时,必须为 Windows AMI 使用启动模板:

  • 您必须使用启动模板为 Windows AMI 指定非默认 VPC。

  • 如果账户包含对 Amazon EC2 实例强制实施 IMDSv2 的策略,您必须创建一个启动模板来指定元数据配置以强制实施 IMDSv2。

    使用包含 EC2 控制台的元数据配置的启动模板,或在 AWS CLI 中运行 enable-fast-launch 命令,或调用 EnableFastLaunch API 操作。

指定非默认 VPC

步骤 1:创建启动模板

从 AWS Management Console 或 AWS CLI 创建一个启动模板,并在其中为 Windows 实例指定 VPC。有关更多信息,请参阅创建启动模板

步骤 2:为更快启动 AMI 指定启动模板

  • 要为 EC2 Windows 实例指定启动模板以加快启动速度,请遵照以下步骤:

    1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

    2. 在导航窗格中,在映像下选择 AMI

    3. 通过选择 Name(名称)旁边的复选框来选择要更新的 AMI。

    4. 从 AMI 列表上方的 Actions(操作)菜单中,选择 Manage image optimization(管理镜像优化)。这将打开 Manage image optimizations(管理镜像优化)页面,您可以在其中配置设置以加快启动速度。

    5. Launch template(启动模板)框执行筛选搜索,在当前区域的账户中查找与您输入的文本相匹配的启动模板。在框中输入完整的启动模板名称或 ID 或其一部分,以显示匹配的启动模板列表。例如,如果您在框中输入 fast,Amazon EC2 会在当前区域中查找您的账户中名称包含“fast”的所有启动模板。

      要创建启动模板,请选择 Create launch template(创建启动模板)。

    6. 当您选择某个启动模板时,Amazon EC2 会在 Source template version(源模板版本)框中显示该模板的默认版本。要指定其他版本,请突出显示要替换的默认版本,然后在框中输入所需的版本号。

    7. 完成更改后,选择 Save changes(保存更改)。

  • 当您在 AWS CLI 中运行 enable-fast-restores 命令时,在 --launch-template 参数中指定启动模板名称或 ID。

  • 当您调用 EnableFastLaunch API 操作时,在 LaunchTemplate 参数中指定启动模板名称或 ID。

有关 EC2 启动模板的更多信息,请参阅通过启动模板启动实例

为 Windows AMI 开启更快启动

要为 EC2 Windows 实例开启更快启动,请选择与您的环境匹配的选项卡,然后按照步骤操作。

注意

要更改这些设置,请确保您的 AMI 和运行所在的区域满足所有 先决条件

Console
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,在映像下选择 AMI

  3. 通过选择 Name(名称)旁边的复选框来选择要更新的 AMI。

  4. 从 AMI 列表上方的 Actions(操作)菜单中,选择 Manage image optimization(管理镜像优化)。这将打开 Manage image optimizations(管理镜像优化)页面,您可以在其中配置设置以加快启动速度。

  5. 要开始使用预配置快照以更快地从 Windows AMI 启动实例,请选择 Enable Windows faster launching(启用 Windows 更快启动)复选框。

  6. Set anticipated launch frequency(设置预期的启动频率)下拉列表中,选择一个值以指定为覆盖预期实例启动卷而创建和维护的快照数量。

  7. 完成更改后,选择 Save changes(保存更改)。

注意

如果您需要使用启动模板来指定非默认 VPC,或为 IMDSv2 配置元数据设置,请参阅 在设置更快启动时使用启动模板

AWS CLI

enable-fast-launch 命令调用 Amazon EC2 EnableFastLaunch API 操作。

语法:

aws ec2 enable-fast-launch \ --image-id <value> \ --resource-type <value> \ (optional) --snapshot-configuration <value> \ (optional) --launch-template <value> \ (optional) --max-parallel-launches <value> \ (optional) --dry-run | --no-dry-run \ (optional) --cli-input-json <value> \ (optional) --generate-cli-skeleton <value> \ (optional)

例如:

以下 enable-fast-launch 示例会为指定的 AMI 启用更快启动,启动六个并行实例进行预置。ResourceType 设置为其默认值:snapshot

aws ec2 enable-fast-launch \ --image-id ami-01234567890abcedf \ --max-parallel-launches 6 \ --resource-type snapshot

输出:

{ "ImageId": "ami-01234567890abcedf", "ResourceType": "snapshot", "SnapshotConfiguration": { "TargetResourceCount": 10 }, "LaunchTemplate": {}, "MaxParallelLaunches": 6, "OwnerId": "0123456789123", "State": "enabling", "StateTransitionReason": "Client.UserInitiated", "StateTransitionTime": "2022-01-27T22:16:03.199000+00:00" }
Tools for Windows PowerShell

Enable-EC2FastLaunch cmdlet 调用 Amazon EC2 EnableFastLaunch API 操作。

语法:

Enable-EC2FastLaunch -ImageId <String> -LaunchTemplate_LaunchTemplateId <String> -LaunchTemplate_LaunchTemplateName <String> -MaxParallelLaunch <Int32> -ResourceType <String> -SnapshotConfiguration_TargetResourceCount <Int32> -LaunchTemplate_Version <String> -Select <String> -PassThru <SwitchParameter> -Force <SwitchParameter>

例如:

以下 Enable-EC2FastLaunch 示例会为指定的 AMI 启用更快启动,启动六个并行实例进行预置。ResourceType 设置为其默认值:snapshot

Enable-EC2FastLaunch ` -ImageId ami-01234567890abcedf ` -MaxParallelLaunch 6 ` -Region us-west-2 ` -ResourceType snapshot

输出:

ImageId : ami-01234567890abcedf LaunchTemplate : MaxParallelLaunches : 6 OwnerId : 0123456789123 ResourceType : snapshot SnapshotConfiguration : Amazon.EC2.Model.FastLaunchSnapshotConfigurationResponse State : enabling StateTransitionReason : Client.UserInitiated StateTransitionTime : 2/25/2022 12:24:11 PM

为 Windows AMI 停止更快启动

要为 EC2 Windows 实例停止更快启动,请选择与您的环境匹配的选项卡,然后按照步骤操作。

注意

要更改这些设置,请确保您的 AMI 和运行所在的区域满足所有 先决条件

Console
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,在映像下选择 AMI

  3. 通过选择 Name(名称)旁边的复选框来选择要更新的 AMI。

  4. 从 AMI 列表上方的 Actions(操作)菜单中,选择 Manage image optimization(管理镜像优化)。这将打开 Manage image optimizations(管理镜像优化)页面,您可以在其中配置设置以加快启动速度。

  5. 清除 Enable Windows faster launching(启用 Windows 更快启动)复选框可停止更快地启动 EC2 Windows 实例并删除预配置的快照。这将导致 AMI 向前为每个实例使用标准启动流程。

    注意

    停止 Windows 镜像优化后,任何现有的预置快照都将自动删除。必须先完成此步骤,然后才能再次开始使用该功能。

  6. 完成更改后,选择 Save changes(保存更改)。

AWS CLI

disable-fast-launch 命令调用 Amazon EC2 DisableFastLaunch API 操作。

语法:

aws ec2 disable-fast-launch \ --image-id <value> \ --force | --no-force \ (optional) --dry-run | --no-dry-run \ (optional) --cli-input-json <value> \ (optional) --generate-cli-skeleton <value> \ (optional)

例如:

以下 disable-fast-launch 示例停止指定 AMI 上的更快启动,并清理现有的预置快照。

aws ec2 disable-fast-launch \ --image-id ami-01234567890abcedf

输出:

{ "ImageId": "ami-01234567890abcedf", "ResourceType": "snapshot", "SnapshotConfiguration": {}, "LaunchTemplate": { "LaunchTemplateId": "lt-01234567890abcedf", "LaunchTemplateName": "EC2FastLaunchDefaultResourceCreation-a8c6215d-94e6-441b-9272-dbd1f87b07e2", "Version": "1" }, "MaxParallelLaunches": 6, "OwnerId": "0123456789123", "State": "disabling", "StateTransitionReason": "Client.UserInitiated", "StateTransitionTime": "2022-01-27T22:47:29.265000+00:00" }
Tools for Windows PowerShell

Disable-EC2FastLaunch cmdlet 调用 Amazon EC2 DisableFastLaunch API 操作。

语法:

Disable-EC2FastLaunch -ImageId <String> -ForceStop <Boolean> -Select <String> -PassThru <SwitchParameter> -Force <SwitchParameter>

例如:

以下 Disable-EC2FastLaunch 示例停止指定 AMI 上的更快启动,并清理现有的预置快照。

Disable-EC2FastLaunch -ImageId ami-01234567890abcedf

输出:

ImageId : ami-01234567890abcedf LaunchTemplate : Amazon.EC2.Model.FastLaunchLaunchTemplateSpecificationResponse MaxParallelLaunches : 6 OwnerId : 0123456789123 ResourceType : snapshot SnapshotConfiguration : State : disabling StateTransitionReason : Client.UserInitiated StateTransitionTime : 2/25/2022 1:10:08 PM

查看启用了更快启动的 Windows AMI(AWS CLI)

您可以在 AWS CLI 中使用 describe-fast-launch-images 命令,或者适用于 Windows PowerShell cmdlet 的 Get-EC2FastLaunchImage 工具,获取启用了更快启动的 Windows AMI 的详细信息。

Amazon EC2 会提供结果中返回的每个 Windows AMI 的以下详细信息:

  • 标识已启用快速启动的 Windows 映像的映像 ID。

  • 用于预置 Windows AMI 的资源类型。支持的值为:snapshot

  • 快照配置,它是一组参数,用于使用快照预置关联的 Windows AMI。

  • 启动模板信息,包括 AMI 从预置快照启动 Windows 实例时使用的启动模板的 ID、名称和版本。

  • 为创建资源启动的并行实例的最大数量。

  • 启用快速启动的 Windows AMI 的所有者 ID。

  • 指定 Windows AMI 的更快启动的当前状态。支持的值包括:enabling | enabling-failed | enabled | enabled-failed | disabling | disabling-failed

    注意

    您还可在 EC2 控制台中的 Manage image optimization(管理映像优化)页面上看到,当前的状态为 Image optimization state(映像优化状态)。

  • Windows AMI 启动速度加快的原因已更改为当前状态。

  • Windows AMI 启动速度加快的时间已更改为当前状态。

选择与命令行环境匹配的选项卡:

AWS CLI

describe-fast-launch-images 命令调用 Amazon EC2 DescribeFastLaunchImages API 操作。

语法:

aws ec2 describe-fast-launch-images \ --image-ids <value> \ (optional) --filters <value> \ (optional) --dry-run | --no-dry-run \ (optional) --cli-input-json <value> \ (optional) --starting-token <value> \ (optional) --page-size <value> \ (optional) --max-items <value> \ (optional) --generate-cli-skeleton <value> \ (optional)

例如:

以下 describe-fast-launch-images 示例描述了为更快启动而配置的账户中的每个 AMI 的详细信息。在此示例中,账户中只有一个 AMI 被配置为加快启动速度。

aws ec2 describe-fast-launch-images

输出:

{ "FastLaunchImages": [ { "ImageId": "ami-01234567890abcedf", "ResourceType": "snapshot", "SnapshotConfiguration": {}, "LaunchTemplate": { "LaunchTemplateId": "lt-01234567890abcedf", "LaunchTemplateName": "EC2FastLaunchDefaultResourceCreation-a8c6215d-94e6-441b-9272-dbd1f87b07e2", "Version": "1" }, "MaxParallelLaunches": 6, "OwnerId": "0123456789123", "State": "enabled", "StateTransitionReason": "Client.UserInitiated", "StateTransitionTime": "2022-01-27T22:20:06.552000+00:00" } ] }
Tools for Windows PowerShell

Get-EC2FastLaunchImage cmdlet 调用 Amazon EC2 DescribeFastLaunchImages API 操作。

语法:

Get-EC2FastLaunchImage -Filter <Filter[]> -ImageId <String[]> -MaxResult <Int32> -NextToken <String> -Select <String> -NoAutoIteration <SwitchParameter>

例如:

以下 Get-EC2FastLaunchImage 示例描述了为更快启动而配置的账户中的每个 AMI 的详细信息。在此示例中,账户中只有一个 AMI 被配置为加快启动速度。

Get-EC2FastLaunchImage -ImageId ami-01234567890abcedf

输出:

ImageId : ami-01234567890abcedf LaunchTemplate : Amazon.EC2.Model.FastLaunchLaunchTemplateSpecificationResponse MaxParallelLaunches : 6 OwnerId : 0123456789123 ResourceType : snapshot SnapshotConfiguration : State : enabled StateTransitionReason : Client.UserInitiated StateTransitionTime : 2/25/2022 12:54:43 PM

用于更快启动 EC2 Windows 实例的服务相关角色

Amazon EC2 使用服务相关角色获取代表您调用其他AWS服务所需的权限。服务相关角色是一种独特类型的 IAM 角色,它与AWS服务直接相关。服务相关角色提供了一种将权限委托给 AWS 服务的安全方式,因为只有相关服务才能担任服务相关角色。有关 Amazon EC2 如何使用 IAM 角色的更多信息,请参阅 适用于 Amazon EC2 的 IAM 角色

Amazon EC2 使用名为 AWSServiceRoleForEC2FastLaunch 的服务相关角色创建和管理一组预置快照,从而减少从 Windows AMI 启动实例所需的时间。

您无需手动创建该服务相关角色。当您开始为 AMI 使用更快的 EC2 Windows 实例启动时,如果服务相关角色尚不存在,Amazon EC2 将为您创建一个。

注意

如果从您的账户中删除了服务相关角色,则可以为另一个 Windows AMI 开始更快地启动 EC2 Windows 实例,从而在您的账户中重新创建此角色。或者,您可以停止更快地启动当前 AMI 的 EC2 Windows 实例,然后再次启动它。但是,停止该功能会导致您的 AMI 对所有新实例使用标准启动流程,而 Amazon EC2 会删除所有预配置快照。在所有预配置的快照都消失之后,您可以再次为 AMI 使用 EC2 Windows 实例的更快启动。

Amazon EC2 不允许您编辑 AWSServiceRoleForEC2FastLaunch 服务相关角色。创建服务相关角色后,将无法更改角色名称,因为可能有多个实体引用该角色。但是可以使用 IAM 编辑角色说明。有关更多信息,请参见《IAM 用户指南》中的编辑服务相关角色

只有在先删除所有相关资源后,才能删除服务相关角色。这将保护与启用了更快启动的 AMI 相关的 Amazon EC2 资源,因为您不会无意中删除对资源的访问权限。

Amazon EC2 支持在 Amazon EC2 服务可用的所有区域中更快启动 EC2 Windows 实例服务相关角色。有关更多信息,请参阅区域

AWSServiceRoleForEC2FastLaunch 授予的权限

Amazon EC2 使用 EC2FastLaunchServiceRolePolicy 托管策略完成以下操作:

  • cloudwatch:PutMetricData – 将与 EC2 Windows 实例更快启动相关的指标数据发布到 Amazon EC2 命名空间。

  • ec2:CreateLaunchTemplate – 为启用了更快启动的 AMI 创建启动模板。

  • ec2:CreateSnapshot – 为启用了更快启动的 AMI 创建预置快照。

  • ec2:CreateTags – 为与启动和预置 Windows 实例相关联的资源创建标签,以实现启用快速启动的 AMI。

  • ec2:DeleteSnapshots – 如果先前启用的 AMI 关闭了 EC2 Windows 实例的快速启动,则删除所有关联的预置快照。

  • ec2:DescribeImages – 描述所有资源的映像。

  • ec2:DescribeInstanceAttribute – 描述所有资源的实例属性。

  • ec2:DescribeInstanceStatus – 描述所有资源的实例状态。

  • ec2:DescribeInstances – 描述所有资源的实例。

  • ec2:DescribeInstanceTypeOfferings – 描述所有资源的实例类型产品。

  • ec2:DescribeLaunchTemplates – 描述所有资源的启动模板。

  • ec2:DescribeLaunchTemplateVersions – 描述所有资源的启动模板版本。

  • ec2:DescribeSnapshots – 描述所有资源的快照资源。

  • ec2:DescribeSubnets – 描述所有资源的子网。

  • ec2:RunInstances – 从启用了更快启动的 AMI 启动实例,以执行预置步骤。

  • ec2:StopInstances – 停止从启用了更快启动的 AMI 启动的实例,以创建预置快照。

  • ec2:TerminateInstances – 在从启用了更快启动的 AMI 启动实例并创建该实例的预置快照后,终止该实例。

  • iam:PassRole – 允许 AWSServiceRoleForEC2FastLaunch 服务相关角色使用启动模板中的实例配置文件代表您启动实例。

有关 Amazon EC2 使用托管式策略的更多信息,请参阅 AWS Amazon Elastic Compute Cloud 托管策略

对用于加密的 AMI 和 EBS 快照的客户托管密钥的访问权限

先决条件

  • 要让 Amazon EC2 能够代表您访问加密 AMI,您必须具有客户管理密钥中的 createGrant 操作的权限。

当您为加密 AMI 启用 EC2 Windows 实例的更快启动时,Amazon EC2 会确保授予 AWSServiceRoleForEC2FastLaunch 角色使用客户托管密钥访问 AMI 的权限。需要此权限才能启动实例并代表您创建预配置快照。