创建和更新 Elastic Beanstalk 环境组 - AWS Elastic Beanstalk

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

创建和更新 Elastic Beanstalk 环境组

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

在 Elastic Beanstalk 环境之间创建链接,将一个环境指定为另一个环境的依赖项。当您使用 Compose Environments API 创建一组环境时,Elastic Beanstalk 仅在依赖关系启动并运行之后才会创建依赖环境。有关环境链接的更多信息,请参阅在 Elastic Beanstalk 环境之间创建链接

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

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

您可以将 Compose Environments API 与 Elastic Beanstalk Command Line Interface (EB CLI)、AWS CLI 或开发工具包结合使用。有关 EB CLI 说明,请参阅使用 EB CLI 以组的形式管理多个 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="amzn-s3-demo-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": "amzn-s3-demo-bucket", "S3Key": "front-v1.zip" } } } ~$ aws elasticbeanstalk create-application-version --application-name media-library --version-label worker-v1 --process --source-bundle S3Bucket="amzn-s3-demo-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": "amzn-s3-demo-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 环境中运行的应用程序可以通过读取 worker-dev 变量来访问附加到 WORKERQUEUE 环境的 Amazon SQS 队列的名称。有关环境链接的更多信息,请参阅在 Elastic Beanstalk 环境之间创建链接