Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

教程:通过 CloudWatch 警报扩展容器实例

以下过程帮助您为 Amazon ECS 集群创建一个可通过 CloudWatch 警报向上扩展(和向下扩展)的 Auto Scaling 组。

根据您在集群中使用的 Amazon EC2 实例类型和每个集群中的容器实例数,您的任务在运行时可使用的资源是有限的。ECS 监控集群中可用的资源以便与计划程序一起来放置任务。如果您的集群缺少任何这些资源(例如内存),您最终将无法启动更多任务,直到您添加更多容器实例、减少服务中所需的任务数或停止集群中的一些正在运行的任务以释放受限制的资源。

在本教程中,您将使用 MemoryReservation 指标为集群创建一个 CloudWatch 警报。当集群的内存预留上升到 75% 以上(这意味着,集群中仅 25% 的内存可用于要预留的新任务)时,警报将触发 Auto Scaling 组添加另一个实例并为您的任务和服务提供更多资源。

先决条件

本指南假定您已为集群和服务启用 CloudWatch 指标。在集群和服务将指标发送到 CloudWatch 之前,指标不可用,并且您无法为不存在的指标创建 CloudWatch 警报。

您的 Amazon ECS 容器实例需要至少 1.4.0 版的容器代理才能启用 CloudWatch 指标。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

您的 Amazon ECS 容器实例还需要对您用来启动容器实例的 IAM 角色的 ecs:StartTelemetrySession 权限。如果您在 CloudWatch 指标可用于 Amazon ECS 之前已创建您的 Amazon ECS 容器实例,则可能需要添加此权限。有关检查您的 Amazon ECS 容器实例角色并为容器实例附加托管 IAM 策略的信息,请参阅在 IAM 控制台中检查 ecsInstanceRole

步骤 1:为指标创建 CloudWatch 警报

为集群和服务启用 CloudWatch 指标并且 CloudWatch 控制台中显示集群的指标后,您可以在这些指标上设置警报。有关更多信息,请参阅 Amazon CloudWatch 用户指南 中的创建 Amazon CloudWatch 警报

对于本教程,您将在集群 MemoryReservation 指标上创建警报,以便在集群的内存预留高于 75% 时发出提醒。

在指标上创建 CloudWatch 警报

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在左侧导航窗格上,选择 Alarms

  3. 选择 Create Alarm

  4. CloudWatch Metrics by Category 部分中,选择 ECS > ClusterName

  5. Modify Alarm 页面上,选择默认集群的 MemoryReservation 指标,然后选择 Next

  6. Alarm Threshold 部分中,为您的警报输入名称和描述。

    • 名称:memory-above-75-pct

    • 说明:Cluster memory reservation above 75%

  7. 将阈值和时间段要求设置为大于 1 个周期的 75% 的 MemoryReservation

     CloudWatch 警报阈值
  8. (可选)配置在触发警报时发送的通知。如果您现在不想配置通知,也可以选择删除通知。

  9. 选择 Create Alarm。现在,您可以使用此警报触发您的 Auto Scaling 组以在内存预留高于 75% 时添加容器实例。

  10. (可选)您也可以创建另一个在内存预留低于 25% 时触发的警报,您可使用该警报来删除 Auto Scaling 组中的容器实例。

步骤 2:为 Auto Scaling 组创建启动配置

现在,您已启用 CloudWatch 指标,并且已创建基于这些指标之一的警报,您可以为集群创建一个启动配置和一个 Auto Scaling 组。有关更多信息和其他配置选项,请参阅 Auto Scaling 用户指南

