Amazon ECS 常见问题

一般性问题

Amazon ECS 是一项完全托管的固定容器编排服务,它为组织提供了在 AWS、传统的 Amazon Elastic Cloud Compute(EC2)实例或使用 AWS Fargate 的无服务器计算面板上构建、部署和管理任何规模的容器化应用程序的最简单方法。Amazon ECS 是一项完全托管且无版本概念的服务,提供工具和内置支持,可协助用户在 AWS 上轻松构建和运行容器化应用程序。例如,Amazon ECS Service Connect 可简化服务发现、连接和流量可观测性,而 Amazon CloudWatch Container Insights 则可以收集、聚合和汇总指标和日志。使用 Amazon ECS,您无需预置或扩展服务器或集群,也不必选择要在容器上运行的服务器类型或优化集群打包。您可以通过指定 CPU 和内存需求、联网和 IAM policy 以及启动类型和数据量来控制容器的操作属性。只需进行简单的 API 调用,您便可以启动和停止支持容器的应用程序,查询集群的完整状态,使用各种熟悉的功能,包括安全组、弹性负载均衡(ELB)、Amazon Elastic Block Store(EBS)卷和 Identity Access Management(IAM)角色。您可以使用 Amazon ECS 根据您的资源需求和可用性要求在您的集群中安排容器的置放。

Amazon ECS 是一项完全托管的容器编排服务,让您能够轻松使用容器部署和管理长时间运行的应用程序、服务和批处理流程,而无需安装、操作和扩展自己的集群管理基础设施。Amazon ECS 可以维持应用程序的可用性,让您根据应用程序的容量需求来对容器进行扩展。将 Amazon ECS 与 AWS Fargate 结合使用,无需预置、管理或扩展计算基础设施即可部署应用程序,从而缩短成功构建、部署或迁移容器化应用程序所需的时间。此外,Amazon ECS 还集成了熟悉的功能,例如 ELB、Amazon Virtual Private Cloud(VPC)、IAM、应用程序自动扩缩、Amazon CloudWatchAmazon Elastic File System(EFS),这意味着您无需构建或维护通用抽象。

Amazon ECS 是一项完全托管的固定容器编排服务,可协助组织轻松构建、部署和管理任意规模的容器化应用程序。Amazon ECS 是一项完全托管且无版本概念的服务,提供工具和内置支持,可协助用户在 AWS 上轻松构建和运行容器化应用程序。例如,使用 Amazon ECS,您无需预置或扩展服务器或集群,也不需要选择希望容器运行的服务器类型或优化集群打包。您可以通过指定 CPU 和内存需求、联网和 IAM policy、计算平台(AWS Fargate 或 Amazon EC2)和数据量来控制容器的操作属性。 

将 Amazon ECS 与 AWS Fargate 结合使用,还可以实现无服务器编排。如此一来,您将可以更充分地借助 AWS 的卓越运营能力,对容器化工作负载进行扩展并确保其可用性与安全性。如果您想在不进行任何重构的情况下对基于容器的应用程序进行现代化改造,但仍想享受无服务器计算提供的扩展性、敏捷性和成本等诸多优势,那么与 AWS Fargate 相结合的 Amazon ECS 是理想的计算选择。

Amazon ECS Service Connect 可简化服务发现、连接和流量可观测性,而 Amazon ECS CloudWatch Container Insights 则可以收集、聚合和汇总指标和日志。如果您希望更好地控制应用程序的运行特征,则可以使用 Amazon EC2 上的 Amazon ECS 以及 Amazon ECS Anywhere,以便在基础设施上运行容器工作负载。总的来说,AWS Fargate 上的 Amazon ECS、Amazon EC2 上的 Amazon ECS 和 Amazon ECS Anywhere 使您能够以相同的体验和工具运行各种应用程序。有鉴于此,所有新的 AWS 容器客户中有超过 65% 使用 Amazon ECS。

