AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建和更新 AWS Elastic Beanstalk 环境组

使用 AWS Elastic Beanstalk (Elastic Beanstalk) 的 Compose Environments API,您可以创建和更新一个应用程序中的 Elastic Beanstalk 环境组。组中的每个环境都可以运行服务导向型架构应用程序的一个独立组件。Compose Environments API 使用一个应用程序版本列表和一个可选组名。Elastic Beanstalk 为每个应用程序版本创建一个环境,如果环境已经存在,则将应用程序版本部署到相应环境。

在 Elastic Beanstalk 环境间创建链接可将一个环境指定为另一个环境的依赖项。使用 Compose Environments API 创建环境组时,仅当这些环境所依赖的环境存在并运行时,Elastic Beanstalk 才会创建这些环境。有关环境链接的更多信息,请参阅在 AWS Elastic Beanstalk 环境间创建链接

Compose Environments API 使用环境清单存储由各个环境组共享的配置详细信息。每个组件应用程序在其应用程序源包中都必须有一个 env.yaml 配置文件,用于指定创建它的环境时所使用的参数。

Compose Environments 要求在每个组件应用程序的环境清单中指定 EnvironmentNameSolutionStack

您可以通过 Elastic Beanstalk 命令行界面 (EB CLI)、AWS CLI 或开发工具包使用 Compose Environments API。有关 EB CLI 说明,请参阅使用 EB CLI 以组的方式管理多个 AWS Elastic Beanstalk 环境

使用 Compose Environments API

例如,您可以创建一个名为 Media Library 的应用程序,让用户通过它上传和管理 Amazon Simple Storage Service (Amazon S3) 中存储的图像和视频。该应用程序的前端环境 front 运行一个 Web 应用程序,用户可通过该 Web 应用程序上传和下载各个文件、查看库和启动批处理作业。

该前端应用程序不直接处理这些作业,而是将这些作业添加到一个 Amazon SQS 队列中。第二个环境 worker 从队列中提取作业并进行处理。worker 使用一个具有高性能 GPU 的 G2 实例类型,而 front 可以在更为经济实用的通用实例类型上运行。

您可以通过组织项目文件夹 Media Library 为每个组件使用单独的目录,每个目录各在一个环境定义文件 (env.yaml) 中包含相应组件的源代码:

~/workspace/media-library |-- front | `-- env.yaml `-- worker `-- env.yaml

以下列表显示了各个组件应用程序的 env.yaml 文件。

~/workspace/media-library/front/env.yaml

EnvironmentName: front+ EnvironmentLinks: "WORKERQUEUE" : "worker+" AWSConfigurationTemplateVersion: 1.1.0.0 EnvironmentTier: Name: WebServer Type: Standard SolutionStack: 64bit Amazon Linux 2015.09 v2.0.4 running Java 8 OptionSettings: aws:autoscaling:launchconfiguration: InstanceType: m4.large

~/workspace/media-library/worker/env.yaml

EnvironmentName: worker+ AWSConfigurationTemplateVersion: 1.1.0.0 EnvironmentTier: Name: Worker Type: SQS/HTTP SolutionStack: 64bit Amazon Linux 2015.09 v2.0.4 running Java 8 OptionSettings: aws:autoscaling:launchconfiguration: InstanceType: g2.2xlarge

在为前端 (front-v1) 和工作程序 (worker-v1) 应用程序组件创建应用程序版本后,您可以使用版本名调用 Compose Environments API。在本例中,我们使用 AWS CLI 调用该 API。

# Create application versions for each component: ~$ aws elasticbeanstalk create-application-version --application-name media-library --version-label front-v1 --process --source-bundle S3Bucket="my-bucket",S3Key="front-v1.zip" { "ApplicationVersion": { "ApplicationName": "media-library", "VersionLabel": "front-v1", "Description": "", "DateCreated": "2015-11-03T23:01:25.412Z", "DateUpdated": "2015-11-03T23:01:25.412Z", "SourceBundle": { "S3Bucket": "my-bucket", "S3Key": "front-v1.zip" } } } ~$ aws elasticbeanstalk create-application-version --application-name media-library --version-label worker-v1 --process --source-bundle S3Bucket="my-bucket",S3Key="worker-v1.zip" { "ApplicationVersion": { "ApplicationName": "media-library", "VersionLabel": "worker-v1", "Description": "", "DateCreated": "2015-11-03T23:01:48.151Z", "DateUpdated": "2015-11-03T23:01:48.151Z", "SourceBundle": { "S3Bucket": "my-bucket", "S3Key": "worker-v1.zip" } } } # Create environments: ~$ aws elasticbeanstalk compose-environments --application-name media-library --group-name dev --version-labels front-v1 worker-v1

第三个调用创建两个环境:front-devworker-dev。该 API 通过将 EnvironmentName 文件中指定的 env.yamlgroup name 调用中指定的 Compose Environments 选项用连字符连接起来创建环境名。这两个选项加连字符的总长度不得超过 23 个字符的环境名最大长度限制。

front-dev 环境中运行的应用程序可以通过读取 WORKERQUEUE 变量访问挂载到 worker-dev 环境的 Amazon SQS 队列。有关环境链接的更多信息,请参阅在 AWS Elastic Beanstalk 环境间创建链接