

# 为 Amazon EC2 工作负载创建 Amazon ECS 集群
<a name="create-ec2-cluster-console-v2"></a>

创建一个集群来定义要在其上运行任务和服务的基础设施。

开始之前，请确保您已完成 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中的步骤，然后分配相应的 IAM 权限。有关更多信息，请参阅 [Amazon ECS 集群示例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。Amazon ECS 控制台提供了一种简单的方法，通过创建 CloudFormation 堆栈来创建 Amazon ECS 集群所需的资源。

为了使集群创建过程尽可能简单，控制台对许多选项进行了原定设置选择，我们将在下面介绍这些选项。控制台中的大多数部分还提供了帮助面板，以提供进一步的上下文。

您可以在创建集群时注册 Amazon EC2 实例，也可以在创建集群后向集群注册其他实例。

您可以修改以下默认选项：
+ 更改您的实例启动所在的子网。
+ 更改用于控制到容器实例的流量的安全组。
+ 将命名空间添加到集群。

  命名空间允许您在集群中创建的服务无需额外配置即可连接到命名空间中的其他服务。有关更多信息，请参阅 [互连 Amazon ECS 服务](interconnecting-services.md)。
+ 启用任务事件以接收 EventBridge 任务状态更改通知。
+ 为托管存储分配 AWS KMS 密钥。有关如何创建密钥的信息，请参阅《*AWS Key Management Service 用户指南*》中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 为您的 Fargate 临时存储空间分配一个 AWS KMS 密钥。有关如何创建密钥的信息，请参阅《*AWS Key Management Service 用户指南*》中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 为 ECS Exec 配置 AWS KMS 密钥和日志记录。
+ 添加标签以帮助您识别集群。

## 自动扩缩组选项
<a name="capacity-providers"></a>

当您使用 Amazon EC2 实例时，必须指定 自动扩缩组来管理运行任务和服务所在的基础设施。

当您选择创建新的 自动扩缩组时，系统会为以下行为自动配置该组：
+ Amazon ECS 管理自动扩缩组的横向缩减和横向扩展操作。
+ Amazon ECS 将防止包含任务且位于 自动扩缩组中的 Amazon EC2 实例在横向缩减过程中终止。有关更多信息，请参阅 *AWS Auto Scaling 用户指南*中的[实例保护](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html#instance-protection)。

您可以配置以下 自动扩缩组属性，这些属性决定组要启动的实例的类型和数量：
+ 经 Amazon ECS 优化的 AMI。
+ 实例类型。
+ 连接到实例时，可证明您的身份的 SSH 密钥对。有关如何创建 SSH 密钥的信息，请参阅《Amazon EC2 用户指南》中的 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)**。
+ 为 自动扩缩组启动的实例的最小数量。
+ 为 自动扩缩组启动的实例数的最大数量。

  为了使组横向扩展，最大值必须大于 0。

Amazon ECS 将代表您创建一个 Amazon EC2 Auto Scaling 启动模板和自动扩缩组，作为 CloudFormation 堆栈的一部分。您为 AMI、实例类型和 SSH 键对指定的值是启动模板的一部分。这些模板的前缀是 `EC2ContainerService-<ClusterName>`，这使得它们很容易识别。自动扩缩组的前缀是 `<ClusterName>-ECS-Infra-ECSAutoScalingGroup`。

为 自动扩缩组启动的实例使用启动模板。

## 联网选项
<a name="networking-options"></a>

默认情况下，实例会启动到该区域的默认子网中。使用当前与子网关联的安全组，而这些安全组会控制您的容器实例的流量。您可以对实例的子网和安全组进行更改。

您可以选择现有子网。您可以使用现有的安全组，也可以创建一个新的安全组。要在仅 IPv6 配置中创建任务，请使用仅包含 IPv6 CIDR 数据块的子网。

创建新的安全组时，至少需要指定一条入站规则。

入站规则会确定哪些流量可以到达您的容器实例，并包括以下属性：
+ 要允许的协议
+ 允许的端口范围
+ 入站流量（来源）

要允许来自特定地址或 CIDR 数据块的入站流量，请对带有允许的 CIDR 的**来源**使用**自定义**。

要允许来自所有目的地的入站流量，请使用 **Anywhere** 作为**来源**。这将自动添加 0.0.0.0/0 IPv4 CIDR 数据块和 ::/0 IPv6 CIDR 数据块。

要允许来自本地计算机的入站流量，请使用**来源组**作为**来源**。这会自动将您的本地计算机的当前 IP 地址添加为允许的来源。

**要创建新集群（Amazon ECS 控制台）**

在开始之前，分配相应的 IAM 权限。有关更多信息，请参阅 [Amazon ECS 集群示例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 从导航栏中，选择要使用的区域。

1. 在导航窗格中，选择**集群**。

1. 在 **Clusters**（集群）页面上，选择 **Create cluster**（创建集群）。

1. 在**集群配置**下，配置以下内容：
   + 对于**集群名称**，输入唯一的名称。

     该名称最多可以包含 255 个字母（大小写字母）、数字和连字符。
   + （可选）要使 Service Connect 使用的命名空间与集群名称不同，请在 **Service Connect 默认值**下的**默认命名空间**中选择或输入命名空间名称。要使用共享的命名空间，请选择或输入命名空间 ARN。有关如何使用共享命名空间的更多信息，请参阅 [使用共享 AWS Cloud Map 命名空间的 Amazon ECS Service Connect](service-connect-shared-namespaces.md)。

1. 向集群添加 Amazon EC2 实例，展开**基础设施**，然后选择 **Fargate 和自行管理的实例**。

   接下来，配置充当容量提供程序的 自动扩缩组：

   1. 要使用现有 自动扩缩组，请从 **自动扩缩组（ASG）**（自动扩缩组（ASG））中，选择组。

   1. 要创建 自动扩缩组，请从 **自动扩缩组（ASG）**（自动扩缩组（ASG））中，选择 **Create new group**（创建新组），然后提供有关组的以下详细信息：
      + 对于**预置模型**，选择使用**按需型**实例还是**竞价型**实例。
      + 如果您选择使用竞价型实例，则对于**分配策略**，请选择哪些 Spot 容量池（实例类型和可用区）用于该实例。

        对于大多数工作负载，您可以选择**价格容量优化**。

        有关更多信息，请参阅《Amazon EC2 用户指南**》中的[竞价型实例的分配策略](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html)。
      + 对于**容器实例亚马逊机器映像（AMI）**，选择用于自动扩缩组实例的 Amazon ECS 优化型 AMI。
      + 对于 **EC2 instance type**（EC2 实例类型），选择工作负载的实例类型。

         如果 自动扩缩组使用相同或相似的实例类型，则托管扩展效果最佳。
      + 对于 **EC2 实例角色**，请选择现有的容器实例角色，也可以创建一个新的容器实例角色。

        有关更多信息，请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。
      + 对于 **Capacity**（容量），输入 自动扩缩组中启动的实例数的最小值和最大值。
      + 对于 **SSH key pair**（SSH 密钥对），连接到实例时，选择可证明您身份的密钥对。
      + 要允许更大的图像和存储空间，请在**根 EBS 卷大小**中输入以 GiB 为单位的值。

1. （可选）要更改 VPC 和子网，请在 **Amazon EC2 实例的联网**下，执行以下任一操作：
   + 要删除子网，请在 **Subnets**（子网）下，为您要删除的每个子网选择 **X**。
   + 要更改为**默认** VPC 以外的 VPC，请在 **VPC** 下，选择现有的 **VPC**，然后在**子网**下选择子网。对于仅 IPv6 配置，请选择具有 IPv6 CIDR 数据块的 VPC 以及只有 IPv6 CIDR 数据块的子网。
   + 选择安全组。在**安全组**下，选择下列选项之一：
     + 要选择现有安全组，请选择**使用现有安全组**，然后选择安全组。
     + 要创建安全组，请选择**创建新安全组**。然后为每条入站规则选择**添加规则**。

       有关入站规则的信息，请参阅 [联网选项](#networking-options)。
   + 要自动分配公有 IP 地址到您的 Amazon EC2 容器实例，请为**自动分配公有 IP** 选择以下选项之一：
     + **使用子网设置** – 当实例启动所在的子网是公有子网时，为实例分配公有 IP 地址。
     + **开启** – 为实例分配公有 IP 地址。

1. （可选）使用 Container Insights 时，请展开**监控**，然后选择下列选项之一：
   + 要按照建议使用具有增强型可观测性的 Container Insights，请选择**具有增强型可观测性的 Container Insights**。
   + 要使用 Container Insights，请选择 **Container Insights**。

1. （可选）要启用任务事件，请展开**任务事件**，然后开启**启用任务事件**。

   启用任务事件后，Amazon ECS 会将任务状态更改事件发送到 EventBridge。这样，您就可以自动监控和响应任务生命周期更改。

1. （可选）要使用 ECS Exec 调试集群中的任务，请展开**问题排查配置**，然后配置以下内容：
   + （可选）对于 **ECS Exec 的 AWS KMS 密钥**，请输入要用于加密 ECS Exec 会话数据的 AWS KMS 密钥的 ARN。
   + （可选）对于 **ECS Exec 日志记录**，请选择日志目的地：
     + 要向 CloudWatch Logs 发送日志，请选择 **Amazon CloudWatch**。
     + 要将日志发送到 Amazon S3，请选择 **Amazon S3**。
     + 要禁用日志记录，请选择**无**。

1. （可选）

   如果您使用带手动选项的运行时监控，并且希望由 GuardDuty 监视此集群，则请选择**添加标签**并执行以下操作：
   + 对于**键**，输入 **guardDutyRuntimeMonitoringManaged**
   + 对于**值**，请输入 **true**。

1. （可选）加密托管存储上的数据。在**加密**下，对于**托管存储**，输入要用于加密托管存储数据的 AWS KMS 密钥的 ARN。

1. （可选）要管理集群标签，请展开**标签**，然后执行以下操作之一：

   [添加标签] 选择 **Add tag**（添加标签），然后执行以下操作：
   + 对于 **Key**（键），输入键名称。
   + 对于**值**，输入键值。

   [删除标签] 选择标签的“键”和“值”右侧的**Remove**（删除）。

1. 选择**创建**。

## 后续步骤
<a name="ec2-cluster-next-steps"></a>

创建集群后，您可以针对应用程序创建任务定义，然后将其作为独立任务或服务的一部分运行。有关更多信息，请参阅下列内容：
+ [Amazon ECS 任务定义](task_definitions.md)
+ [将应用程序作为 Amazon ECS 任务运行](standalone-task-create.md)
+ [创建 Amazon ECS 滚动更新部署](create-service-console-v2.md)