

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

# 管理 Elastic Beanstalk 应用程序
<a name="applications"></a>

本章介绍如何管理和配置 Elastic Beanstalk 应用程序。使用的第一步 AWS Elastic Beanstalk 是创建一个在中代表您的 Web 应用程序的应用程序 AWS。在 Elastic Beanstalk 中，应用程序充当一种容器，用于容纳运行您的 Web 应用程序的环境、Web 应用程序的源代码的版本、已保存的配置、日志以及使用 Elastic Beanstalk 时创建的其他构件。

**创建应用程序**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后选择 **Create application**（创建应用程序）。

1. 使用屏幕上的表单提供应用程序名称。

1. （可选）提供描述并添加标签键和值。

1. 选择**创建**。

创建应用程序后，控制台会提示您为其创建一个环境。有关所有可用选项的详细信息，请参阅[创建 Elastic Beanstalk 环境](using-features.environments.md)。

如果您不再需要某个应用程序，则可删除它。

**警告**  
删除某个应用程序将终止所有关联的环境并删除属于该应用程序的所有应用程序版本和保存的配置。

**删除 应用程序**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications (应用程序)**，然后在列表中选择您的应用程序。

1. 选择 **Actions （操作)**，然后选择 **Delete application （删除应用程序)**。

**Topics**
+ [

# Elastic Beanstalk 应用程序管理控制台
](applications-console.md)
+ [

# 管理应用程序版本
](applications-versions.md)
+ [

# 创建 Elastic Beanstalk 应用程序源包
](applications-sourcebundle.md)
+ [

# 将 EB CLI 与 AWS CodeBuild
](eb-cli-codebuild.md)
+ [

# 标记应用程序
](applications-tagging.md)
+ [

# 标记 Elastic Beanstalk 应用程序资源
](applications-tagging-resources.md)

# Elastic Beanstalk 应用程序管理控制台
<a name="applications-console"></a>

本主题介绍如何使用 AWS Elastic Beanstalk 控制台管理应用程序、应用程序版本和保存的配置。

**访问应用程序管理控制台**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

   应用程序概述页面显示了一个列表，其中概述了与应用程序关联的所有环境。

1. 可以通过几种方法来继续操作：

   1. 从**操作**下拉菜单中，您可以选择应用程序管理操作之一：**创建环境**、**删除应用程序**、**查看应用程序版本**、**查看保存的配置**、**恢复已终止的环境**。

      要在此应用程序中启动环境，您可以直接选择**创建环境)**。有关更多信息，请参阅 [创建 Elastic Beanstalk 环境](using-features.environments.md)。

   1. 该页面在部署到环境的应用程序旁边列出了环境名称。选择环境名称以转至该环境的[环境管理控制台](environments-console.md)，可在其中配置、监控或管理该环境。

   1. 当您从列表中选择一个应用程序时，左侧导航窗格会列出该应用程序。
      +  在导航窗格中选择应用程序名称后面的 **Application versions (应用程序版本)**，以查看和管理应用程序的应用程序版本。

        应用程序版本是应用程序代码的上传版本。您可以上传新版本、将现有版本部署到任何应用程序环境或删除旧版本。有关更多信息，请参阅 [管理应用程序版本](applications-versions.md)。
      +  在导航窗格中选择应用程序名称后面的 **Saved configurations (已保存配置)**，以查看和管理从正在运行的环境中保存的配置。

        保存的配置是一组设置，可用于将环境的设置还原到上一个状态或创建具有相同设置的环境。有关更多信息，请参阅 [使用 Elastic Beanstalk 保存的配置](environment-configuration-savedconfig.md)。

# 管理应用程序版本
<a name="applications-versions"></a>

本主题介绍应用程序版本以及如何创建和管理版本。

只要您上传源代码，Elastic Beanstalk 就会创建应用程序版本。当您使用[环境管理控制台](environments-console.md)或 [EB CLI](eb-cli3.md) 创建环境或上传并部署代码时，通常会出现此情况。Elastic Beanstalk 会根据应用程序的生命周期策略以及当您删除应用程序时删除这些应用程序版本。有关应用程序生命周期策略的详细信息，请参阅[配置应用程序版本生命周期设置](applications-lifecycle.md)。

您也可以上传源包，而无需从[应用程序管理控制台](applications-console.md)或使用 EB CLI 命令 **[**eb appversion**](eb3-appversion.md)** 部署它。Elastic Beanstalk 将源包存储在 Amazon Simple Storage Service (Amazon S3) 中且不自动删除它们。

