建立和更新 Elastic Beanstalk 環境的群組 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立和更新 Elastic Beanstalk 環境的群組

透過 AWS Elastic Beanstalk Compose Environments 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 命令列介面 (EB CLI) AWS CLI、或 SDK 搭配使用。如需 EB CLI 的說明,請參閱 利用 EB CLI,以群組方式管理多個 Elastic Beanstalk 環境

使用 Compose Environments API

例如,您可以建立名為 Media Library 的應用程式,來讓使用者上傳和管理儲存於 Amazon Simple Storage Service (Amazon S3) 中的影像和影片。這個應用程式具備前端環境 front,此環境會執行 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="DOC-EXAMPLE-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": "DOC-EXAMPLE-BUCKET", "S3Key": "front-v1.zip" } } } ~$ aws elasticbeanstalk create-application-version --application-name media-library --version-label worker-v1 --process --source-bundle S3Bucket="DOC-EXAMPLE-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": "DOC-EXAMPLE-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 環境之間建立連結