设计适用于 Amazon ECS 的应用程序架构 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

设计适用于 Amazon ECS 的应用程序架构

您可以通过为应用程序创建任务定义来构建应用程序。任务定义包含用于定义有关应用程序的信息的参数,包括:

  • 要使用的启动类型,这决定了托管您的任务的基础设施。

    使用 EC2 启动类型时,您还可以选择实例类型。对于某些实例类型,例如 GPU,您需要设置其他参数。有关更多信息,请参阅 Amazon ECS 任务定义应用场景

  • 容器映像,包含您的应用程序代码和运行应用程序代码所需的所有依赖项。

  • 在您的任务中用于容器的联网模式

    联网模式决定了任务通过网络进行通信的方式。

    对于在 EC2 实例上运行的任务,有多个选项,但建议您使用 awsvpc 网络模式。awsvpc 网络模式可简化容器联网,因为您可以更好地控制您的应用程序相互之间以及与 VPC 内其他服务之间的通信方式。

    对于在 Fargate 上运行的任务,您只能使用 awsvpc 网络模式。

  • 要用于您的任务的日志记录配置。

  • 在任务中用于容器的任何数据卷。

要获得任务定义参数的完整列表,请参阅 Amazon ECS 任务定义参数

创建任务定义时,请遵循以下准则:

  • 将每个任务定义系列仅用于一个业务目的。

    如果您在同一个任务定义中将多种类型的应用程序容器分组在一起,则无法独立扩展这些容器。例如,网站和 API 不太可能要求以相同的速度进行横向扩展。随着流量的增加,所需的 Web 容器数量将与 API 容器数量不同。如果这两个容器部署在同一个任务定义中,则每个任务会运行相同数量的 Web 容器和 API 容器。

  • 将每个应用程序版本与任务定义系列中的任务定义修订版进行匹配。

    在任务定义系列中,将每个任务定义修订版视为特定容器映像设置的时间点快照。这类似于容器是一个快照,其中包含运行特定版本应用程序代码所需的所有内容。

    确保应用程序代码版本、容器映像标签和任务定义修订版之间存在一对一的映射。典型的发布过程涉及一个 git commit,它会变成一个标有 git commit SHA 的容器映像。然后,该容器映像标签将获得自己的 Amazon ECS 任务定义修订版。最后,对 Amazon ECS 服务进行了更新,告诉它部署新的任务定义修订版。

  • 为每个任务定义系列使用不同的 IAM 角色。

    使用自己的 IAM 角色定义每个任务定义。该建议应与我们的建议同时提出,以为每个业务组件提供自己的任务定义系列。通过实施这两种最佳实践,您可以限制每项服务对您 Amazon 账户中资源的访问权限。例如,您可以授予身份验证服务访问权限,以连接到您的密码数据库。同时,您还可以确保只有您的订单服务才能访问信用卡付款信息。