您可以在创建应用程序版本和编辑现有应用程序版本的标签时向其应用标签。有关更多信息，请参阅 [标记应用程序版本](applications-versions-tagging.md)。

## 创建应用程序版本
<a name="applications-versions.creating"></a>

您还可以使用 EB CLI 创建新的应用程序版本。有关更多信息，请参阅 *EB CLI 命令*章节中的 [**eb appversion**](eb3-appversion.md)。

**注意**  
随着时间的推移，应用程序可能会积累许多应用程序版本。要节省存储空间并避免达到[应用程序版本配额](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_elastic_beanstalk)，最好是删除不再需要的应用程序版本。

您在以下步骤中指定的文件与您的应用程序相关联。您可以将应用程序版本部署到新的或现有环境。

**创建新应用程序版本**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

1. 在导航窗格中，找到应用程序的名称，然后选择 **Application versions**（应用程序版本）。

1. 选择**上传**。使用屏幕上的表单上传应用程序的[源包](applications-sourcebundle.md)。
**注意**  
源包的文件大小限制为 500 MB。

1. （可选）提供简要说明，并添加标签键和值。

1. 选择**上传**。

## 删除应用程序版本
<a name="applications-versions.deleting"></a>

您还可以使用 EB CLI 删除应用程序版本。有关更多信息，请参阅 *EB CLI 命令*章节中的 [**eb appversion**](eb3-appversion.md)。

**注意**  
删除应用程序版本不会影响当前正在运行该版本的环境。

您还可以通过配置应用程序版本生命周期设置来将 Elastic Beanstalk 配置为自动删除旧版本。如果您配置了这些应用程序生命周期设置，它们将在您创建新的应用程序版本时应用。例如，如果您配置最多 25 个应用程序版本，那么当您上传第 26 个版本时，Elastic Beanstalk 将删除最旧的版本。如果您设置的最长使用期为 90 天，在上传新版本时，任何超过 90 天的版本都将被删除。有关更多信息，请参阅 [配置应用程序版本生命周期设置](applications-lifecycle.md)。

**删除应用程序版本**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

1. 在导航窗格中，找到应用程序的名称，然后选择 **Application versions**（应用程序版本）。

1. 选择要删除的一个或多个应用程序版本。

1. 选择 **Actions (操作)**，然后选择 **Delete (删除)**。

1. （可选）Amazon Simple Storage Service (Amazon S3) 存储桶中保留这些应用程序版本的应用程序源包，请取消选中 **Delete versions from Amazon S3 (从 Amazon S3 中删除版本)** 框。

1. 选择**删除**。

如果您未选择从 Amazon S3 中删除源包，则 Elastic Beanstalk 仍会从其记录中删除该版本。但是，源包保留在您的 [Elastic Beanstalk 存储桶](AWSHowTo.S3.md)中。应用程序版本配额仅适用于 Elastic Beanstalk 跟踪的版本。因此，您可以删除版本以保持在配额内，但将所有源包保留在 Amazon S3 中。

**注意**  
此应用程序版本配额不适用于源包，但您可能仍会产生 Amazon S3 费用，并且在需要个人信息的时间范围之外保留这类信息。Elastic Beanstalk 一定不会自动删除源包。当您不再需要源包时，应将其删除。

# 配置应用程序版本生命周期设置
<a name="applications-lifecycle"></a>

本主题介绍 Elastic Beanstalk 对给定环境中的应用程序版本应用的策略和配额，包括应用程序版本在环境中保留的时间。

