Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

什么是 Amazon Elastic Container Service?

Amazon Elastic Container Service (Amazon ECS) 是一项高度可扩展的快速容器管理服务,它可轻松运行、停止和管理集群上的 Docker 容器。您可以通过使用 Fargate 启动类型启动服务或任务,将集群托管在由 Amazon ECS 管理的无服务器基础设施上。若要进行更多控制,您可以在使用 EC2 启动类型进行管理的 Amazon Elastic Compute Cloud (Amazon EC2) 实例集群上托管您的任务。有关启动类型的更多信息,请参阅 Amazon ECS 启动类型

利用 Amazon ECS,您可以通过简单的 API 调用来启动和停止基于容器的应用程序,可以从集中式服务获取集群状态,并且可以访问许多熟悉的 Amazon EC2 功能。

您可以根据资源需求、隔离策略和可用性要求使用 Amazon ECS 计划容器在集群中的放置。借助 Amazon ECS,无需操作自己的集群管理和配置管理系统,也无需担心扩展管理基础设施。

Amazon ECS 可用于创建一致的部署和构建体验、管理和扩展批处理和提取-转换-加载 (ETL) 工作负载以及在微服务模型上构建先进的应用程序架构。有关 Amazon ECS 使用案例和方案的更多信息,请参阅容器使用案例

AWS Elastic Beanstalk 还可用于快速开发、测试和部署 Docker 容器以及应用程序基础设施的其他组件;而直接使用 Amazon ECS 将提供对一系列更广泛的使用案例的更精细的控制和访问。有关更多信息,请参阅 AWS Elastic Beanstalk 开发人员指南

Amazon ECS 的功能

Amazon ECS 是一项区域服务,可在区域内的多个可用区中以高度可用的方式简化正在运行的应用程序容器。您可以在新的或现有的 VPC 中创建 Amazon ECS 集群。在集群启动并运行后,您可以定义用于指定在集群中运行的 Docker 容器映像的任务定义和服务。容器映像将在容器注册表中存储和提取,可能存在于您的 AWS 基础设施的内部或外部。

下图说明使用 Fargate 启动类型的 Amazon ECS 环境的架构:

以下部分将更详细地深入探究 Amazon ECS 基础设施的各个元素。

容器和映像

要在 Amazon ECS 上部署应用程序,必须构建应用程序组件以在容器 中运行。Docker 容器是一个软件开发的标准化单位,包含您的软件应用程序需要运行的一切:代码、运行时、系统工具、系统库等。从称为映像 的只读模板中创建容器。

映像通常通过 Dockerfile 进行构建,后者是一个纯文本文件,指定了容器中包含的所有组件。随后,这些映像将存储在注册表 中,可从该表中下载映像并在您的集群上运行映像。有关容器技术的更多信息,请参阅 Docker 基本知识

任务定义

为了准备要在 Amazon ECS 上运行的应用程序,需要创建任务定义。任务定义是一种 JSON 格式的文本文件,描述了构成应用程序的一个或多个容器 (最多为 10 个)。它可以被视为应用程序的蓝图。任务定义为您的应用程序指定各种参数。任务定义参数的示例有:要使用哪些容器,要使用哪种启动类型,应为应用程序打开哪些端口,应与任务中的容器一起使用哪些数据卷。可用于任务定义的特定参数取决于您使用的启动类型。有关创建任务定义的更多信息,请参阅 Amazon ECS 任务定义

以下是包含运行 NGINX Web 服务器的单个容器的任务定义的示例(使用 Fargate 启动类型)。有关演示在任务定义中使用多个容器的更扩展的示例,请参阅示例任务定义