借助 AWS,您可以选择全面的无服务器计算选项,包括与 AWS Fargate 相结合的 Amazon ECS 以及 AWS Lambda,后者是一种无服务器计算服务,可通过事件驱动型架构(EDA)运行您的代码以响应事件,并自动为您管理底层计算资源。您可以根据自己的应用场景使用这些计算选项中的一个或多个。无论是与 AWS Fargate 相结合的 Amazon ECS 还是 AWS Lambda,AWS 无服务器选择都能提供无服务器计算所提供的扩展性、敏捷性和成本优势。

使用 Amazon ECS 不收取任何额外费用。您只需为您创建的用于存储和运行应用程序的 AWS 资源(例如 Amazon EC2 实例、AWS Fargate 资源或 Amazon EBS 卷)付费。您只需按您的实际用量付费;既没有最低费用,也无需预付费。Amazon ECS 有两种不同的收费模式。AWS Outposts 上的 Amazon ECS 采用与 Amazon EC2 启动类型相同的模式。 

  • Amazon EC2 启动类型模型:Amazon EC2 启动类型不收取额外费用。您只需为您创建的用于存储和运行应用程序的 AWS 资源(例如 Amazon EC2 实例或 Amazon EBS 卷)付费。您只需按您的实际用量付费;既没有最低费用,也无需预付费。请参阅 Amazon EC2 定价页面中的详细定价信息。
  • AWS Fargate 启动类型模型:使用 AWS Fargate,您只需为容器化应用程序请求的 vCPU 和内存资源量付费。vCPU 和内存资源量从拉取您的容器映像时开始计算,到 Amazon ECS 任务终止时停止计算,向上舍入到秒。最低收费标准为 1 分钟。请参阅 AWS Fargate 定价页面中的详细定价信息。

Amazon ECS 是一项高度可扩展的容器编排服务,让您可以运行和管理在容器中运行的分布式应用程序。AWS Lambda 是一项事件驱动型任务计算服务,在响应数据更改、网站点击或来自其他 AWS 服务的消息等“事件”时运行您的代码,无需您管理任何计算基础设施。 许多应用程序在生产中同时使用这两种结构,并且客户经常使用这两种结构,以利用它们各自的优势。

使用 Amazon ECS

请访问我们的入门页面,了解有关如何开始使用 Amazon ECS 的更多信息。 无论您是刚刚接触 Amazon ECS 还是已经在计划用例,都可以选择自己的路径并按照精心策划的学习步骤来开始学习。

现代应用程序(比如微服务)架构建议将您的应用程序拆分为各个单元,而 Amazon ECS 已针对这种模式进行了优化。 任务是 Amazon ECS 中最小的计算单位,允许您定义一组要放置在一起的容器、容器的属性以及容器的链接方式。任务中包含 Amazon ECS 确定如何放置所需的所有信息。要启动单个容器,您的任务定义中应该只包含一个容器定义。

可以。Amazon ECS 服务计划程序可以管理长期运行的应用程序和服务。使用服务计划程序,您可以维持应用程序的可用性,并且根据应用程序的容量要求来扩展或缩小容器。服务计划程序让您可以使用 ELB 在各个容器间分配流量。Amazon ECS 将自动从关联的负载均衡器注册和注销容器。服务计划程序还将自动恢复运行状况不佳(例如 ELB 运行状况检查失败)或停止运行的容器,保证正常运行的容器达到所需数量,以便支持您的应用程序。

通过改变您希望服务运行的容器的数量,可以扩展或缩小应用程序的规模。改变应用程序的定义或使用新的映像可以更新应用程序。计划程序将自动启动使用新定义的新容器并停止运行之前版本的容器(如果使用 ELB,则会等待 ELB 连接耗尽)。

部署到 Amazon ECS 的应用程序和微服务利用应用程序自动扩缩服务,根据观察到的指标数据自动扩展。Amazon ECS 根据属于服务的任务所消耗的 CPU 和内存资源来衡量服务利用率,并使用此数据发布 CloudWatch 指标,即 ECSServiceAverageCPUUtilization 和 ECSServiceAverageMemoryUtilization。应用程序自动扩缩服务可以将这些预定义的指标与扩展策略结合使用,按比例扩展服务中的任务数量。此外,在某些使用场景中,仅凭服务的平均 CPU 和内存使用率并不能可靠地指示何时以及在多大程度上执行扩展操作。为此,应用程序自动扩缩服务还支持根据自定义指标规范扩展服务,该规范代表我们选择的 CloudWatch 指标,该指标可能更合适。这包括跟踪应用程序其他方面(例如收到的 HTTP 请求数、从队列/主题检索的消息数量以及数据库事务数量)的指标。现在,您可以使用自己选择的 CloudWatch 指标或 Prometheus 指标

