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

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

创建和更新 Elastic Beanstalk 环境组

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

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

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

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

你可以将Compose EnvironmentsAPI与 Elastic Beanstalk 命令行接口 CLI (EB) AWS CLI一起使用,或者。SDK有关 EB 使用 EB CLI 以组的形式管理多个 Elastic Beanstalk 环境 的CLI说明,请参阅。

使用 Compose Environments API

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

前端应用程序不是直接处理任务,而是将任务添加到 Amazon SQS 队列中。第二个环境从队列中提取任务并对其进行处理。worker worker使用具有高性能的 G2 实例类型GPU,同时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 (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。通过将env.yaml文件中指定的内容与Compose Environments调用中EnvironmentName指定的group name选项连接起来,以连字符分隔,从而API创建环境名称。这两个选项加连字符的总长度不得超过 23 个字符的环境名最大长度限制。

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