使用按需容量预留来预留特定可用区的容量 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用按需容量预留来预留特定可用区的容量

Amazon EC2 按需容量预留可以帮助您在特定的可用区中预留计算容量。如需开始使用容量预留,您可以在所需的可用区中创建容量预留。然后,您可以在预留容量中启动实例,实时查看其容量使用情况,以及根据需要增加或减少其容量。

容量预留配置为 open 或者 targeted。如果容量预留处于open状态,具有匹配属性的所有实例和现有实例将会自动在容量预留的容量中运行。如果容量预留处于 targeted 状态,只有专门定位到其中的实例才能在预留容量中运行。

本主题演示如何创建自动扩缩组,使其在 targeted 容量预留中启动按需型实例。这样可以更好地控制何时使用特定的容量预留。

基本步骤如下:

  1. 在具有相同实例类型、平台和实例数量的多个可用区中创建容量预留。

  2. 使用 Res Amazon ource Groups 分组容量预留。

  3. 使用与容量预留相同的可用区,通过定位到资源组的启动模板创建自动扩缩组。

步骤 1:创建容量预留

第一步是在部署自动扩缩组的每个可用区中创建容量预留。

注意

只有在首次创建容量预留时才能创建 targeted 预留。

Console
如需创建您的容量预留
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 选择 容量预留 (容量预留),然后选择 Create 容量预留 (创建容量预留)

  3. 创建一个容量预留页面上,注意遵循实例详情章节中的设置。您启动的实例的实例类型、平台和可用区必须与您在此处指定的实例类型、平台和可用区匹配,否则将不会应用容量预留。

    1. 对于实例类型,在预留容量中选择启动的实例类型。

    2. 平台,选择您实例的操作系统。

    3. 对于可用区,请选择要在其中预留容量的第一个可用区。

    4. 对于总容量,请选择所需的实例数量。计算自动扩缩组所需的实例总数除以计划使用的可用区数量。

  4. 容量预留的详细信息下,对于容量预留的结束方式,请选择下列选项之一:

    • 在特定时间-在指定的日期和时间自动取消容量预留。

    • 手动-保留容量,直到您明确取消容量。

  5. 对于实例资格,请选择目标:仅限定位到容量预留的实例

  6. (可选)对于标签,请指定要与容量预留关联的任何标签。

  7. 选择创建

  8. 记录新创建的容量预留的 ID。您需要用它来设置容量预留组。

对要为自动扩缩组启用的每个可用区重复此过程,仅更改可用区选项的值。

Amazon CLI
如需创建您的容量预留

使用以下create-capacity-reservation命令创建容量预留。替换 --availability-zone--instance-type--instance-platform--instance-count 的示例值。

aws ec2 create-capacity-reservation \ --availability-zone us-east-1a \ --instance-type c5.xlarge \ --instance-platform Linux/UNIX \ --instance-count 3 \ --instance-match-criteria targeted

生成的容量预留 ID 示例

{ "CapacityReservation": { "CapacityReservationId": "cr-1234567890abcdef1", "OwnerId": "123456789012", "CapacityReservationArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", "InstanceType": "c5.xlarge", "InstancePlatform": "Linux/UNIX", "AvailabilityZone": "us-east-1a", "Tenancy": "default", "TotalInstanceCount": 3, "AvailableInstanceCount": 3, "EbsOptimized": false, "EphemeralStorage": false, "State": "active", "StartDate": "2023-07-26T21:36:14+00:00", "EndDateType": "unlimited", "InstanceMatchCriteria": "targeted", "CreateDate": "2023-07-26T21:36:14+00:00" } }

记录新创建的容量预留的 ID。您需要用它来设置容量预留组。

对要为自动扩缩组启用的每个可用区重复此命令,仅更改 --availability-zone 选项的值。

步骤 2:创建容量预留组

创建完容量预留后,您可以使用 Res Amazon ource Groups 服务将它们分组在一起。 Amazon Resource Groups 支持几种不同类型的群组,用于不同的用途。Amazon EC2 使用一个特殊用途的组(称为服务相关资源组)来定位一组容量预留。要与该服务相关资源组进行交互,您可以使用 Amazon CLI 或 SDK,但不能使用控制台。有关服务相关资源组的更多信息,请参阅 Amazon 资源组用户指南中的资源组服务配置

要使用创建容量预留组 Amazon CLI

使用 create-group 命令创建只能包含容量预留的资源组。在此示例中,资源组名为 my-cr-group

aws resource-groups create-group \ --name my-cr-group \ --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'

以下为响应示例。

{ "Group": { "GroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group", "Name": "my-cr-group" }, "GroupConfiguration": { "Configuration": [ { "Type": "AWS::EC2::CapacityReservationPool" }, { "Type": "AWS::ResourceGroups::Generic", "Parameters": [ { "Name": "allowed-resource-types", "Values": [ "AWS::EC2::CapacityReservation" ] } ] } ], "Status": "UPDATE_COMPLETE" } }

记下新资源组的 ARN。您需要它来为自动扩缩组设置启动模板。

使用 Amazon CLI将您的容量预留与新创建的群组相关联

使用以下 group-resources 命令将容量预留与新创建的容量预留组相关联。对于 --resource-arns 选项,请使用容量预留的 ARN 来指定容量预留。使用相关区域、账户 ID 和前文记录的预留 ID 构建 ARN。在此示例中,ID 为 cr-1234567890abcdef1cr-54321abcdef567890 的预留将被分组到名为 my-cr-group 的组中。

