Auto Scaling 组 容量提供程序 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Auto Scaling 组 容量提供程序

Amazon ECS 容量提供程序可以使用 Auto Scaling 组来管理注册到其集群的 Amazon EC2 实例。您可以使用托管调整功能来让 Amazon ECS 管理 Auto Scaling 组的缩减和扩展操作,您也可以自行管理调整操作。这使您能够有效地使用集群 Auto Scaling。

Auto Scaling 组 容量提供程序注意事项

使用 Auto Scaling 组容量提供程序时应考虑以下因素。

  • 建议您创建一个新 Auto Scaling 组,以便与容量提供程序一起使用,而不是使用现有组。如果您使用现有 Auto Scaling 组,则在 Auto Scaling 组用于创建容量提供程序之前,与已在运行并注册到 Amazon ECS 集群的组关联的任何 Amazon EC2 实例都可能无法正确注册到该容量提供程序。使用容量提供程序策略中的容量提供程序时,这可能会引发问题。DescribeContainerInstances API 可以确认容器实例是否与容量提供程序关联。

  • Auto Scaling 组必须具有大于零的 MaxSize 才能扩展。

  • 使用托管终止保护时,必须启用托管调整,否则托管终止保护将不起作用。

使用托管调整

创建容量提供程序时,您可以选择启用托管调整。启用托管调整后,Amazon ECS 管理在创建容量提供程序时使用的 Auto Scaling 组的缩减和扩展操作。根据您指定的目标容量值,Amazon ECS 代表您创建具有目标跟踪调整策略的 AWS Auto Scaling 调整计划。然后,Amazon ECS 将此调整计划与您的 Auto Scaling 组关联。对于已启用托管调整的每个容量提供程序,都会创建带有前缀 AWS/ECS/ManagedScaling 的 Amazon ECS 托管 CloudWatch 指标以及两个 CloudWatch 警报。CloudWatch 指标和警报用于监控 Auto Scaling 组中的容器实例容量,并将触发 Auto Scaling 组以根据需要进行缩减和扩展。

仅在提供了 AWS Auto Scaling 的区域中才支持托管调整。有关受支持区域的列表,请参阅 Amazon Web Services 一般参考 中的 AWS Auto Scaling 区域和终端节点

创建 Auto Scaling 组

创建 Auto Scaling 组时,使用启动模板或启动配置。启动模板或启动配置指定 Amazon EC2 实例配置,包括 AMI、实例类型、密钥对、安全组和用于启动 Amazon EC2 实例的其他参数。

如果您将 Amazon ECS 控制台的 Create Cluster (创建集群) 向导与 EC2 Linux + 网络 选项结合使用,则作为 AWS CloudFormation 堆栈的一部分,Amazon ECS 会代表您创建 Amazon EC2 Auto Scaling 启动配置和 Auto Scaling 组。它们的前缀是 EC2ContainerService-<ClusterName>,这使得它们很容易识别。然后可以在该集群的容量提供程序中使用 Auto Scaling 组。

为容量提供程序创建 Auto Scaling 组时,应考虑以下因素。

  • 如果在创建容量提供程序时启用了托管终止保护,则 Auto Scaling 组和 Auto Scaling 组中的每个 Amazon EC2 实例也必须启用阻止缩减的实例保护。有关更多信息,请参阅AWS Auto Scaling 用户指南中的实例保护

  • 如果在创建容量提供程序时启用了托管调整,则可将 Auto Scaling 组所需计数设置为 0。启用托管调整后,Amazon ECS 管理 Auto Scaling 组的缩减和扩展操作。

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

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

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

创建容量提供程序