创建 Auto Scaling 启动配置

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

  2. 在左侧导航窗格上,选择 Auto Scaling Groups

  3. Welcome to Auto Scaling 页面上,选择 Create Auto Scaling Group

  4. Create Auto Scaling Group 页面上,选择 Create launch configuration

  5. Create Auto Scaling Group 向导的 Choose AMI 步骤中,选择 Community AMIs

  6. 为 Auto Scaling 组选择经 ECS 优化的 AMI。

    要使用经 Amazon ECS 优化的 AMI,请在 Search community AMIs 字段中键入 amazon-ecs-optimized 并按 Enter 键。选择 amzn-ami-2017.03.g-amazon-ecs-optimized AMI 旁边的 Select。下面按区域列出了当前经 Amazon ECS 优化的 AMI ID 以供参考。

    区域 AMI 名称 AMI ID EC2 控制台链接
    cn-north-1 amzn-ami-2017.03.g-amazon-ecs-optimized ami-dba87bb6 启动实例
  7. Create Auto Scaling Group 向导的 Choose Instance Type 步骤中,为您的 Auto Scaling 组选择一个实例类型,然后选择 Next: Configure details

  8. Create Auto Scaling Group 向导的 Configure details 步骤中,输入以下信息。其他字段是可选的。有关更多信息,请参阅 Auto Scaling 用户指南 中的创建启动配置

    • Name:为您的启动配置输入名称。

    • IAM role:为您的容器实例选择 ecsInstanceRole。如果您没有配置此角色,请参阅 Amazon ECS 容器实例 IAM 角色

    • IP Address Type:选择要用于容器实例的 IP 地址类型选项。如果您希望外部流量能够进入您的容器,请选择 Assign a public IP address to every instance

  9. (可选)如果您有要与 EC2 用户数据一起传递到容器实例的配置信息,请选择 Advanced Details 并在 User data 字段中输入您的用户数据。有关更多信息,请参阅 Amazon ECS 容器代理配置

  10. 选择 Next: Add Storage

  11. Create Auto Scaling Group 向导的 Add Storage 步骤中,对您的实例进行所需的任何存储配置更改,然后选择 Next: Configure Security Group

  12. Create Auto Scaling Group 向导的 Configure Security Group 步骤中,选择符合容器需求的现有安全组,或创建新的安全组并选择 Review

  13. 查看启动配置并选择 Create launch configuration

  14. 选择要用于通过 SSH 连接到实例的私有密钥,然后选择 Create launch configuration 以完成操作,然后继续使用新启动配置创建 Auto Scaling 组。

步骤 3:为集群创建 Auto Scaling 组

在启动配置完成后,请继续以下过程来创建使用启动配置的 Auto Scaling 组。

创建 Auto Scaling 组

  1. Create Auto Scaling Group 向导的 Configure Auto Scaling group details 步骤中,输入以下信息并选择 Next: Configure scaling policies

    • Group name:输入 Auto Scaling 组的名称。

    • Group size:指定 Auto Scaling 组最初拥有的容器实例数。

    • Network:选在要在其中启动容器实例的 VPC。

    • Subnet:选择您希望在其中启动容器实例的子网。对于高可用性集群,建议您启用区域中的所有子网。

  2. Create Auto Scaling Group 向导的 Configure scaling policies 步骤中,选择 Use scaling policies to adjust the capacity of this group

  3. 输入 Auto Scaling 组的最小容器实例数和最大容器实例数。

  4. Increase Group Size 部分中,输入以下信息。

    • Execute policy when: 选择您之前配置的 memory-above-75-pct CloudWatch 警报。

    • Take the action: 输入您想在触发警报时添加到集群的实例数。

  5. 如果您配置了一个警报来触发组大小减小,请在 Decrease Group Size 部分中设置该警报,并指定触发该警报时删除的实例数。否则,请单击 Decrease Group Size 部分右上角的 X 来折叠该部分。

    注意

    如果您将 Auto Scaling 组配置为删除容器实例,则任何正在已删除容器实例上运行的任务都将终止。在任务正在作为服务的一部分运行的情况下,如果所需资源(CPU、内存、端口)可用,则 Amazon ECS 将在另一个实例上重新启动这些任务;但是,手动启动的任务将不会自动重启。

  6. 选择 Review 查看您的 Auto Scaling 组,然后选择 Create Auto Scaling Group 完成操作。

步骤 4:验证和测试 Auto Scaling 组

现在,您已创建 Auto Scaling 组,您应能够在 Amazon EC2 控制台 Instances 页面上看到实例正在启动。这些实例启动后也将注册到 Amazon ECS 集群中。

要测试您的 Auto Scaling 组是否已正确配置,您可以创建一些使用大量内存的任务并开始在集群中启动它们。您的集群在指定的时间段内超过了 CloudWatch 警报中的 75% 内存预留后,您将在 EC2 控制台中看到一个新的实例启动。

步骤 5:清理

完成本教程后,您可以选择在服务中为集群保留 Auto Scaling 组和 Amazon EC2 实例。但是,如果您没有主动使用这些资源,则应考虑将其清除以免您的账户产生不必要的费用。您可以删除 Auto Scaling 组以从其内部终止 Amazon EC2 实例,但您的启动配置将保持不变,并且您可以选择稍后使用该启动配置创建新的 Auto Scaling 组。

删除 Auto Scaling 组

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

  2. 在左侧导航窗格上,选择 Auto Scaling Groups

  3. 选择您为本教程创建的 Auto Scaling 组。

  4. 选择 Actions,然后选择 Delete

  5. 选择 Yes, Delete 以删除 Auto Scaling 组。