在 Elastic Beanstalk 中使用 ECS 托管 Docker 平台分支 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Elastic Beanstalk 中使用 ECS 托管 Docker 平台分支

本主题概述了适用于亚马逊 Linux 2 和亚马逊 Linux 2023 的 Elastic Beanstalk ECS 托管 Docker 平台分支。它还提供特定于 Docker ECS 托管平台的配置信息。

已开启从多容器 Docker 迁移 AL1

2022 年 7 月 18 日,Elastic Beanstalk 将所有基于亚马逊 Linux AMI () 的平台分支的状态设置为停用。AL1尽管本章提供了此已停用平台的配置信息,但我们强烈建议您迁移到最新支持的平台分支。如果您目前正在使用在平台分支上运行的停用多容器 Docker,则可以迁移到在 AL2023 AL1 平台分支上运行的最新 ECS。最新的平台分支支持已停产平台分支的所有功能。源代码无需更改。有关更多信息,请参阅 将 Elastic Beanstalk 应用程序从 AL1 上的 ECS 托管多容器 Docker 迁移到 Amazon Linux 2023 上的 ECS

ECS 托管 Docker 平台概述

Elastic Beanstalk 使用 Amazon Elastic Container Service (Amazon ECS) 来协调 ECS 托管式 Docker 环境中的容器部署。Amazon ECS 提供工具来管理运行 Docker 容器的实例的集群。Elastic Beanstalk 处理 Amazon ECS 任务,包括集群创建、任务定义和执行。环境中的每个实例都运行相同的容器组,如 Dockerrun.aws.json v2 文件所定义。为了充分利用 Docker,Elastic Beanstalk 允许你创建一个环境,让你的 EC2 亚马逊实例并排运行多个 Docker 容器。

下图显示了一个示例 Elastic Beanstalk 环境,该环境配置了三个 Docker 容器,在 Auto Scaling 组中的 EC2 每个亚马逊实例上运行:

Elastic Beanstalk environment with load balancer, auto scaling group, and containerized tasks.

由 Elastic Beanstalk 创建的 Amazon ECS 资源

当您使用 ECS 托管的 Docker 平台创建环境时,Elastic Beanstalk 会在构建环境的同时自动创建并配置多个 Amazon Elastic Container Service 资源。这样,它就会在每个 Amazon EC2 实例上创建必要的容器。

  • Amazon ECS 集群 – Amazon ECS 中的容器实例被组成集群。与 Elastic Beanstalk 一起使用时,始终为每个 ECS 托管式 Docker 环境创建一个集群。ECS 集群还包含 Auto Scaling 组容量提供程序和其他资源。

  • Amazon ECS 任务定义 – Elastic Beanstalk 使用您项目中的 Dockerrun.aws.json v2 生成用于在环境中配置容器实例的 Amazon ECS 任务定义。

  • Amazon ECS 任务 – Elastic Beanstalk 与 Amazon ECS 进行通信以在环境中的每个实例上运行一个任务,从而协调容器部署。在可扩展的环境中,只要将一个实例添加到集群中,Elastic Beanstalk 就会启动一个新任务。

  • Amazon ECS 容器代理 – 代理在环境中实例上的 Docker 容器中运行。该代理轮询 Amazon ECS 服务并等待任务运行。

  • Amazon ECS 数据卷 — 除了你在 Dockerrun.aws.json v2 中定义的卷外,Elastic Beanstalk 还会在任务定义中插入卷定义以简化日志收集。

    Elastic Beanstalk 在 /var/log/containers/containername 处的容器实例上创建日志卷(为每个容器创建一个日志卷)。这些卷将命名为 awseb-logs-containername 并提供给要挂载的容器。请参阅 容器定义格式 以了解有关如何装载容器的详细信息。

有关 Amazon ECS 资源的更多信息,请参阅亚马逊弹性容器服务开发人员指南

Dockerrun.aws.json v2 文件

容器实例需要一个名为 Dockerrun.aws.json 的配置文件。容器实例是指在 Elastic Beanstalk 环境中运行 ECS 托管 Docker 的亚马逊 EC2 实例。此文件特定于 Elastic Beanstalk,可以单独使用,也可以与源包中的源代码和内容结合使用,以在 Docker 平台上创建环境。

注意

的版本 2 格式Dockerrun.aws.json增加了对每个 Amazon EC2 实例的多个容器的支持,并且只能与 ECS 托管 Docker 平台一起使用。该格式与支持非 ECS 管理的 Docker 平台分支的其他配置文件版本有很大不同。

有关更新的格式和示例文件的详细信息,请参阅 Dockerrun.aws.json v2

Docker 映像

适用于 Elastic Beanstalk 的 ECS 托管 Docker 平台要求在创建 Elastic Beanstalk 环境之前预先构建映像并将其存储在公有或私有在线映像存储库中。

注意

Elastic Beanstalk 上的 ECS 托管式 Docker 平台不支持使用 Dockerfile 在部署期间构建自定义映像。在创建 Elastic Beanstalk 环境之前,先构建映像并将其部署到在线存储库中。

Dockerrun.aws.json v2 中按名称指定映像。

要将 Elastic Beanstalk 配置为向私有存储库进行身份验证,请在 authentication v2 文件中包含 Dockerrun.aws.json 参数。

失败的容器部署

如果 Amazon ECS 任务失败,您的 Elastic Beanstalk 环境中的一个或多个容器将不会启动。由于 Amazon ECS 任务失败,Elastic Beanstalk 不会回滚多容器环境。如果容器在您的环境中无法启动,请从 Elastic Beanstalk 控制台中重新部署当前版本或以前的正常工作版本。

部署现有版本
  1. 在您环境的区域中打开 Elastic Beanstalk 控制台。

  2. 单击应用程序名称右侧的操作,然后单击查看应用程序版本

  3. 选择应用程序的版本,然后单击部署

为 Elastic Beanstalk 扩展基于 ECS 的 Docker 平台

Elastic Beanstalk 提供可扩展性功能,使您能够将自己的命令、脚本、软件和配置应用于应用程序部署。ECS AL2 和 AL2 023 平台分支的部署工作流程与其他基于 Linux 的平台略有不同。有关更多信息,请参阅 在 Amazon Linux 2 及更高版本上运行的 ECS 的实例部署工作流