要了解更多信息,请访问:根据自定义 CloudWatch 和 Prometheus 指标自动扩缩 Amazon ECS 服务

Amazon ECS 使您能够在不同的计算选项中,以相同的体验和工具运行各种应用程序:

  • AWS Fargate:AWS Fargate 是一款无服务器、按实际使用量付费的计算引擎。它消除了服务器预置、集群管理和编排的负担。Amazon ECS 使用 AWS Fargate 预置的容器对您的容器进行自动扩展、负载均衡和计划管理工作以便保证可用性,让您可以更轻松地构建和运行容器化应用程序。
  • Amazon EC2:通过 EC2 上的 Amazon on ECS,您可以拥有 EC2 实例,并且可以完全控制基础设施管理的各个方面。例如,您可以选择特定的 EC2 实例类型或自定义底层操作系统。您可以使用自动扩缩组容量提供程序来管理 EC2 实例的扩展。
  • 本地虚拟机(VM)或服务器:
    • Amazon ECS Anywhere 支持将本地服务器或虚拟机(VM)等外部实例注册到您的 Amazon ECS 集群。 
    • 容量可以位于以下任一 AWS 资源中:    
      • 可用区
      • 本地扩展区
      • Wavelength 区域
      • AWS 区域
      • AWS Outposts

可以。Amazon ECS 支持自动扩缩 AWS Fargate 和 Amazon EC2 的计算基础设施,因此您可以专注于构建和扩展应用程序,而不是底层基础设施。

与 AWS Fargate 相结合的 Amazon ECS 可为您提供无服务器体验,因为 AWS Fargate 会自动预预置、扩展和更新应用程序所需的计算基础设施。

对于需要 Amazon EC2 容量的应用程序,Amazon ECS 提供了自动扩缩组容量提供程序,这些提供程序可以根据应用程序的容量要求自动扩缩 Amazon EC2 实例。您可以使用所需的 Amazon EC2 实例类型、亚马逊机器映像(AMI)、网络设置等配置创建 Amazon EC2 Auto Scaling 组(ASG),并创建容量提供程序,根据应用程序的计划需求和负载自动扩缩该 ASG 中的 Amazon EC2 实例。根据任务负载管理 ASG 的缩减和扩展操作。

Amazon ECS 容量提供程序可以通过其定义应用程序容量需求的接口。借助容量提供程序,您可以就应用程序如何在不同类型的计算容量上运行定义灵活的规则,并管理容量的扩展。容量提供程序可与 Amazon EC2 和 AWS Fargate 结合使用。Amazon ECS 为每个集群的 AWS Fargate 和 Fargate-Spot 容量提供预定义的容量提供程序。对于 Amazon EC2,您可以创建自己的 ASG 容量提供程序来管理 Amazon EC2 Auto Scaling 组的扩缩。在运行 Amazon ECS 任务和服务时,您可以将它们拆分到多个容量提供程序中(例如,按预定义百分比拆分 AWS Fargate 和 Fargate Spot 容量)以运行服务。

可以。您可以使用 Amazon ECS Run 任务一次运行一个或多个任务。运行任务在符合任务要求(包括 CPU、内存和端口要求)的实例中开始任务。 您还可以使用 AWS Batch 在 Amazon ECS 上规划、安排和执行批量计算工作负载,这样您就可以专注于分析结果和解决问题。 

可以。您可以使用满足 Amazon ECS AMI 规范的任何 AMI。我们建议先从支持 Amazon ECS 的 Amazon Linux AMI 开始用起。兼容 Amazon ECS 的合作伙伴 AMI 也可以使用。您可以查阅相关文档了解 Amazon ECS AMI 规范的情况。