容量提供程序与集群结合使用来确定运行任务的基础设施。创建容量提供程序时,指定以下详细信息:

  • Auto Scaling 组 Amazon 资源名称 (ARN)

  • 是否启用托管调整。启用托管调整后,Amazon ECS 通过使用 AWS Auto Scaling 调整计划来管理 Auto Scaling 组的缩减和扩展操作。禁用托管调整后,您可以自行管理您的 Auto Scaling 组。

  • 是否启用托管终止保护。启用托管终止保护后,Amazon ECS 会阻止包含任务和在 Auto Scaling 组中的 Amazon EC2 实例在缩减操作期间终止。只有当 Auto Scaling 组也启用了阻止缩减的实例保护时,才能启用托管终止保护。

按照以下步骤为现有 Amazon ECS 集群创建新的容量提供程序。

创建容量提供程序

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航栏中,选择集群所在的区域。

  3. 在导航窗格中,选择 Clusters

  4. Clusters (集群) 页面上,选择您的集群。

  5. Cluster: name (集群:名称) 页面上,选择 Capacity Providers (容量提供程序),然后选择 Create (创建)

  6. 对于 Capacity provider name (容量提供程序名称),输入容量提供程序名称。

  7. 对于 Auto Scaling 组,选择要与容量提供程序关联的 Auto Scaling 组。必须已经创建了 Auto Scaling 组。有关更多信息,请参阅创建 Auto Scaling 组

  8. 对于 Managed scaling (托管调整),请选择托管调整选项。启用托管调整后,Amazon ECS 通过使用 AWS Auto Scaling 调整计划来管理 Auto Scaling 组的缩减和扩展操作。禁用托管调整后,您可以自行管理您的 Auto Scaling 组。

  9. 对于 Target capacity % (目标容量百分比),如果启用了托管调整,请指定 1100 之间的整数。目标容量值用作在 Amazon ECS 托管目标跟踪调整策略中使用的 CloudWatch 指标的目标值。此目标容量值会尽力匹配。例如,值 100 将导致 Auto Scaling 组中的 Amazon EC2 实例被完全利用,未运行任何任务的所有实例都会缩减,但不一定能保证在任何时候都实现这种行为。

  10. 对于 Managed termination protection (托管终止保护),请选择托管终止保护选项。启用托管终止保护后,Amazon ECS 会阻止包含任务的 Amazon EC2 实例以及在 Auto Scaling 组中的实例在缩减操作期间终止。只有当 Auto Scaling 组也启用了阻止实例扩展保护并且启用了托管扩展时,才能启用托管终止保护。仅独立任务或使用副本计划策略的服务中的任务才支持托管终止保护。对于使用守护程序计划策略的服务中的任务,实例不受保护。

  11. 选择 Create (创建) 以完成容量提供程序创建。

    重要

    如果在此步骤中出现错误,请尝试注销并再次登录控制台。如果错误仍然存在,我们建议使用 AWS CLI。有关更多信息,请参阅创建容量提供程序 (AWS CLI) 删除 Auto Scaling 组 容量提供程序 (AWS CLI)

使用以下命令创建新的容量提供程序。

  • create-capacity-provider (AWS CLI)

    aws ecs create-capacity-provider \ --name CapacityProviderName \ --auto-scaling-group-provider autoScalingGroupArn="AutoScalingGroupARN",managedScaling=\{status='ENABLED|DISABLED',targetCapacity=integer,minimumScalingStepSize=integer,maximumScalingStepSize=integer\},managedTerminationProtection="ENABLED|DISABLED" \ --region us-east-2

    如果您更喜欢将 JSON 输入文件与 create-capacity-provider 命令一起使用,请使用以下命令生成 CLI 骨架。

    aws ecs create-capacity-provider --generate-cli-skeleton

使用容量提供程序创建集群

创建新 Amazon ECS 集群时,您可以指定一个或多个与集群关联的容量提供程序。关联的容量提供程序确定要在其上运行任务的基础设施。

要查看 AWS 管理控制台 步骤,请参阅创建集群

使用容量提供程序 (AWS CLI) 创建集群

