

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

# 建立和更新 Elastic Beanstalk 環境的群組
<a name="environment-mgmt-compose"></a>

使用 AWS Elastic Beanstalk [ComposeEnvironments](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_ComposeEnvironments.html) API，您可以在單一應用程式中建立和更新 Elastic Beanstalk 環境群組。群組中的每個環境，皆可執行服務導向架構應用程式的不同元件。`Compose Environments` API 需要應用程式版本的清單和選用的群組名稱。Elastic Beanstalk 會針對每個應用程式版本建立環境，如果環境已存在，則會將應用程式版本部署到這些環境。

建立 Elastic Beanstalk 環境之間的連結，將一個環境指派為另一個環境的相依環境。當您使用 `Compose Environments` API 來建立一組環境時，Elastic Beanstalk 只會在其相依的環境開始正常運作之後，才會建立依賴的環境。如需關於環境連結的詳細資訊，請參閱[在 Elastic Beanstalk 環境之間建立連結](environment-cfg-links.md)。

`Compose Environments` API 會使用[環境資訊清單](environment-cfg-manifest.md)來儲存環境群組所共用的設定詳細資訊。每個元件應用程式的應用程式原始碼套件中，都必須具有 `env.yaml` 組態檔案，其中指定用來建立其環境的參數。

`Compose Environments` 需要在每個元件應用程式的環境資訊清單中，指定 `EnvironmentName` 和 `SolutionStack`。

您可以使用 `Compose Environments` API 搭配 Elastic Beanstalk 命令列界面 (EB CLI) AWS CLI、 或 SDK。如需 EB CLI 的說明，請參閱 [利用 EB CLI，以群組方式管理多個 Elastic Beanstalk 環境](ebcli-compose.md)。

## 使用 `Compose Environments` API
<a name="environment-mgmt-compose-example"></a>

例如，您可以建立名為 `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`) 應用程式組件[建立應用程式版本](applications-versions.md)之後，您可以用該版本名稱來呼叫 `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-dev` 與 `worker-dev`。API 會把 `EnvironmentName` 檔案中所指定的 `env.yaml` 和 `group name` 呼叫中所指定的 `Compose Environments` 選項串連在一起，中間以連字符號分隔，來做為環境的名稱。這兩個選項加上連字號的總長度，不得超過環境名稱長度的 23 個字元上限。

在 `front-dev` 環境中執行的應用程式，可以藉由讀取 `worker-dev` 變數，來取得連結至 `WORKERQUEUE` 環境的 Amazon SQS 佇列的名稱。如需關於環境連結的詳細資訊，請參閱[在 Elastic Beanstalk 環境之間建立連結](environment-cfg-links.md)。