Amazon ECR 与 Amazon ECS 集成,让您能够轻松地存储、运行和管理在 Amazon ECS 上运行的应用程序的容器映像。为此,您只需在您的任务定义中指定 Amazon ECR 存储库,然后将 AmazonEC2ContainerServiceforEC2Role 附加至您的实例即可。Amazon ECS 将为您的应用程序取得相应的映像。

AWS Fargate 提供无服务器计算,可通过 Amazon ECS 运行容器。客户可以通过 AWS Fargate 启动其容器,而无需预置或管理 Amazon EC2 实例。AWS Fargate 是在 AWS 上启动和运行容器的最易用的工具。如果客户需要加强对 EC2 实例的控制,以便满足合规和监管要求或支持更多的自定义选项,则可以选择将 Amazon ECS 与 Amazon EC2 实例结合使用。

Amazon ECS 支持 Docker 联网,并通过与 Amazon VPC 集成为容器提供隔离。这使您能够控制容器与其他服务和外部流量的连接方式。借助 Amazon ECS,您可以在容器的四种联网模式之间进行选择以满足不同的使用案例:

  • VPC 模式:此模式为每个正在运行的 Amazon ECS 任务分配一个专用弹性网络接口,可允许容器在 VPC 中具有完整的联网功能,如同 Amazon EC2 实例一样。
  • 桥接模式:此模式创建一个可连接本地虚拟网络中的主机上运行的所有容器的 Linux 桥,可通过主机的默认网络连接访问此 Linux 桥。
  • 主机模式:此模式直接将容器添加到主机的网络堆栈,在无隔离的主机网络中公开容器。
  • 无:在此模式下,容器无法进行外部联网。
  • 服务连接:Amazon ECS Service Connect 简化了 Amazon ECS 的服务发现、连接和流量可观测性。这让您得以专注于应用程序代码而不是网络基础设施,从而帮助您更快地构建应用程序。您可以使用 Amazon ECS Service Connect 为服务端点定义逻辑名称,并在客户端应用程序中使用这些逻辑名称连接到依赖项。Amazon ECS Service Connect 可帮助您将流量发送至运行正常的端点,并在 Amazon ECS 控制台和 Amazon CloudWatch 中提供丰富的流量遥测。Amazon ECS Service Connect 让原生 Amazon ECS 部署变得更加可靠,因为它支持自动连接耗尽,这将有助于您的客户端应用程序切换到新版本的服务端点,而不会遇到流量错误。借助 Amazon ECS Service Connect,您可以:
    • 仅需一步便可设置客户端应用程序连接到其依赖项的方式
    • 通过逻辑名称编写和操作弹性分布式应用程序
    • 监控和分配 Amazon ECS 任务之间的流量,而无需部署和配置负载均衡器
    • 更快地部署服务,并且与包含应用程序的 Amazon ECS 微服务无缝集成
  • 服务发现:Amazon ECS 与 AWS Cloud Map 集成,使您的容器化服务可以彼此轻松发现并相互连接。AWS Cloud Map 是一项云资源发现服务,您可以使用它为应用程序资源定义自定义名称。这项服务可以提高应用程序的可用性,因为您的 Web 服务始终会发现这些动态变化资源的最新位置。
  • 监控
    • 您可以使用 Amazon CloudWatch 监控您的 Amazon ECS 资源,前者可收集来自 Amazon ECS 的原始数据并将其处理为可读的近实时指标。这些统计数据会记录两周,这使您能够访问历史信息并更好地了解集群或服务的性能。此功能无需额外付费。要了解更多信息,请访问 Amazon ECS CloudWatch 指标
    • 要获得增强的指标,请使用 CloudWatch Container Insights 收集、汇总和总结来自容器化应用程序和微服务的指标和日志,这些指标和日志可用于在 Amazon EC2 和 AWS Fargate 上运行的 Amazon ECS 集群。CloudWatch 会自动收集许多资源的指标,例如 CPU、内存、磁盘和网络。Container Insights 还提供诊断信息(例如容器重启故障),以帮助您隔离并快速解决问题。对于 Amazon ECS,Container Insights 在 Linux 和 Windows 服务器实例上收集集群、任务和服务级别的指标。它只能在 Linux 实例上收集实例级别的指标。网络指标仅适用于处于桥接网络模式和 awsvpc 网络模式的容器。它们不适用于处于主机网络模式的容器。要了解更多信息,请访问 使用 Container Insights
  • 日志记录
    • Amazon ECS 使您可以通过 AWS CloudTrail 记录所有的 Amazon ECS API 调用并将日志文件发送给您。记录的信息包括 API 调用者的身份、API 调用的时间、API 调用者的源 IP 地址、请求参数以及 Amazon ECS 返回的响应元素。CloudTrail 为您提供从 AWS 管理控制台、AWS 开发工具包以及 AWS CLI 进行的 API 调用的历史记录。它支持安全分析、资源更改跟踪以及合规性审核。
  • AWS Config
    • AWS Config 与 Amazon ECS 集成,使您能够查看自己 AWS 账户中的 AWS 资源配置。使用 AWS Config,用户可以监控和跟踪资源的配置方式、它们彼此之间的关系以及这些配置和关系如何随时间变化。AWS Config 能够简化合规性和安全性、运行问题排查和资源管理。
  • 第三方
    • Amazon ECS 采用开放容器标准,以支持由第三方可观测性供应商组成的整个生态系统。有关更多信息,请查看 Amazon ECS 合作伙伴页面

