View a markdown version of this page

使用 Elastic Beanstalk 部署容器 - AWS 规范指引

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

使用 Elastic Beanstalk 部署容器

Thomas Scott 和 Jean-Baptiste Guillois,Amazon Web Services

Summary

在 Amazon Web Services(AWS)Cloud 上,AWS Elastic Beanstalk 支持 Docker 作为可用平台,因此容器可以在创建的环境中运行。此模式展示了如何使用 Elastic Beanstalk 服务部署容器。此模式的部署将使用基于 Docker 平台的 Web 服务器环境。

要使用 Elastic Beanstalk 部署和扩展 Web 应用程序和服务,您需要上传代码,部署就会自动处理。还包括容量预调配、负载均衡、自动扩缩和应用程序运行状况监控。当您使用 Elastic Beanstalk 时,您可以完全控制它代表您创建的 AWS 资源。Elastic Beanstalk 不收取额外费用。您只需为用于存储和运行应用程序的 AWS 资源付费。

此模式包括使用 AWS Elastic Beanstalk 命令行界面(EB CLI)和 AWS 管理控制台 进行部署的说明。

使用案例

Elastic Beanstalk 的使用场景包括: 

  • 部署原型环境来演示前端应用程序。(此模式以 Dockerfile 为例。)

  • 部署 API 来处理给定域名的 API 请求。

  • 使用 Docker-Compose 部署编排解决方案(在此模式中 docker-compose.yml 未用作实际示例)。

先决条件和限制

先决条件

  • Amazon Web Services account

  • 本地已安装 AWS EB CLI

  • Docker 已安装在本地机器上

限制

  • 在免费套餐中,每个 IP 地址的 Docker 拉取限制为每 6 小时拉取 100 次。

架构

目标技术堆栈

  • 亚马逊弹性计算云 (Amazon EC2) 实例

  • 安全组

  • 应用程序负载均衡器

  • 自动扩缩组

目标架构

使用 Elastic Beanstalk 部署容器的架构

自动化和扩展

AWS Elastic Beanstalk 可以根据发出的请求数自动扩缩。为环境创建的 AWS 资源包括一个 Application Load Balancer、一个 Auto Scaling 组和一个或多个 Amazon EC2 实例。 

负载均衡器位于作为 Auto Scaling 组一部分的 Amazon EC2 实例的前面。Amazon A EC2 uto Scaling 会自动启动额外的亚马逊 EC2 实例,以适应应用程序不断增加的负载。如果您的应用程序的负载减少,Amazon A EC2 uto Scaling 会停止实例,但它会使至少一个实例保持运行。

自动扩缩触发器

您的 Elastic Beanstalk 环境中的 Auto Scaling 组使用 CloudWatch 两个亚马逊警报来启动扩展操作。当每个实例的平均出站网络流量在 5 分钟时间段内高于 6 MB 或低于 2 MB 时,默认触发器将扩展。要有效地使用 Amazon A EC2 uto Scaling,请配置适合您的应用程序、实例类型和服务要求的触发器。您可以基于若干个统计数据 (包括延迟、磁盘 I/O、CPU 使用率和请求计数) 来进行扩展。有关更多信息,请参阅自动扩缩触发器。

工具

Amazon Web Services

  • AWS 命令行界面(AWS CLI)是一种开源工具,它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。

  • AWS EB 命令行界面 (EB CLI) 是一个可用来创建、配置和管理 Elastic Beanstalk 环境的命令行客户端。

  • 弹性负载均衡将传入的应用程序或网络流量分发到多个目标。例如,您可以跨亚马逊弹性计算云 (Amazon EC2) 实例、容器以及一个或多个可用区中的 IP 地址分配流量。

其他服务

  • Docker 将软件打包成称为容器的标准化单元,其中包括库、系统工具、代码和运行时系统。

代码

此模式的代码可在 GitHub 集群示例应用程序存储库中找到。

操作说明

Task说明所需技能

克隆远程存储库。

  • 要克隆存储库,请运行 git clone https://github.com/aws-samples/cluster-sample-app.git 命令。< /p>

应用程序开发人员、AWS 管理员、AWS DevOps

初始化 Elastic Beanstalk Docker 项目。

  1. 在根目录下创建一个名为 aws.json 的文件。

  2. 在 aws.json 文件中,添加以下代码。

    {    "AWSEBDockerrunVersion":"1",    "Image":{       "Name":"cluster-sample-app"    },    "Ports":[       {          "ContainerPort":80,          "HostPort":8080       }    ] }
  3. 在项目的根目录下运行 eb init -p docker 命令。

应用程序开发人员、AWS 管理员、AWS DevOps

在本地测试项目。

  1. 在项目的根目录下运行 eb local run 命令。

  2. 导航到 http://localhost,测试应用程序。

应用程序开发人员、AWS 管理员、AWS DevOps
Task说明所需技能

运行部署命令

  1. 在项目的根目录下运行 eb create docker-sample-cluster-app 命令。

应用程序开发人员、AWS 管理员、AWS DevOps

访问已部署的版本。

部署命令完成后,使用该 eb open命令访问项目。

应用程序开发人员、AWS 管理员、AWS DevOps
Task说明所需技能

使用浏览器部署应用程序。

  1. 打开 控制台。

  2. 导航到 Elastic Beanstalk 控制台。

  3. 选择创建应用程序。

  4. 在应用程序名称中,输入 Cluster-Sample-App。

  5. 选择 Docker 作为平台。

  6. 选择上传代码。

  7. 选择本地 .zip 文件(位于克隆项目的根目录中)或公共的 Amazon Simple Storage Service(Amazon S3)URL。

应用程序开发人员、AWS 管理员、AWS DevOps

访问已部署的版本。

部署后,访问已部署的应用程序,然后选择提供的 URL。

应用程序开发人员、AWS 管理员、AWS DevOps

相关资源

附加信息

使用 Elastic Beanstalk 的好处

  • 自动预调配基础设施

  • 自动管理底层平台

  • 自动修补和更新以支持应用程序

  • 自动扩缩应用程序

  • 能够自定义节点数

  • 能够在需要时访问基础设施组件

  • 与其他容器部署解决方案相比,易于部署