aws resource-groups group-resources \ --group my-cr-group \ --resource-arns \ arn:aws:ec2:region:account-id:capacity-reservation/cr-1234567890abcdef1 \ arn:aws:ec2:region:account-id:capacity-reservation/cr-54321abcdef567890

以下为响应示例。

{ "Succeeded": [ "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" ], "Failed": [], "Pending": [] }

有关修改或删除资源组的信息,请参阅 Amazon 资源组 API 参考

步骤 3:创建启动模板

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

  2. 在导航窗格中的实例下,选择启动模板

  3. 选择 Create launch template (创建启动模板)。为启动模板的初始版本输入名称并提供描述。

  4. Auto Scaling guidance(Auto Scaling 指导)下,选中复选框。

  5. 创建启动模板。选择与计划使用的容量预留相匹配的 AMI 和实例类型,或者选择密钥对、一个或多个安全组,以及用于实例的任何其他 EBS 卷或实例存储卷。

  6. 展开 高级设置,并执行以下操作:

    1. 对于容量预留,请选择按组定位

    2. 对于容量预留 — 按组定位,选择您在上一节中创建的容量预留组,然后选择保存

  7. 选择Create launch template(创建启动模板)。

  8. 在确认页面上,选择 Create Auto Scaling group(创建 Auto Scaling 组)。

Amazon CLI
创建启动模板

使用以下create-launch-template命令创建启动模板,该模板指定容量预留以特定的资源组为目标。替换 --launch-template-name 的样本值。将 c5.xlarge 替换为您在容量预留中使用的实例类型,并将 ami-0123456789EXAMPLE 替换为您要使用的 AMI 的 ID。将 arn:aws:resource-groups:region:account-id:group/my-cr-group 替换为上一节开头创建的资源组的 ARN。

aws ec2 create-launch-template \ --launch-template-name my-launch-template \ --launch-template-data \ '{"InstanceType": "c5.xlarge", "ImageId": "ami-0123456789EXAMPLE", "CapacityReservationSpecification": {"CapacityReservationTarget": { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:region:account-id:group/my-cr-group" } } }'

以下为响应示例。

{ "LaunchTemplate": { "LaunchTemplateId": "lt-0dd77bd41dEXAMPLE", "LaunchTemplateName": "my-launch-template", "CreateTime": "2023-07-26T21:42:48+00:00", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

步骤 4:创建自动扩缩组

Console

像往常一样创建自动扩缩组,但是在选择 VPC 子网时,请从每个可用区中选择一个与您创建的 targeted 容量预留相匹配的子网。然后,当您的自动扩缩组在其中一个可用区启动按需型实例时,该实例将在该可用区的预留容量下运行。如果资源组在达到您的所需容量之前用完了容量预留,我们会将超出预留容量的任何容量作为常规按需容量启动。

创建一个简单的自动扩缩组
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 在屏幕顶部的导航栏上,选择与创建启动模板时相同的 Amazon Web Services 区域 模板。

  3. 选择 Create an Auto Scaling group (创建 Auto Scaling 组)。

  4. 选择启动模板或配置页面上,对于 Auto Scaling 组名称,输入 Auto Scaling 组的名称。

  5. 对于启动模板,请选择现有启动模板。

  6. 对于 Launch template version(启动模板版本),选择 Auto Scaling 组在扩展时使用启动模板的默认版本、最新版本还是特定版本。

  7. 选择实例启动选项页面上,跳过实例类型要求部分,使用在启动模板中指定的 EC2 实例类型。

  8. Network (网络) 下,对于 VPC,选择相应的 VPC。必须在启动模板中指定的安全组所在的 VPC 中创建 Auto Scaling 组。如果您没有在启动模板中指定安全组,您可以选择与容量预留相同的可用区中拥有子网的任何 VPC。

  9. 对于可用区和子网,根据您的容量预留所在的可用区,从要包含的每个可用区中选择子网。

  10. 选择 Next(下一步)两次。

  11. 配置组大小和扩缩策略页面上,对于所需容量,输入要启动的初始实例数。将此数字更改为超出最小容量或最大容量限制的值时,必须更新最小容量最大容量的值。有关更多信息,请参阅 为自动扩缩组设置扩缩限制

  12. 选择 Skip to review (跳转以查看)。

  13. Review(查看)页面上,选择 Create Auto Scaling group(创建 Auto Scaling 组)。

Amazon CLI
创建一个简单的自动扩缩组

使用以下create-auto-scaling-group命令并指定启动模板的名称和版本作为该--launch-template选项的值。替换 --auto-scaling-group-name--min-size--max-size--vpc-zone-identifier 的示例值。

对于 --availability-zones 选项,请指定您为其创建容量预留的可用区。例如,如果您的容量预留指定了 us-east-1aus-east-1b 可用区,则必须在相同的区域中创建自动扩缩组。然后,当您的自动扩缩组在其中一个可用区启动按需型实例时,该实例将在该可用区的预留容量下运行。如果资源组在达到您的所需容量之前用完了容量预留,我们会将超出预留容量的任何容量作为常规按需容量启动。

aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name my-asg \ --launch-template LaunchTemplateName=my-launch-template,Version='1' \ --min-size 6 \ --max-size 6 \ --vpc-zone-identifier "subnet-5f46ec3b,subnet-0ecac448" \ --availability-zones us-east-1a us-east-1b

有关示例实现,请参阅以下 Amazon 示例 GitHub 存储库中的 Amazon CloudFormation 模板:https://github.com/aws-samples/ aws-auto-scaling-backed-by-on-demand-capacity-reservations/。

在您了解容量预留时,以下相关主题可能对您有所帮助。