Amazon ECS 提供以下存储选项:

Amazon Elastic File System(EFS):Amazon EFS 提供无服务器、完全弹性、可扩展的文件存储,用于您的 Amazon ECS 任务。您可以将共享的 Amazon EFS 文件系统挂载到 ECS 任务中,以实现永久存储。

Amazon Elastic Block Store(EBS):Amazon EBS 为您的 Amazon ECS 任务提供可扩展的高性能存储。您可以配置 ECS 以预置具有所需特征(大小、性能、加密等)的 EBS 卷并将其附加到您的 Amazon ECS 任务中。

在 AWS Fargate 上运行的 Amazon ECS 任务的成本会自动在 AWS 成本和使用情况报告(CUR)和 AWS Cost Explorer 成本管理服务中提供。您可以使用托管标签以及用户添加的标签来汇总成本,并针对 Amazon ECS 任务将其分配给新的和现有的业务部门、团队应用程序。

详细了解 Amazon ECS 使用情况报告

您可以通过选择 Amazon ECS 的拆分成本分配数据,在 AWS 成本和使用情况报告(CUR)中访问在 Amazon EC2 实例上运行的 Amazon ECS 任务的成本和使用情况信息。拆分成本分配数据根据实例的价格,以及在实例上运行的容器消耗的 CPU 和内存资源的百分比来分析每个任务的资源消耗,为在 Amazon EC2 实例上运行的 Amazon ECS 任务生成任务级成本。拆分成本分配数据会自动为您的 Amazon ECS 任务提取托管标签和用户添加的标签,使您能够汇总成本并将其分配给新的和现有的业务部门、团队或应用程序。您可以从 AWS 成本管理控制台首选项中选择加入适用于 Amazon ECS 的拆分成本分配数据。然后,您可以从 AWS Billing Console 的 CUR 报告首选项中为您的个人 CUR 报告选择拆分成本分配数据。 

了解有关启用拆分成本分配数据的更多信息。
 

安全性与合规性

Amazon ECS 在客户控制的 Amazon EC2 实例中排定容器的执行,或者使用 AWS Fargate 排定容器的执行,其隔离控制功能和合规性设置与 Amazon EC2 相同。您的计算实例位于 Virtual Private Cloud (VPC) 中,它具有指定的 IP 范围。您可以决定哪些实例向互联网公开,哪些实例保持私有状态。

  • 您的 Amazon EC2 实例使用 IAM 角色访问 Amazon ECS 服务。
  • 您的 Amazon ECS 任务使用 IAM 角色访问服务和资源。
  • 您在 AWS Fargate 上运行的 Amazon ECS 任务在隔离的虚拟机中运行。
  • 安全组和网络 ACL 让您能控制进入和离开您的实例的入站和出站网络访问。
  • 您可以通过工业标准的加密 IPsec VPN 连接,将您现有的 IT 基础设施关联到 VPC 中的资源。
  • 您可以将自己的 Amazon EC2 资源预配置为专用实例。专用实例是为了增加额外的隔离,在单一客户的专用硬件上运行的 Amazon EC2 实例。