使用以下命令创建新的容量提供程序。

  • create-cluster (AWS CLI)

    aws ecs create-cluster \ --cluster-name ASGCluster \ --capacity-providers CapacityProviderA CapacityProviderB \ --default-capacity-provider-strategy capacityProvider=CapacityProviderA,weight=1,base=1 capacityProvider=CapacityProviderB,weight=1 \ --region us-west-2

    如果您更喜欢将 JSON 输入文件与 create-cluster 命令一起使用,请使用以下命令生成 CLI 骨架。

    aws ecs create-cluster --generate-cli-skeleton

删除 Auto Scaling 组 容量提供程序

使用完 Auto Scaling 组 容量提供程序后,可以将其删除。删除后,Auto Scaling 组 容量提供程序将转换为 INACTIVE 状态。具有 INACTIVE 状态的容量提供程序可能会在一段时间内在您的账户中保持可被发现。但是,此行为可能会在将来发生变化,因此您不应该依赖于持续存在的 INACTIVE 容量提供程序。

在删除 Auto Scaling 组 容量提供程序之前,必须从所有服务的容量提供程序策略中删除该容量提供程序。可以使用 UpdateService API 或 AWS 管理控制台 中的更新服务工作流从服务的容量提供程序策略中删除容量提供程序。可以使用强制新部署选项来确保使用该容量提供程序提供的 Amazon EC2 实例容量的所有任务均转换为使用剩余容量提供程序提供的容量。

有一些其他先决条件是在删除容量提供程序时必须完成的,但它们特定于所使用的工具,在以下步骤中也有提到。

按照以下步骤删除 Auto Scaling 组 容量提供程序。

使用 AWS 管理控制台 删除容量提供程序时,该控制台将执行两个步骤。首先将容量提供程序与集群完全断开关联,然后将其删除。在极少数情况下,容量提供程序可能会成功断开与集群的关联,但无法被删除。在这些情况下,您必须使用 Amazon ECS API 或 AWS CLI 查看容量提供程序的状态并将其删除。

注意

仅当前与集群关联的容量提供程序在 AWS 管理控制台 中可见。要删除未与集群关联的容量提供程序,必须使用 Amazon ECS API、SDK 或 AWS CLI。

使用控制台删除 Auto Scaling 组 容量提供程序

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航栏中,选择集群所在的区域。

  3. 在导航窗格中,选择 Clusters

  4. Clusters (集群) 页面上,选择您的集群。

  5. Cluster : name (集群 : 名称) 页上,选择 Capacity Providers (容量提供程序) 选项卡。

  6. 选择要删除的容量提供程序,然后选择 Delete (删除)

使用 AWS CLI 删除容量提供程序时,必须首先断开容量提供程序与集群的关联。以下选项可用于断开容量提供程序与集群的关联。

选项 1:使用 delete 命令删除集群。这将在成功删除集群后断开容量提供程序与集群的关联。

  • delete-cluster (AWS CLI)

    aws ecs delete-cluster \ --cluster MyCluster

选项 2:使用 put-cluster-capacity-providers 命令断开容量提供程序与集群的关联。如果您希望其他与集群关联的容量提供程序保持与集群的关联,则必须在使用此命令时包括这些容量提供程序。

以下示例将从指定集群中删除所有现有的容量提供程序。

  • put-cluster-capacity-providers (AWS CLI)

    aws ecs put-cluster-capacity-providers \ --cluster MyCluster \ --capacity-providers [] \ --default-capacity-provider-strategy []

使用 delete-capacity-provider 命令删除容量提供程序。您可以使用容量提供程序的短名称或完整 Amazon 资源名称 (ARN) 来指定它。

  • delete-capacity-provider (AWS CLI)

    使用短名称的示例:

    aws ecs delete-capacity-provider \ --capacity-provider ExampleCapacityProvider

    使用完整 ARN 的示例:

    aws ecs delete-capacity-provider \ --capacity-provider arn:aws:ecs:us-west-2:123456789012:capacity-provider/ExampleCapacityProvider