为 Amazon ECS 构建您的解决方案
您必须将应用程序设计为能够在容器上运行。容器是软件开发的标准化单位,它包含软件应用程序运行需要的所有内容。这包括相关代码、运行时、系统工具和系统库。从称为映像的只读模板中创建容器。容器映像是一个包含您的应用程序及其依赖项的静态构件。通常通过 Dockerfile 进行构建映像。Dockerfile 是一个纯文本文件,其中包含构建容器的说明。构建完成后,这些映像将存储在可从中下载它们的注册表,例如 Amazon ECR。
创建并存储映像后,创建 Amazon ECS 任务定义。任务定义是应用程序的蓝图。它是描述构成应用程序的参数和一个或多个容器的 JSON 格式的文本文件。例如,您可以使用它指定操作系统的映像和参数、要使用哪些容器、要为应用程序打开哪些端口以及任务中的容器应使用哪些数据卷。可用于任务定义的特定参数取决于您的特定应用程序需求。
定义任务定义后,将其部署为集群上的服务或任务。集群是在注册到集群的容量基础设施上运行的任务或服务的逻辑分组。
任务 是集群内的任务定义的实例化。您可以运行独立任务,也可以将任务作为服务的一部分运行。您可以使用 Amazon ECS 服务在 Amazon ECS 集群中同时运行和维护所需数量的任务。它的工作原理是,如果您的任何任务出于任何原因失败或停止,Amazon ECS 服务调度器将根据您的任务定义启动另一个实例。这样做是为了替换它,从而保持服务中所需的任务数量。
容器代理在 Amazon ECS 集群内的每个容器实例上运行。代理向 Amazon ECS 发送有关容器当前正在运行的任务和资源使用率的信息。在接收来自 Amazon ECS 的请求时启动和停止任务。
部署任务或服务后,可以使用以下任一工具来监控部署和应用程序:
-
CloudWatch
-
运行时监控
容量
容量是容器运行的基础设施。Amazon ECS 为您的集群提供三种基础设施类型:
-
Amazon ECS 托管实例:Amazon 全面管理您的账户中运行的底层 Amazon EC2 实例,包括预置、修补和扩展。此选项在性能、成本效益和操作简便性之间实现了最佳平衡。
-
无服务器(Fargate):只需为任务使用的资源付费,无需管理任何基础设施。非常适合工作负载变化无常且需要快速入门的情况。
-
Amazon EC2 实例:您可以直接管理底层 Amazon EC2 实例,包括实例选择、配置和维护。
在以下情况下,请使用 Amazon ECS 托管实例:
您希望获得 Fargate 的简单性,同时更好地控制底层基础设施。
您需要可预测的性能和成本优化。
您希望 Amazon 处理基础设施管理,同时保持灵活性。
在以下情况下,请使用 Fargate:
您希望专注于您的应用程序,而不管理基础设施。
您的工作负载变化无常或不可预测。
您刚开始使用容器,想要最简单的部署选项。
在以下情况下,请使用 Amazon EC2 实例:
您需要专门的硬件要求(GPU 加速、高性能计算)。
您需要预留容量或特定实例类型。
您需要特权功能或自定义 AMI。
在您创建集群时指定基础设施。您还可以在注册任务定义时指定基础设施类型。任务定义将基础设施称为“启动类型”。您也可以使用容量提供程序。
服务端点
服务端点是 Amazon ECS 入口点的 URL,您可以使用它通过 Internet 协议版本 4(IPv4)或 Internet 协议版本 6(IPv6)以编程方式连接到服务。默认情况下,您以编程方式连接到 Amazon ECS 的请求使用仅支持 IPv4 请求的服务端点。要使用 IPv4 或 IPv6 请求以编程方式与 Amazon ECS 连接,您可以使用双堆栈端点。有关使用双堆栈端点的信息,请参阅使用 Amazon ECS 双堆栈端点。
Networking
Amazon 资源是在子网中创建的。当您使用 EC2 实例时,Amazon ECS 会在您在创建集群时指定的子网中启动实例。您的任务在实例子网中运行。对于 Fargate 或本地虚拟机,您可以在运行任务或创建服务时指定子网。
根据您的应用程序,子网可以是私有子网或公有子网,并且子网可以位于任何以下 Amazon 资源中:
-
可用区
-
Local Zones
-
Wavelength 区域
-
Amazon Web Services 区域
-
Amazon Outposts
有关更多信息,请参阅 Amazon ECS 应用程序位于共享子网、本地区和 Wavelength 区中 或 Amazon Outposts 上的 Amazon Elastic Container Service。
您可以使用以下方法之一将应用程序连接到互联网:
-
具有互联网网关的公有子网
当您的公共应用程序需要大量带宽或最小延迟时,请使用公有子网。适用场景包括视频流和游戏服务。
-
具有 NAT 网关的私有子网
如果要保护容器免于外部直接访问,则请使用私有子网。适用场景包括支付处理系统或存储用户数据和密码的容器。
-
Amazon PrivateLink
使用 Amazon PrivateLink 在 VPC、Amazon 服务和您的本地网络之间建立私有连接,而不会将流量外泄至公共互联网。
功能访问
您可以使用 Amazon ECS 账户设置来访问以下功能:
-
Container Insights
CloudWatch Container Insights 从容器化应用程序和微服务中收集、聚合和汇总指标与日志。指标包括资源的使用率,如 CPU、内存、磁盘和网络。
-
awsvpc中继对于某些 EC2 实例类型,您可以在新启动的容器实例上使用其他网络接口(ENI)。
-
标记授权
用户必须具有创建资源的操作的权限,例如
ecsCreateCluster。如果在资源创建操作中指定了标签,则 Amazon 会对ecs:TagResource操作执行额外的授权,以验证用户或角色是否具备创建标签的权限。 -
Fargate FIPS-140 合规性
Fargate 支持美国联邦信息处理标准(FIPS-140),其中规定了对保护敏感信息的加密模块的安全要求。它是美国和加拿大政府的现行标准,适用于需要符合《联邦信息安全管理法》(FISMA)或联邦风险和授权管理计划(FedRAMP)的系统。
-
Fargate 任务停用时间变更
您可以配置对停用 Fargate 任务进行修补之前的等待时间。
-
双堆栈 VPC
允许任务通过 IPv4、IPv6 或两者进行通信。
-
Amazon 资源名称(ARN)格式
某些功能(例如标记授权)需要新的 Amazon 资源名称(ARN)格式。
有关更多信息,请参阅 通过账户设置访问 Amazon ECS 功能。
IAM 角色
IAM 角色是可在账户中创建的一种具有特定权限的 IAM 身份。在 Amazon ECS 中,您可以创建角色来授予对 Amazon ECS 资源(例如容器或服务)的权限。
有些 Amazon ECS 功能需要角色。有关更多信息,请参阅 适用于 Amazon ECS 的 IAM 角色。
日志记录
日志记录和监控是维护 Amazon ECS 工作负载的可靠性、可用性和性能的重要方面。以下选项可用:
-
Amazon CloudWatch 日志 – 将日志路由到 Amazon CloudWatch
-
FireLens for Amazon ECS – 将日志路由到 Amazon 服务或 Amazon Partner Network 目的地,以进行日志存储和分析。Amazon Partner Network 是一个由合作伙伴组成的全球社区,它利用计划、专业知识和资源来构建、营销和销售客户产品。
容器映像最佳实践
下面是 Amazon ECS 容器映像的关键原则:
-
在映像中包含所有依赖项
-
每个容器运行一个进程
-
处理
SIGTERM以进行正常关闭 -
将日志写入
stdout和stderr -
使用唯一的标签,避免在生产环境中使用
latest