可以。作为 Amazon EC2 客户,您对您的容器实例的操作系统 (OS) 具有根用户访问权限。您可以拥有操作系统安全设置的所有权,也可以为安全功能配置额外的软件组件,如监控、补丁管理、日志管理和主机入侵检测。 

将 Amazon ECS 与 AWS Fargate 结合使用可提高安全性,能够为每项任务分配精细的权限,从而在构建应用程序时为您提供更高程度的隔离、网络访问控制和 IAM 控制。使用 AWS Fargate 时,每个任务都在单独的虚拟机(VM)中运行,与共享同一台主机的两个任务相比,提供更加独立的运行环境。每项任务还具有自己的网络接口,允许将安全组应用于每项任务,并控制传入和传出流量。

可以。客户可以对其容器实例进行配置,以便访问 VPC 内的专有容器映像注册表或者可从 VPC 外部访问的注册表,例如 Amazon ECR

首先,您需要为您的任务创建 IAM 角色,使用“Amazon EC2 Container Service Task Role”服务角色并附加含必要权限的策略即可成功创建。当您新建一项任务定义或修订任务定义时,您可以从“Task Role”下拉列表中选择一个角色,或使用以 JSON 格式存储的“taskRoleArn”来指定角色。

Amazon ECS 符合 PCI DSS 第 1 级、ISO 9001、ISO 27001、ISO 27017、ISO 27018、SOC 1、SOC 2、SOC 3 和 HIPAA 要求的标准。

有关更多信息,请访问我们的合规性页面

可以。Amazon ECS 符合 HIPAA 要求。如果您已与 AWS 签署商业伙伴增订合约(BAA),则可以利用 Amazon ECS 对采用部署到 AWS Fargate 的启动类型或 Amazon EC2 计算实例的容器的加密受保护健康信息(PHI)进行处理。


有关更多信息,请访问我们的 HIPAA 合规性页面。如果您打算处理、存储或传输 PHI 且尚未与 AWS 签署 BAA,请联系我们获取更多信息。

可以。利用 AWS GovCloud(美国)区域,由 Amazon ECS 管理的容器和集群也能满足您的容器的敏感数据和受监管工作负载的要求。有关更多信息,请访问我们的 AWS GovCloud 页面。

客户还可以通过符合联邦信息处理标准(FIPS)140-2 的方式在使用 AWS Fargate 的 Amazon ECS 上部署工作负载。FIPS 是美国和加拿大的政府标准,其中规定了对用于保护敏感信息的加密模块的安全要求。

Amazon ECS 的架构旨在确保安全,还与 AWS 原生安全服务集成以实现安全性、身份与合规性。例如,您可以使用 Amazon GuardDuty 监控在 AWS Fargate 或 Amazon EC2 上运行的 Amazon ECS 工作负载,以检测潜在的恶意或可疑行为。

服务水平协议

我们的计算 SLA 保证 Amazon ECS 的月度正常运行时间百分比至少达到 99.99%。 AWS 针对 Amazon ECS 和 AWS Fargate 做出了两项 SLA 承诺:(1) 多可用区所含容器服务 SLA,用于管理跨多个可用区部署的所含容器服务;(2) 单独管理所含容器服务任务和容器组的单一任务/容器组(pod)SLA,分别管理所含容器服务任务和容器组(pod)。请参阅 AWS Fargate 和 Amazon Elastic Container Service SLA 页面。

对于您运行任务所在的可用区,如果同一个区域内有一个以上的可用区在任何月度账单周期内的月度正常运行时间百分比没有达到 99.99%,那么您就有资格获得计算 SLA 规定的 Amazon ECS SLA 服务抵扣。

如需 SLA 的所有条款与条件的完整详细信息,以及如何提交索赔的详细信息,请参阅计算 SLA 详细信息页面