

# Amazon Amazon ECS 启动类型和容量提供程序
<a name="capacity-launch-type-comparison"></a>

Amazon ECS 提供了两种配置工作负载容量的方法。您可以使用启动类型，也可以使用容量提供程序。启动类型包括 EC2、Fargate 和“外部”。容量提供程序针对容量管理提供了增强的灵活性和高级功能。您可以使用 Fargate 和 Fargate Spot 容量提供程序在无服务器计算环境中运行工作负载，通过自动扩缩组容量提供程序在自行管理的 EC2 实例上运行工作负载，也可以使用将 Fargate 的简便性与 EC2 计算的灵活性相结合的 Amazon ECS 托管实例容量提供程序在完全托管的计算环境中运行工作负载。容量提供程序能够更好地控制资源分配，并有助于优化性能和成本。与传统的启动类型相比，容量提供程序是配置工作负载容量的推荐方式。请使用以下内容来了解​​容量提供程序和启动类型之间的区别。

## 最佳实践
<a name="comparison-launch-types-vs-capacity-providers"></a>

最佳实践如下：

使用启动类型来定义基础设施兼容性。  
启动类型定义任务和服务在其上运行的基础设施。在定义任务时，请指定 `RequiresCompatibilities`，以包含一个或多个与任务兼容的启动类型。您可以使用以下启动类型：EC2、Fargate、“外部”和 Amazon ECS 托管实例。虽然您也可以使用启动类型来运行任务或服务，但我们建议仅使用启动类型在任务定义中定义兼容性，并使用容量提供程序来启动任务或服务。请注意，您可以选择一种或多种启动类型来定义任务的兼容性。

使用容量提供程序来配置计算容量  
启动任务或服务时，请配置一个容量提供程序策略。Amazon ECS 支持以下容量提供程序：Fargate 和 FARGATE\$1SPOT、用于自行管理 EC2 实例的自动扩缩组以及 Amazon ECS 托管实例。请注意，竞价型实例集只能作为容量提供程序使用，而不能作为启动类型使用。您可以在集群中创建一个或多个 Amazon ECS 托管实例或自动扩缩组容量提供程序。Fargate 和 Fargate Spot 容量提供程序由 Amazon ECS 在每个集群上创建和管理，您无需手动创建它们。一个集群可以同时包含所有类型的容量提供程序，但是，一个容量提供程序策略不能同时包含不同类型的容量提供程序。

更新服务的容量  
您可以简单地更新服务的容量提供程序策略，将其从一种计算类型迁移到另一种计算类型。

## 服务可变性
<a name="service-mutability"></a>

 Amazon ECS 支持在不同的容量提供程序之间更新服务。这允许：
+ 从启动类型无缝更新到容量提供程序
+ 在不同的容量提供程序类型之间转换
+ 在不重新创建服务的情况下测试不同的计算选项

下面是该流程的简要概述：

1. 更新任务定义 – 确保 `requiresCompatibilities` 包含目标容量提供程序，例如 ` MANAGED_INSTANCES`。
**注意**  
任务定义必须通过目标容量提供程序的兼容性验证。如果任务定义版本的 `requiresCompatibilities` 检查失败，则 `UpdateService` 调用也会失败。

1. 创建容量提供程序：如果您使用自定义 Amazon EC2 Auto Scaling 组，请创建容量提供程序。

1. 更新服务 – 修改服务，使其使用容量提供程序策略而不是启动类型。

1. 验证部署 – 确认任务部署成功。

1. 监控和优化 – 根据需要调整容量提供程序设置。

### 容量提供程序到容量提供程序
<a name="capacity-provider-to-capacity-provider"></a>

所有容量提供程序到容量提供程序的更新均受支持：
+ Amazon EC2 Auto Scaling 组容量提供程序到 Amazon ECS 托管实例
+ Fargate 容量提供程序到 Amazon ECS 托管实例
+ Amazon EC2 Auto Scaling 组容量提供程序到 Fargate 容量提供程序
+ Amazon ECS 托管实例到 Fargate 容量提供程序
+ Fargate 容量提供程序到 Amazon EC2 Auto Scaling 组容量提供程序
+ Amazon ECS 托管实例到 Amazon EC2 Auto Scaling 组容量提供程序

### 启动类型到容量提供程序
<a name="launch-type-to-capacity-provider"></a>

所有启动类型到容量提供程序的更新均受支持：
+ EC2 启动类型到 Amazon ECS 托管实例
+ Fargate 启动类型到 Amazon ECS 托管实例
+ EC2 启动类型到 Fargate 容量提供程序
+ EC2 启动类型到 EC2 自动扩缩组容量提供程序
+ Fargate 启动类型到 Amazon EC2 Auto Scaling 组容量提供程序
+ Fargate 启动类型到 Fargate 容量提供程序
+ 外部启动类型到 Amazon ECS 托管实例
+ 外部启动类型到 Fargate 容量提供程序
+ 外部启动类型到 Amazon EC2 Auto Scaling 组容量提供程序

### 启动类型到启动类型
<a name="launch-type-to-launch-type"></a>

启动类型到启动类型的更新不受支持：
+ EC2 启动类型到 Fargate 启动类型（请改用 Fargate 容量提供程序）
+ Fargate 启动类型到 EC2 启动类型（请改用 Amazon EC2 Auto Scaling 组容量提供程序）

无需在启动类型之间迁移，请迁移到同等容量提供程序以增强功能和未来的兼容性。

**注意**  
任务定义必须通过目标容量提供程序的兼容性验证。如果任务定义版本的 `requiresCompatibilities` 检查失败，则 `UpdateService` 调用也将失败。