

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

# 使用 EB CLI 以组的形式管理多个 Elastic Beanstalk 环境
<a name="ebcli-compose"></a>

您可以使用 EB CLI 创建环境组，每个 Amazon Elastic Beanstalk 环境组运行面向服务的架构应用程序的独立组件。EB CLI 使用 [ComposeEnvironments](https://docs.amazonaws.cn/elasticbeanstalk/latest/api/API_ComposeEnvironments.html)API 来管理此类群组。

**注意**  
环境组不同于多容器 Docker 环境中的多个容器。使用环境组，您应用程序的各个组件运行在单独的 Elastic Beanstalk 环境中，具有自己的专用 Amazon EC2 实例集。每个组件可以单独扩展。借助多容器 Docker，您可以将应用程序的多个组件组合成单个环境。所有组件共享相同的一组 Amazon EC2 实例，每个实例运行多个 Docker 容器。根据应用程序的需求，选择这些架构之一。  
有关多容器 Docker 的详细信息，请参阅[在 Elastic Beanstalk 中使用 ECS 托管 Docker 平台分支](create_deploy_docker_ecs.md)。

将您的应用程序组件组织到以下文件夹结构中：

```
~/{{project-name}}
|-- {{component-a}}
|   `-- env.yaml
`-- {{component-b}}
    `-- env.yaml
```

在每个子文件夹中，都包含在自有环境中运行的独立应用程序组件的源代码，以及一个名为 `env.yaml` 的环境定义文件。有关 `env.yaml` 格式的详细信息，请参阅[环境清单 (`env.yaml`)](environment-cfg-manifest.md)。

要使用 `Compose Environments` API，首先要从项目文件夹中运行 **eb init**，同时利用 `--modules` 选项通过各组件所在文件夹的名称来指定每个组件。

```
~/workspace/project-name$ eb init --modules {{component-a component-b}}
```

EB CLI 会提示您[配置每个组件](eb-cli3-configuration.md)，然后在各组件文件夹中创建 `.elasticbeanstalk` 目录。EB CLI 不会在父目录中创建配置文件。

```
~/{{project-name}}
|-- {{component-a}}
|   |-- .elasticbeanstalk
|   `-- env.yaml
`-- {{component-b}}
    |-- .elasticbeanstalk
    `-- env.yaml
```

然后，使用要创建的环境的列表运行 **eb create** 命令，每个组件对应一个环境：

```
~/workspace/project-name$ eb create --modules {{component-a component-b}} --env-group-suffix {{group-name}}
```

此命令会为每个组件创建一个环境。环境名是用连字符将 `EnvironmentName` 文件中指定的 `env.yaml` 与组名串联起来得到的。这两个选项加连字符的总长度不得超过 23 个字符的环境名最大长度限制。

要更新环境，请使用 **eb deploy** 命令：

```
~/workspace/project-name$ eb deploy --modules {{component-a component-b}}
```

您可以单独更新每个组件，也可以成组更新。可使用 `--modules` 选项指定要更新的组件。

EB CLI 将您随 **eb create** 使用的组名称存储在 `branch-defaults` 下的 EB CLI 配置文件的 `/.elasticbeanstalk/config.yml` 部分中。要将您的应用程序部署到不同的组，请在运行 `--env-group-suffix` 时使用 **eb deploy** 选项。如果指定的组不存在，EB CLI 会创建一个新的环境组。

```
~/workspace/project-name$ eb deploy --modules {{component-a component-b}} --env-group-suffix {{group-2-name}}
```

要终止环境，请在每个模块的文件夹中运行 **eb terminate**。默认情况下，如果您尝试终止另一正在运行的环境所依赖的环境，EB CLI 会显示一条错误。请先终止依赖环境，或使用 `--ignore-links` 选项覆盖默认行为。

```
~/workspace/project-name/component-b$ eb terminate --ignore-links
```