每次您使用 Elastic Beanstalk 控制台或 EB CLI 上传应用程序的新版本时，Elastic Beanstalk 都会创建一个[应用程序版本](applications-versions.md)。如果不删除不再使用的版本，您最终会达到[应用程序版本配额](https://docs.aws.amazon.com/general/latest/gr/elasticbeanstalk.html#limits_elastic_beanstalk)，并且无法创建此应用程序的新版本。

通过向应用程序应用*应用程序版本生命周期策略*，您可以避免达到配额。生命周期策略可要求 Elastic Beanstalk 删除应用程序的旧版本，或当应用程序的版本总数超过指定数量时删除一些应用程序版本。

Elastic Beanstalk 在您每次创建新的应用程序版本时应用应用程序生命周期策略，并在每次应用生命周期策略时删除最多 100 个版本。Elastic Beanstalk 在创建新版本后删除旧版本，并且不会将新版本计入策略中定义的最大版本数。

Elastic Beanstalk 不删除环境当前正在使用的应用程序版本，或部署到在策略触发之前十周内终止的环境的应用程序版本。

应用程序版本配额适用于区域中的所有应用程序。如果您有多个应用程序，请为每个应用程序配置适当的生命周期策略，以免达到配额。例如，如果一个区域中有 10 个应用程序并且配额为 1000 个应用程序版本，则可考虑为所有应用程序设置配额为 99 个应用程序版本的生命周期策略，或在每个应用程序中设置其他值，只要总数少于 1000 个应用程序版本即可。Elastic Beanstalk 只在应用程序版本创建成功时应用策略，因此，如果您已达到限制，则必须在创建新版本前手动删除一些版本。

默认情况下，Elastic Beanstalk 会在 Amazon S3 中保留应用程序版本[源包](applications-sourcebundle.md)，以防数据丢失。您可以删除源包以节省空间。

你可以通过 Elastic Beanstalk CLI 来设置生命周期设置。 APIs有关详细信息[**eb appversion**](eb3-appversion.md)，请参阅、[CreateApplication](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_CreateApplication.html)（使用`ResourceLifecycleConfig`参数）和[UpdateApplicationResourceLifecycle](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateApplicationResourceLifecycle.html)。

## 在控制台中配置应用程序生命周期设置
<a name="applications-lifecycle-console"></a>

您可以在 Elastic Beanstalk 控制台中指定生命周期设置。

**指定应用程序生命周期设置**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

1. 在导航窗格中，找到应用程序的名称，然后选择 **Application versions**（应用程序版本）。

1. 选择**设置**。

1. 使用屏幕上的表单配置应用程序生命周期设置。

1. 选择**保存**。

在设置页上，可以执行以下操作。
+ 根据应用程序版本的总计数或应用程序版本的使用期限配置生命周期设置。
+ 指定在删除应用程序版本时是否从 S3 删除源包。
+ 指定删除应用程序版本的服务角色。要包括版本删除所需的全部权限，请选择名为 `aws-elasticbeanstalk-service-role` 的默认 Elastic Beanstalk 服务角色，或者使用 Elastic Beanstalk 托管服务策略的其他服务角色。有关更多信息，请参阅 [管理 Elastic Beanstalk 服务角色](iam-servicerole.md)。

# 标记应用程序版本
<a name="applications-versions-tagging"></a>

本主题介绍为 Elastic Beanstalk 应用程序版本添加标签的好处以及如何管理标签。

您可以将标签应用于您的 AWS Elastic Beanstalk 应用程序版本。标签是与资源关联的键值对。 AWS 有关 Elastic Beanstalk 资源标记、使用案例、标签键和值约束以及支持的资源类型的信息，请参阅[标记 Elastic Beanstalk 应用程序资源](applications-tagging-resources.md)。

您可以在创建应用程序版本时指定标签。在现有应用程序版本中，您可以添加或删除标签，以及更新现有标签的值。您最多可以为每个应用程序版本添加 50 个标签。

## 在创建应用程序版本期间添加标签
<a name="applications-versions-tagging.create"></a>

在使用 Elastic Beanstalk 控制台[创建环境](environments-create-wizard.md)并选择上传应用程序代码版本时，您可以指定标签键和值以与新应用程序版本关联。

您还可以使用 Elastic Beanstalk 控制台[上传应用程序版本](applications-versions.md)，而无需立即在环境中使用该版本。您可以在上传应用程序版本时指定标签键和值。

对于 AWS CLI 或其他基于 API 的客户端，使用命令中的`--tags`参数添加标签。**[create-application-version](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-application-version.html)**

```
$ aws elasticbeanstalk create-application-version \
      --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \
      --application-name my-app --version-label v1
```

使用 EB CLI 创建或更新环境时，将根据您部署的代码创建应用程序版本。通过 EB CLI 创建应用程序版本时，没有标记应用程序版本的直接方法。有关向现有应用程序版本添加标签的信息，请参阅以下部分。

## 管理现有应用程序版本的标签
<a name="applications-versions-tagging.manage"></a>

您可以在现有 Elastic Beanstalk 应用程序版本中添加、更新和删除标签。

**使用 Elastic Beanstalk 控制台管理应用程序版本的标签**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

1. 在导航窗格中，找到应用程序的名称，然后选择 **Application versions**（应用程序版本）。

1. 选择要管理的应用程序版本。

1. 选择 **Actions (操作)**，然后选择 **Manage tags (管理标签)**。

1. 使用屏幕上的表单添加、更新或删除标签。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

如果使用 EB CLI 更新应用程序版本，则可使用 **[eb tags](eb3-tags.md)** 来添加、更新、删除或列出标签。

例如，以下命令会列出应用程序版本中的标签。

```
~/workspace/my-app$ eb tags --list --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:applicationversion/my-app/my-version"
```

以下命令会更新标签 `mytag1` 并删除标签 `mytag2`。

```
~/workspace/my-app$ eb tags --update mytag1=newvalue --delete mytag2 \
      --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:applicationversion/my-app/my-version"
```

有关选项和更多示例的完整列表，请参阅 `eb tags`。

对于 AWS CLI 或其他基于 API 的客户端，使用**[list-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/list-tags-for-resource.html)**命令列出应用程序版本的标签。

```
$ aws elasticbeanstalk list-tags-for-resource --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:applicationversion/my-app/my-version"
```

使用 **[update-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-tags-for-resource.html)** 命令可在应用程序版本中添加、更新或删除标签。

```
$ aws elasticbeanstalk update-tags-for-resource \
      --tags-to-add Key=mytag1,Value=newvalue --tags-to-remove mytag2 \
      --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:applicationversion/my-app/my-version"
```

在 `--tags-to-add` 的 **update-tags-for-resource** 参数中指定要添加的标签和要更新的标签。添加了一个不存在的标签，更新了现有标签的值。

**注意**  
要在 Elastic Beanstalk 应用程序版本中使用某些 EB CLI 和 AWS CLI 命令，您需要该应用程序版本的 ARN。您可以使用下面的命令检索该 ARN。  

```
$ aws elasticbeanstalk describe-application-versions --application-name my-app --version-label my-version
```

# 创建 Elastic Beanstalk 应用程序源包
<a name="applications-sourcebundle"></a>

本主题介绍如何将应用程序源文件上传到源包中的 Elastic Beanstalk。它介绍了源包的要求、结构以及创建源包的方法。

使用 AWS Elastic Beanstalk 控制台部署新应用程序或应用程序版本时，需要将该应用程序的文件上传到*源包*中。源包必须符合以下要求：
+ 由单个 `ZIP` 文件或 `WAR` 文件组成 (您可以在 `WAR` 文件中包含多个 `ZIP` 文件)
+ 不超过 500 MB
+ 不包含父文件夹或顶级目录 (可包含子目录)

如果您要部署处理定期后台任务的工作线程应用程序，您的应用程序源包还必须包括一个 `cron.yaml` 文件。有关更多信息，请参阅 [定期任务](using-features-managing-env-tiers.md#worker-periodictasks)。

如果您使用 Elastic Beanstalk 命令行界面 (EB CLI)、适用于 Eclipse 的工具包或适用 AWS 于 Visual Studio 的工具 AWS 包来部署应用程序，则会自动正确构建 ZIP 或 WAR 文件。有关更多信息，请参阅 [设置 EB 命令行界面（EB CLI）来管理 Elastic Beanstalk](eb-cli3.md)、[使用 Elastic Beanstalk 部署 Java 应用程序](create_deploy_Java.md) 和 [的 AWS Toolkit for Visual Studio](dotnet-toolkit.md)。

**Topics**
+ [

## 从命令行创建源包
](#using-features.deployment.source.commandline)
+ [

## 使用 Git 创建源包
](#using-features.deployment.source.git)
+ [

## 在 Mac OS X Finder 或 Windows 资源管理器中压缩文件
](#using-features.deployment.source.gui)
+ [

## 创建 .NET 应用程序的源包
](#using-features.deployment.source.dotnet)
+ [

## 测试源包
](#using-features.deployment.source.test)

## 从命令行创建源包
<a name="using-features.deployment.source.commandline"></a>

使用 `zip` 命令创建源包。要包含隐藏的文件和文件夹，请使用如下所示的模式。

```
~/myapp$ zip ../myapp.zip -r * .[^.]*
  adding: app.js (deflated 63%)
  adding: index.js (deflated 44%)
  adding: manual.js (deflated 64%)
  adding: package.json (deflated 40%)
  adding: restify.js (deflated 85%)
  adding: .ebextensions/ (stored 0%)
  adding: .ebextensions/xray.config (stored 0%)
```

这可确保存档中包含 Elastic Beanstalk [配置文件](ebextensions.md)以及以句点开头的其他文件和文件夹。

对于 Tomcat Web 应用程序，请使用 `jar` 创建 Web 存档。

```
~/myapp$ jar -cvf myapp.war .
```

上述命令包含的隐藏文件可能会不必要地增加源包的大小。若要获得更多控制，可使用更详细的文件模式，或[用 Git 创建源包](#using-features.deployment.source.git)。

## 使用 Git 创建源包
<a name="using-features.deployment.source.git"></a>

如果使用 Git 管理应用程序源代码，请使用 `git archive` 命令创建源包。

```
$ git archive -v -o myapp.zip --format=zip HEAD
```

`git archive` 仅包含 Git 中存储的文件，不包含被忽略的文件和 Git 文件。这有助于使源包尽可能小。有关更多信息，请参阅 [git-archive 手册页面](http://git-scm.com/docs/git-archive)。

## 在 Mac OS X Finder 或 Windows 资源管理器中压缩文件
<a name="using-features.deployment.source.gui"></a>

在 Mac OS X Finder 或 Windows 资源管理器中创建 `ZIP` 文件时，请确保压缩这些文件和子文件夹本身，而不是压缩父文件夹。

**注意**  
Mac OS X 和基于 Linux 的操作系统上的图形用户界面 (GUI) 不显示名称以句点 (.) 开头的文件和文件夹。如果 `ZIP` 文件必须包含隐藏文件夹 (如 `.ebextensions`)，应使用命令行而不是 GUI 来压缩应用程序。有关在 Mac OS X 或基于 Linux 的操作系统上创建 `ZIP` 文件的命令行过程，请参阅[从命令行创建源包](#using-features.deployment.source.commandline)。

**Example**  
假设您有一个标记为 `myapp` 的 Python 项目文件夹，其中包含以下文件和子文件夹：  

```
myapplication.py
README.md
static/
static/css
static/css/styles.css
static/img
static/img/favicon.ico
static/img/logo.png
templates/
templates/base.html
templates/index.html
```
如上面的要求列表所述，源包在压缩时必须不包含父文件夹，因此其解压缩后的结构不包含额外的顶级目录。在此示例中，解压缩文件时不应创建 `myapp` 文件夹 (或在命令行处，不应向文件路径添加 `myapp` 段)。  
本主题均采用此示例文件结构说明如何压缩文件。

## 创建 .NET 应用程序的源包
<a name="using-features.deployment.source.dotnet"></a>

如果您使用 Visual Studio，则可以使用中包含的部署工具将.NET 应用程序部署 AWS Toolkit for Visual Studio 到 Elastic Beanstalk。有关更多信息，请参阅 [使用部署工具在.NET 中部署 Elastic Beanstalk 应用程序 AWS](deploy_NET_standalone_tool.md)。

如果需要手动为 .NET 应用程序创建源包，您不能直接创建一个包含项目目录的 `ZIP` 文件。您必须为适合部署到 Elastic Beanstalk 的项目创建一个 Web 部署包。可以使用几种方法创建部署包：
+ 使用 Visual Studio 中的 **Publish Web (发布 Web)** 向导创建部署包。有关更多信息，请转至[如何：在 Visual Studio 中创建 Web 部署程序包](http://msdn.microsoft.com/en-us/library/dd465323.aspx)。
**重要**  
创建 Web 部署包时，**Site name (网站名称)** 必须以 `Default Web Site` 开头。
+ 如果是 .NET 项目，则可以使用 **msbuild** 命令创建部署包，如下例所示。
**重要**  
`DeployIisAppPath` 参数必须以 `Default Web Site` 开头。

  ```
  C:/> msbuild <web_app>.csproj /t:Package /p:DeployIisAppPath="Default Web Site"
  ```
+ 如果是网站项目，则可以使用 IIS Web 部署工具创建部署包。有关更多信息，请参阅[打包和还原网站](http://www.iis.net/learn/publish/using-web-deploy/packaging-and-restoring-a-web-site)。
**重要**  
`apphostconfig` 参数必须以 `Default Web Site` 开头。

如果您要部署多个应用程序或 ASP.NET Core 应用程序，请将 `.ebextensions` 文件夹放在源包的根目录中，与应用程序包和清单文件并排放置：

```
~/workspace/source-bundle/
|-- .ebextensions
|   |-- environmentvariables.config
|   `-- healthcheckurl.config
|-- AspNetCore101HelloWorld.zip
|-- AspNetCoreHelloWorld.zip
|-- aws-windows-deployment-manifest.json
`-- VS2015AspNetWebApiApp.zip
```

## 测试源包
<a name="using-features.deployment.source.test"></a>

您可能需要先本地对源包进行测试，然后再将其上传到 Elastic Beanstalk。由于 Elastic Beanstalk 基本上使用命令行提取文件，因此最好是从命令行（而不是使用 GUI 工具）进行测试。

确保解压缩的文件出现在与存档本身相同的文件夹中，而不是出现在新的顶级文件夹或目录中。

# 将 EB CLI 与 AWS CodeBuild
<a name="eb-cli-codebuild"></a>

[AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/) 可编译源代码，运行单元测试，并生成可供部署的项目。您可以将 CodeBuild 与 EB CLI 结合使用来从应用程序的源代码自动构建应用程序。环境创建和之后的每个部署都将以构建步骤开始，然后部署生成的应用程序。

**注意**  
有些地区不提供 CodeBuild。Elastic Beanstalk 与 Elastic CodeBuild Beanstalk 之间的集成在这些地区不起作用。  
有关每个地区提供的 AWS 服务的信息，请参阅[区域表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

## 创建 应用程序
<a name="eb-cli-codebuild-using"></a>

**创建使用的 Elastic Beanstalk 应用程序 CodeBuild**

1. 在您的应用程序文件夹中加入 CodeBuild 编译规范文件。[https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html)

1. 使用特定于 Elastic Beanstalk 的选项添加一个 `eb_codebuild_settings` 条目到文件。

1. 在此文件夹中运行 [**eb init**](eb3-init.md)。
**注意**  
将 EB CLI 与一起使用时，请勿在*应用程序名称*中使用句点 (`.`` `) 或空格 () 字符 CodeBuild。

Elastic Beanstalk [CodeBuild 扩展了构建规范](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html)文件格式，增加了以下其他设置：

```
eb_codebuild_settings:
  CodeBuildServiceRole: role-name
  ComputeType: size
  Image: image
  Timeout: minutes
```

`CodeBuildServiceRole`  
 CodeBuild 可用于代表您与依赖服务交互的 ARN 或 AWS Identity and Access Management (IAM) AWS 服务角色的名称。该值为必填项。如果您忽略此值，任何后续的 **eb create** 或 **eb deploy** 命令都将失败。  
要了解有关为创建服务角色的更多信息 CodeBuild，请参阅*AWS CodeBuild 用户指南*中的[创建 CodeBuild服务角色](https://docs.aws.amazon.com/codebuild/latest/userguide/setting-up.html#setting-up-service-role)。  
您还需要权限才能 CodeBuild 自行执行操作。Elastic Bean **AdministratorAccessstalk-AWSElastic Beanstalk** 托管用户策略包括所有必需的操作权限。 CodeBuild 如果您不使用托管策略，请确保在用户策略中允许以下权限。  

```
  "codebuild:CreateProject",
  "codebuild:DeleteProject",
  "codebuild:BatchGetBuilds",
  "codebuild:StartBuild"
```
有关更多信息，请参阅 [管理 Elastic Beanstalk 用户策略](AWSHowTo.iam.managed-policies.md)。

`ComputeType`  
Docker 容器在 CodeBuild 构建环境中使用的资源量。有效值为 BUILD\$1 \$1SMALL、BU GENERAL1 ILD\$1 \$1MEDIUM 和 BU GENERAL1 ILD\$1LARGE GENERAL1

`Image`  
 CodeBuild 用于构建环境的 Docker Hub 或 Amazon ECR 镜像的名称。此 Docker 镜像应包含构建代码所需的所有工具和运行时库，并且应与应用程序的目标平台相匹配。 CodeBuild 管理和维护一组专门用于 Elastic Beanstalk 的镜像。建议您使用其中一个。有关详细信息，请参阅《*AWS CodeBuild 用户指南*》 CodeBuild中[提供的 Docker 镜像](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html)。  
`Image` 值是可选的。如果您省略此值，**eb init** 命令会尝试选择与目标平台最匹配的映像。此外，如果您在交互模式下运行 **eb init** 并且它无法为您选择映像，则会提示您选择一个映像。成功结束初始化时，**eb init** 将选中的映像写入到 `buildspec.yml` 文件中。

`Timeout`  
 CodeBuild 生成在超时之前运行的持续时间（以分钟为单位）。该值为可选项。有关有效值和默认值的详细信息，请参阅[中的创建构建项目 CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html)。  
此超时控制 CodeBuild 运行的最长持续时间，EB CLI 在创建应用程序版本的第一步中也会考虑该超时时间。它与您通过 [**eb create**](eb3-create.md) 或 [**eb deploy**](eb3-deploy.md) 命令的 `--timeout` 选项指定的值截然不同。后一个值控制 EB CLI 等待环境创建或更新的最大持续时间。

## 构建和部署您的应用程序代码
<a name="eb-cli-codebuild-using"></a>

每当需要部署应用程序代码时，EB CLI 都会使用运行构建，然后 CodeBuild 将生成的构建项目部署到您的环境中。当您使用 [**eb create**](eb3-create.md) 命令为应用程序创建 Elastic Beanstalk 环境时，以及您以后每次使用 [**eb deploy**](eb3-deploy.md) 命令将代码更改部署到环境时，就会发生上述这种情况。

如果该 CodeBuild 步骤失败，则不会开始创建或部署环境。

# 标记应用程序
<a name="applications-tagging"></a>

本主题介绍为 Elastic Beanstalk 应用程序添加标签的好处。它还提供了创建和管理应用程序标签的说明。标签是与资源关联的键值对。 AWS 有关 Elastic Beanstalk 资源标记、使用案例、标签键和值约束以及支持的资源类型的信息，请参阅[标记 Elastic Beanstalk 应用程序资源](applications-tagging-resources.md)。

您可以在创建应用程序时指定标签。在现有应用程序中，您可以添加或删除标签，以及更新现有标签的值。您最多可以为每个应用程序添加 50 个标签。

## 在创建应用程序期间添加标签
<a name="applications-tagging.create"></a>

在使用 Elastic Beanstalk 控制台[创建应用程序](applications.md)时，您可以在 **Create New Application (创建新应用程序)** 对话框中指定标签键和值。

如果使用 EB CLI 创建应用程序，则可以使用 **[eb init](eb3-init.md)** 的 `--tags` 选项添加标签。

```
~/workspace/my-app$ eb init --tags mytag1=value1,mytag2=value2
```

对于 AWS CLI 或其他基于 API 的客户端，使用命令中的`--tags`参数添加标签。**[create-application](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-application.html)**

```
$ aws elasticbeanstalk create-application \
      --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \
      --application-name my-app --version-label v1
```

## 管理现有应用程序的标签
<a name="applications-tagging.manage"></a>

可以在现有的 Elastic Beanstalk 应用程序中添加、更新和删除标签。

**在 Elastic Beanstalk 控制台中管理应用程序的标签**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Applications**（应用程序），然后从列表中选择应用程序的名称。

1. 选择 **Actions (操作)**，然后选择 **Manage tags (管理标签)**。

1. 使用屏幕上的表单添加、更新或删除标签。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

如果使用 EB CLI 更新应用程序，则可使用 **[eb tags](eb3-tags.md)** 来添加、更新、删除或列出标签。

例如，以下命令会列出应用程序中的标签。

```
~/workspace/my-app$ eb tags --list --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:application/my-app"
```

以下命令会更新标签 `mytag1` 并删除标签 `mytag2`。

```
~/workspace/my-app$ eb tags --update mytag1=newvalue --delete mytag2 \
      --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:application/my-app"
```

有关选项和更多示例的完整列表，请参阅 `eb tags`。

对于 AWS CLI 或其他基于 API 的客户端，使用**[list-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/list-tags-for-resource.html)**命令列出应用程序的标签。

```
$ aws elasticbeanstalk list-tags-for-resource --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:application/my-app"
```

使用 **[update-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-tags-for-resource.html)** 命令可在应用程序中添加、更新或删除标签。

```
$ aws elasticbeanstalk update-tags-for-resource \
      --tags-to-add Key=mytag1,Value=newvalue --tags-to-remove mytag2 \
      --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:application/my-app"
```

在 `--tags-to-add` 的 **update-tags-for-resource** 参数中指定要添加的标签和要更新的标签。添加了一个不存在的标签，更新了现有标签的值。

**注意**  
要在 Elastic Beanstalk 应用程序中使用某些 EB CLI 和 AWS CLI 命令，您需要该应用程序的 ARN。您可以使用下面的命令检索该 ARN。  

```
$ aws elasticbeanstalk describe-applications --application-names my-app
```

# 标记 Elastic Beanstalk 应用程序资源
<a name="applications-tagging-resources"></a>

本主题介绍在 Elastic Beanstalk 应用程序资源中使用标签的好处以及这样做的限制。它还介绍了如何创建和管理应用程序资源的标签。

您可以将标签应用于 AWS Elastic Beanstalk 应用程序的资源。标签是与资源关联的键值对。 AWS 标签可帮助您分类资源。如果您将许多资源作为多个 AWS 应用程序的一部分进行管理，则它们特别有用。

以下是对 Elastic Beanstalk 资源使用标记的一些方法：
+ *部署阶段* - 标识与应用程序的不同阶段关联的资源，例如开发、测试和生产。
+ *成本分配*-使用成本分配报告来跟踪与各种费用账户相关的 AWS 资源使用情况。这些报告包括已标记和未标记的资源，它们根据标签来汇总成本。有关成本分配报告如何使用标签的信息，请参阅 *AWS Billing and Cost Management 用户指南*中的[为自定义账单报告使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation.html)。
+ *访问控制* - 使用标签管理对请求和资源的权限。例如，只能创建和管理测试环境的用户应只能访问测试阶段的资源。有关更多信息，请参阅 [使用标签控制对 Elastic Beanstalk 资源的访问策略中的标签条件示例](AWSHowTo.iam.policies.access-tags.md)。

您最多可以为每个 资源添加 50 个标签。环境略有不同：Elastic Beanstalk 会向环境添加三个默认系统标签，您无法编辑或删除这些标签。除了默认标签之外，最多可向每个环境中添加 47 个附加标签。

以下约束适用于标签键和值：
+ 键和值可以包含字母、数字、空格和以下符号：`_ . : / = + - @`
+ 键最多可包含 127 个字符。值最多可包含 255 个字符。
**注意**  
这些长度限制适用于 UTF-8 格式的 Unicode 字符。对于其他多字节编码，限制可能会更低。
+ 键区分大小写。
+ 键不能以 `aws:` 或 `elasticbeanstalk:` 开头。

## 您可以为之添加标签的资源
<a name="applications-tagging-resources.supported"></a>

以下是您可以标记的 Elastic Beanstalk 资源类型，以及为每种资源管理标签的特定主题的链接：
+ [应用程序](applications-tagging.md)
+ [环境](using-features.tagging.md)
+ [应用程序版本](applications-versions-tagging.md)
+ [保存的配置](environment-configuration-savedconfig-tagging.md)

# 标签传播到启动模板
<a name="applications-tagging-resources.launch-templates"></a>

Elastic Beanstalk 提供了便于将环境标签传播到启动模板的选项。借助此选项，可继续支持在启动模板中使用基于标签的访问控制（TBAC）。

**注意**  
正在逐步淘汰启动配置，取而代之的是启动模板。有关更多信息，请参阅 *Amazon A EC2 uto Scaling 用户指南*中的[启动配置](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-configurations.html)。

为了防止正在运行的 EC2 实例停机， CloudFormation 不会将标签传播到现有的启动模板。如果发生需要为环境资源添加标签的应用场景，则您可以启用 Elastic Beanstalk 来为这些资源创建带有标签的启动模板。为此，请将 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 命名空间中的 `LaunchTemplateTagPropagationEnabled` 选项设置为 `true`。默认值为 `false`。

以下[配置文件](ebextensions.md)示例可以将标签传播到启动模板。

```
option_settings:
  aws:autoscaling:launchconfiguration:
    LaunchTemplateTagPropagationEnabled: true
```

Elastic Beanstalk 只能将标签传播到以下资源的启动模板：
+ EBS 卷
+ EC2 实例 
+ EC2 网络接口
+ CloudFormation 启动定义资源的模板

之所以存在此限制，是因为 CloudFormation 仅允许在为特定资源创建模板时使用标签。有关更多信息，请参阅[TagSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html)《*AWS CloudFormation 用户指南》*。

**重要**  
将现有环境的此选项值从更改 `false` 为 `true` 对于先前存在的标签可能是一项重大更改。
启用此功能后，标签的传播将需要 EC2 更换，这可能会导致停机。您可以启用*滚动更新*以批量应用配置更改，并防止在更新过程中出现停机。有关更多信息，请参阅 [配置更改](environments-updating.md)。

有关启动模板的更多信息，请参阅以下内容：
+ 在 *Amazon A EC2 uto Scaling 用户指南*中@@ [启动模板](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-templates.html)
+ 《AWS CloudFormation 用户指南》**中的[使用模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)
+ 《AWS CloudFormation 用户指南》**中的 [Elastic Beanstalk 模板片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-elasticbeanstalk.html)