{ "family": "webserver", "containerDefinitions": [ { "name": "web", "image": "nginx", "memory": "100", "cpu": "99" }, ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "memory": "512", "cpu": "256", }

任务和计划

任务 是集群内的任务定义的实例化。在为 Amazon ECS 中的应用程序创建任务定义后,您可以指定将在集群上运行的任务的数量。

每个使用 Fargate 启动类型的任务都具有自己的隔离边界,不与其他任务共享底层内核、CPU 资源、内存资源或弹性网络接口。

Amazon ECS 任务计划程序负责将任务放置到您的集群中。有多种不同的计划选项可供选择。例如,您可以定义同时运行和维护指定数量的任务的服务。有关可用的不同计划选项的更多信息,请参阅计划 Amazon ECS 任务

集群

使用 Amazon ECS 运行任务时,需要将任务放置在集群 上,这是资源的逻辑分组。当对集群中的任务使用 Fargate 启动类型时,Amazon ECS 将管理您的集群资源。

有关创建集群的更多信息,请参阅 Amazon ECS 集群

如何开始使用 Amazon ECS

如果是第一次使用 Amazon ECS,则 Amazon ECS 的 AWS 管理控制台将提供一个首次运行向导,该向导逐步指导您为 Web 服务器定义任务定义、配置服务以及启动您的首个 Fargate 任务。强烈建议之前从未使用过 Amazon ECS 的用户使用此首次运行向导。有关更多信息,请参阅 通过 Fargate 开始使用 Amazon ECS教程。

或者,您可以安装 AWS Command Line Interface (AWS CLI) 以使用 Amazon ECS。有关更多信息,请参阅Amazon ECS 的设置

Amazon ECS 可与以下 AWS 服务一起使用:

AWS Identity and Access Management

IAM 是一项 Web 服务,可帮助您安全地控制用户对 AWS 资源的访问。通过 IAM 可以控制哪些人可以使用您的 AWS 资源(身份验证)以及他们可以使用的资源和采用的方式(授权)。在 Amazon ECS 中,IAM 可用于控制容器实例级别的访问(使用 IAM 角色)以及任务级别的访问(使用 IAM 任务角色)。有关更多信息,请参阅Amazon ECS IAM 策略、角色和权限

Amazon EC2 Auto Scaling

Auto Scaling 是一项 Web 服务,使您能够根据用户定义的策略、运行状况检查和时间表自动扩展或缩减任务。您可以对服务内的 Fargate 任务使用 Auto Scaling,从而根据多个指标进行扩展。有关更多信息,请参阅 服务 Auto Scaling

Elastic Load Balancing

Elastic Load Balancing 在 Amazon ECS 服务中的任务间自动分配应用程序的传入流量。它可以让您实现更高水平的应用程序容错性能,同时持续提供分配应用程序流量所需的负载均衡容量。您可以使用 Elastic Load Balancing 创建一个使集群中的服务流量达到均衡的终端节点。有关更多信息,请参阅 服务负载均衡

Amazon Elastic Container Registry

Amazon ECR 是一项托管 AWS Docker 注册表服务,安全、可扩展且可靠。通过使用 IAM,Amazon ECR 支持具有基于资源的权限的私有 Docker 存储库,以便特定用户或任务可以访问存储库和映像。开发人员可以使用 Docker CLI 推送、拉取和管理映像。有关更多信息,请参见 Amazon Elastic Container Registry 用户指南

AWS CloudFormation

AWS CloudFormation 向开发人员和系统管理员提供了一种简便地创建和管理一批相关的 AWS 资源的方法,并通过有序且可预测的方式对其进行预置和更新。您可以在 AWS CloudFormation 脚本中将集群、任务定义和服务定义为实体。有关更多信息,请参阅 AWS CloudFormation 模板参考

访问 Amazon ECS

您可以通过以下方式使用 Amazon ECS:

AWS 管理控制台

此控制台是用于管理 Amazon ECS 资源的基于浏览器的界面。有关指导您使用控制台的教程,请参阅 通过 Fargate 开始使用 Amazon ECS

AWS 命令行工具

您可以使用 AWS 命令行工具在系统的命令行上发出命令以执行 Amazon ECS 和 AWS 任务;这比使用控制台更快且更方便。命令行工具也非常适用于构建执行 AWS 任务的脚本。

AWS 提供两组命令行工具:AWS Command Line Interface (AWS CLI) 和 适用于 Windows PowerShell 的 AWS 工具。有关更多信息,请参阅 AWS Command Line Interface 用户指南适用于 Windows PowerShell 的 AWS 工具 用户指南

Amazon ECS CLI

除了使用 AWS CLI 访问 Amazon ECS 资源外,您还可以使用 Amazon ECS CLI,它提供一些高级命令,可用于简化通过 Docker Compose 从本地开发环境创建、更新和监控集群和任务的过程。有关更多信息,请参阅使用 Amazon ECS 命令行界面

AWS 软件开发工具包

此外,我们还提供了软件开发工具包,这些软件开发工具包可让您通过一系列编程语言访问 Amazon ECS。软件开发工具包自动处理以下任务,如:

  • 使用密码对服务请求签名

  • 重试请求

  • 处理错误响应

有关可用软件开发工具包的更多信息,请参阅适用于 Amazon Web Services 的工具