

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

# Elastic Beanstalk 自定义平台（已停用）
自定义平台（已停用）

**注意**  
[2022 年 7 月 18 日，](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**这包括自定义平台。Elastic Beanstalk 不支持自定义平台。有关停用 Amazon Linux AMI 的 Elastic Beanstalk 的更多信息，请参阅 [平台停用常见问题](using-features.migration-al.FAQ.md)。

本文档中保留了此主题，供在 ElasticBeanstalk 自定义平台功能停用之前使用该功能的客户参考。过去，Elastic Beanstalk 定制平台支持使用亚马逊 Linux AMI、RHEL 7、RHEL 6 或 Ubuntu 16.04 基础构建 AMI。 AMIsElastic Beanstalk 不再支持这些操作系统。若要详细了解不再支持的自定义平台功能，请展开以下主题。



## 自定义平台


从很多方面而言，自定义平台都是比[自定义映像](using-features.customenv.md)更高级的自定义方式。您可通过自定义平台从头开始开发整个新平台，自定义 Elastic Beanstalk 在平台实例上运行的操作系统、附加软件和脚本。如果 Elastic Beanstalk 并未针对应用程序使用的语言或其他基础设施软件提供托管平台，您也可以灵活地为应用程序构建一个平台。自定义映像是由您修改 Amazon Machine Image (AMI) 以便与现有 Elastic Beanstalk 平台结合使用，而 Elastic Beanstalk 仍旧提供平台脚本，并控制平台的软件堆栈。此外，对于自定义平台，您使用自动化、脚本化的方式创建自定义并进行维护；而自定义映像是您对正在运行的实例进行手动更改。

要创建自定义平台，您需要基于所支持的操作系统 Ubuntu、RHEL 或 Amazon Linux（有关确切版本号，请参阅 [Platform.yaml 文件格式](#platform-yaml-format)中的 `flavor` 条目）之一构建 AMI 并进一步添加自定义。您可以使用 Packer 创建自己的 Elastic Beanstalk [平台](https://www.packer.io/)，这是一款用于为许多平台创建机器映像的开源工具， AMIs 包括用于亚马逊弹性计算云 (Amazon) 的机器映像。 EC2Elastic Beanstalk 平台包括被配置为运行一组软件以支持应用程序的 AMI，以及可以包含自定义配置选项和默认配置选项设置的元数据。

Elastic Beanstalk 将 Packer 作为单独的内置平台进行管理，您无需担心 Packer 的配置和版本。

您可以通过为 Elastic Beanstalk 提供 Packer 模板、脚本及供模板调用以构建 AMI 的文件来创建平台。这些组件使用指定模板和元数据的[平台定义文件](#custom-platform-creating)打包成一个称作[平台定义存档](#custom-platforms-pda)的 ZIP 存档。

在创建自定义平台时，您可以启动单一实例环境，无需运行 Packer 的弹性 IP。Packer 可以随即启动另一个实例来构建映像。您可以对多个平台及每个平台的多个版本重用此环境。

**注意**  
自定义平台因 Amazon 地区而异。如果您需要在多个区域中使用 Elastic Beanstalk，则必须在每个区域中单独创建平台。  
在某些情况下，系统不会清理 Packer 启动的实例，必须手动将其终止。要了解如何手动清理这些实例，请参阅 [Packer 实例清理](#custom-platforms-packercleanup)。

您账户中的用户可以通过在创建环境期间指定[平台 ARN](AWSHowTo.iam.policies.arn.md) 来使用您的自定义平台。 ARNs 它们由您用于创建自定义平台的**eb platform create**命令返回。

您每次构建自定义平台时，Elastic Beanstalk 都会创建新的平台版本。用户可以通过名称指定平台以只获取此平台的最新版本，也可以包含版本号来获取特定的版本。

例如，要部署 ARN 为 **MyCustomPlatformARN** 的自定义平台的最新版本（可以是 3.0 版），您的 EB CLI 命令行将如下所示：

```
eb create -p MyCustomPlatformARN
```

要部署 2.1 版，您的 EB CLI 命令行将如下所示：

```
eb create -p MyCustomPlatformARN --version 2.1
```

您可以在创建自定义平台版本和编辑现有自定义平台版本的标签时向其应用标签。有关更多信息，请参阅 [标记自定义平台版本](#custom-platforms-tagging)。

### 创建自定义平台


要创建自定义平台，应用程序的根目录必须包含一个平台定义 `platform.yaml`，定义用于创建自定义平台的生成器的类型。此文件的格式在[Platform.yaml 文件格式](#platform-yaml-format)中描述。您可以从头开始创建自定义平台，或使用某个[示例自定义平台](#custom-platforms-sample)作为起始点。

### 使用示例自定义平台


创建您自己的自定义平台的一个替代方法是使用一个平台定义存档示例来引导您的自定义平台。您必须先在示例中配置然后才能使用的唯一项目是源 AMI 和区域。

**注意**  
请勿在生产中使用未经修改的示例自定义平台。示例的目的是展示可用于自定义平台的一些功能，但是它们没有被强化以用于生产环境。

[NodePlatform\$1Ubuntu.zip](https://github.com/awslabs/eb-custom-platforms-samples/releases/download/v1.0.4/NodePlatform_Ubuntu.zip)  
此自定义平台基于 **Ubuntu 16.04** 并支持 **Node.js 4.4.4**。我们在本节的示例中使用此自定义平台。

[NodePlatform\$1RHEL.zip](https://github.com/awslabs/eb-custom-platforms-samples/releases/download/v1.0.4/NodePlatform_RHEL.zip)  
此自定义平台基于 **RHEL 7.2** 并支持 **Node.js 4.4.4**。

[NodePlatform\$1 AmazonLinux .zip](https://github.com/awslabs/eb-custom-platforms-samples/releases/download/v1.0.4/NodePlatform_AmazonLinux.zip)  
此自定义平台基于 **Amazon Linux 2016.09.1** 并支持 **Node.js 4.4.4**。

[TomcatPlatform\$1Ubuntu.zip](https://github.com/awslabs/eb-custom-platforms-samples/releases/download/v1.0.4/TomcatPlatform_Ubuntu.zip)  
此自定义平台基于 **Ubuntu 16.04** 并支持 **Tomcat 7/Java 8**。

[CustomPlatform\$1 NodeSampleApp .zip](https://github.com/awslabs/eb-custom-platforms-samples/releases/download/v1.0.4/CustomPlatform_NodeSampleApp.zip)  
一个使用 **express** 和 **ejs** 显示静态网页的 Node.js 示例。

[CustomPlatform\$1 TomcatSampleApp .zip](https://github.com/awslabs/eb-custom-platforms-samples/releases/download/v1.0.4/CustomPlatform_TomcatSampleApp.zip)  
一个在部署时显示静态网页的 Tomcat 示例。

下载示例平台定义存档：`NodePlatform_Ubuntu.zip`。此文件包含平台定义文件、Packer 模板、Packer 在映像创建期间运行的脚本以及 Packer 在平台创建期间复制到生成器实例上的脚本和配置文件。

**Example NodePlatform\$1Ubuntu.zip**  

```
|-- builder                 Contains files used by Packer to create the custom platform
|-- custom_platform.json    Packer template
|-- platform.yaml           Platform definition file
|-- ReadMe.txt              Briefly describes the sample
```

平台定义文件 `platform.yaml` 告知 Elastic Beanstalk Packer 模板 `custom_platform.json` 的名称。

```
version: "1.0"

provisioner:
  type: packer
  template: custom_platform.json
  flavor: ubuntu1604
```

Packer 模板告诉 Packer 如何 AMIs 为平台构建，使用 [Ubuntu AMI](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/AMIs.html) 作为 HVM 实例类型的平台映像的基础。`provisioners` 部分告知 Packer 将存档中 `builder` 文件夹内的所有文件复制到实例，并在实例上运行 `builder.sh` 脚本。脚本完成后，Packer 从修改的实例创建映像。

Elastic Beanstalk 创建了三个可用于在 Packer 中标记的环境变量： AMIs 

AWS\$1EB\$1platform\$1ARN  
自定义平台的 ARN。

AWS\$1EB\$1平台\$1名称  
自定义平台的名称。

AWS\$1EB\$1平台\$1版本  
自定义平台的版本。

示例 `custom_platform.json` 文件使用这些变量来定义它在脚本中使用的以下值：
+ `platform_name`，由 `platform.yaml` 设置
+ `platform_version`，由 `platform.yaml` 设置
+ `platform_arn`，由主生成脚本 `builder.sh` 设置，该脚本显示在示例 `custom_platform.json` 文件的结尾。

`custom_platform.json` 文件包含两个您必须为其提供值的属性：`source_ami` 和 `region`。有关选择正确的 AMI 和区域值的详细信息，请参阅在*eb-custom-platforms-samples* GitHub 存储库中[更新 Packer 模板](https://github.com/aws-samples/eb-custom-platforms-samples#updating-packer-template)。

**Example custom\$1platform.json**  

```
{
  "variables": {
    "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}",
    "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}",
    "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}"
  },
  "builders": [
    {
      ...
      "region": "",
      "source_ami": "",
      ...
    }
  ],
  "provisioners": [
    {...},
    {
      "type": "shell",
      "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}",
      "scripts": [
        "builder/builder.sh"
      ]
    }
  ]
}
```

根据要对实例进行的修改，您在平台定义存档中包含的脚本和其他文件将大不相同。示例平台包含以下脚本：
+ `00-sync-apt.sh` – 已注释掉：`apt -y update`。我们已将此命令注释掉，因为它会提示用户输入信息，这样会中断自动软件包更新。Ubuntu 可能会出现此问题。但是，仍建议运行 `apt -y update`，这是最佳实践。出于此原因，我们在示例脚本中留下了这条命令作为参考。
+ `01-install-nginx.sh` – 安装 nginx。
+ `02-setup-platform.sh` – 安装 `wget`、`tree` 和 `git`。将挂钩和[日志记录配置](using-features.logging.md)复制到实例，并创建以下目录：
  + `/etc/SampleNodePlatform` – 在部署期间上传容器配置文件的位置。
  + `/opt/elasticbeanstalk/deploy/appsource/` – 其中 `00-unzip.sh` 脚本在部署期间上传应用程序代码（有关此脚本的信息，请参阅 [适用于 Elastic Beanstalk 环境的平台脚本工具](custom-platforms-scripts.md) 部分）。
  + `/var/app/staging/` – 部署期间应用程序源代码在此进行处理。
  + `/var/app/current/` – 应用程序源代码处理后在此运行。
  + `/var/log/nginx/healthd/` – [增强型运行状况代理](health-enhanced.md#health-enhanced-agent)将日志写入到此位置。
  + `/var/nodejs` – 在部署期间上传 Node.js 文件的位置。

通过 EB CLI 使用示例平台定义存档创建您的第一个自定义平台。

**创建自定义平台**

1. [安装 EB CLI](eb-cli3.md#eb-cli3-install)。

1. 创建一个目录，您将在其中提取示例自定义平台。

   ```
   ~$ mkdir ~/custom-platform
   ```

1. 将 `NodePlatform_Ubuntu.zip` 提取到目录，然后更改为提取的目录。

   ```
   ~$ cd ~/custom-platform
   ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip
   ~/custom-platform$ cd NodePlatform_Ubuntu
   ```

1. 编辑 `custom_platform.json` 文件，并为 `source_ami` 和 `region` 属性提供值。有关详细信息，请参阅[更新 Packer 模板](https://github.com/aws-samples/eb-custom-platforms-samples#updating-packer-template)。

1. 运行 [**eb platform init**](eb3-platform.md#eb3-platform-init) 并按照提示初始化平台存储库。

   您可以将 **eb platform** 缩短为 **ebp**。
**注意**  
Windows PowerShell 使用**ebp**作为命令别名。如果你在 Windows 中运行 EB CLI PowerShell，请使用以下命令的长格式：**eb platform**。

   ```
   ~/custom-platform$ eb platform init
   ```

   该命令还会在当前目录中创建目录 `.elasticbeanstalk` 并将配置文件 `config.yml` 添加到该目录中。请勿更改或删除此文件，因为 Elastic Beanstalk 在创建自定义平台时依赖此文件。

   默认情况下，**eb platform init** 使用当前文件夹的名称作为自定义平台的名称，在此示例中这将是 `custom-platform`。

1. 运行 [**eb platform create**](eb3-platform.md#eb3-platform-create) 以启动 Packer 环境并获取自定义平台的 ARN。稍后您需要此值从自定义平台创建环境。

   ```
   ~/custom-platform$ eb platform create
   ...
   ```

   默认情况下，Elastic Beanstalk 为自定义平台创建实例配置文件 `aws-elasticbeanstalk-custom-platform-ec2-role`。但是，如果您想使用现有实例配置文件，请向 [**eb platform create**](eb3-platform.md#eb3-platform-create) 命令中添加选项 `-ip INSTANCE_PROFILE`。
**注意**  
如果您使用 Elastic Beanstalk 默认实例配置文件 `aws-elasticbeanstalk-ec2-role`，Packer 将无法创建自定义平台。

   EB CLI 会显示 Packer 环境的事件输出，直到构建完成。您可以按 **Ctrl\$1C** 来退出事件视图。

1. 您可以使用 [**eb platform logs**](eb3-platform.md#eb3-platform-logs) 命令检查日志有无错误。

   ```
   ~/custom-platform$ eb platform logs
   ...
   ```

1. 稍后，您可以使用 [**eb platform events**](eb3-platform.md#eb3-platform-events) 来检查过程。

   ```
   ~/custom-platform$ eb platform events
   ...
   ```

1. 使用 [**eb platform status**](eb3-platform.md#eb3-platform-status) 检查平台状态。

   ```
   ~/custom-platform$ eb platform status
   ...
   ```

操作完成后，您就拥有了一个可以用于启动 Elastic Beanstalk 环境的平台。

在从控制台创建环境时，可以使用自定义平台。请参阅[创建新环境向导](environments-create-wizard.md)。

**在您的自定义平台上启动环境**

1. 为您的应用程序创建一个目录。

   ```
   ~$ mkdir custom-platform-app
   ~$ cd ~/custom-platform-app
   ```

1. 初始化应用程序存储库。

   ```
   ~/custom-platform-app$ eb init
   ...
   ```

1. 下载示例应用程序 [NodeSampleApp.zip。](samples/NodeSampleApp.zip)

1. 提取示例应用程序。

   ```
   ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
   ```

1. 运行**eb create -p *CUSTOM-PLATFORM-ARN***，**eb platform create**命令返回*CUSTOM-PLATFORM-ARN*的 ARN 在哪里，启动运行您的自定义平台的环境。

   ```
   ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN
   ...
   ```

### 平台定义存档内容


平台定义存档是相当于[应用程序源包](applications-sourcebundle.md)的平台。平台定义存档是一种 ZIP 文件，其中包含平台定义文件、Packer 模板以及 Packer 模板用来创建平台的脚本和文件。

**注意**  
当您使用 EB CLI 创建自定义平台时，EB CLI 将从平台存储库中的文件和文件夹创建平台定义存档，因此您不需要手动创建存档。

平台定义文件是 YAML 格式的文件，名称必须为 `platform.yaml` 并且位于平台定义存档的根目录中。有关平台定义文件中支持的必需和可选键的列表，请参阅 [创建自定义平台](#custom-platform-creating)。

您不必以特定方式命名 Packer 模板，但文件的名称必须与平台定义文件中指定的配置器模板匹配。有关创建 Packer 模板的说明，请参阅官方 [Packer 文档](https://www.packer.io/docs/templates/introduction.html)。

您的平台定义存档中的其他文件是模板在创建 AMI 之前自定义实例所要使用的脚本和文件。

### 自定义平台挂钩


Elastic Beanstalk 在自定义平台上为挂钩使用了标准化的目录结构。挂钩是在生命周期事件期间运行以响应管理操作的脚本，如启动环境中的实例时、当用户启动部署或使用重新启动应用程序服务器功能时。

将您希望挂钩触发的脚本置于 `/opt/elasticbeanstalk/hooks/` 文件夹的一个子文件夹中。

**警告**  
*不支持在托管平台上使用自定义平台挂钩。*自定义平台挂钩是为自定义平台设计的。在 Elastic Beanstalk 托管平台上，它们的行为可能不同或存在一些问题，而且其行为可能因平台而异。在 Amazon Linux AMI 平台（Amazon Linux 2 以前的版本）上，在某些情况下，它们可能仍然有用；请谨慎使用它们。  
自定义平台挂钩是 Amazon Linux AMI 平台上存在的旧功能。在 Amazon Linux 2 平台上，`/opt/elasticbeanstalk/hooks/` 文件夹中的自定义平台挂钩将完全中断。Elastic Beanstalk 不会读取或执行它们。Amazon Linux 2 平台支持一种新型平台挂钩，专门设计用于扩展 Elastic Beanstalk 托管平台。您可以将自定义脚本和程序直接添加到应用程序源包的挂钩目录中。Elastic Beanstalk 在不同实例预置阶段运行它们。有关更多信息，请在 [扩展 Elastic Beanstalk Linux 平台](platforms-linux-extend.md) 中展开*平台挂钩*部分。

挂钩组织到以下文件夹中：
+ `appdeploy` - 在应用程序部署期间运行的脚本。Elastic Beanstalk 在启动新实例时以及在客户端启动新版本部署时执行应用程序部署。
+ `configdeploy` – 当客户端执行影响实例上的软件配置的配置更新（如通过设置环境属性或启用到 Amazon S3 的日志轮换）时运行的脚本。
+ `restartappserver` - 当客户端执行重新启动应用程序服务器操作时运行的脚本。
+ `preinit` - 在实例引导启动期间运行的脚本。
+ `postinit` - 在实例引导启动后运行的脚本。

`appdeploy`、`configdeploy` 和 `restartappserver` 文件夹包含 `pre`、`enact` 和 `post` 子文件夹。在操作的每个阶段，`pre` 文件夹、`enact` 文件夹和 `post` 文件夹中的所有脚本依次按字母顺序运行。

在启动实例时，Elastic Beanstalk 会按顺序运行 `preinit`、`appdeploy` 和 `postinit`。在到正在运行的实例的后续部署中，Elastic Beanstalk 会运行 `appdeploy` 挂钩。`configdeploy` 挂钩在用户更新实例软件配置设置时运行。`restartappserver` 挂钩只在用户执行应用程序服务器重新启动时运行。

当脚本遇到错误时，它们能以非零状态退出并写入 `stderr`，以使操作失败。写入 `stderr` 的消息将显示在操作失败时输出的事件中。Elastic Beanstalk 还会将此信息捕获到日志文件 `/var/log/eb-activity.log` 中。如果您不想使操作失败，请返回 0（零）。写入 `stderr` 或 `stdout` 的消息会显示在[部署日志](using-features.logging.md)中，但除非操作失败，否则不会显示在事件流中。

### Packer 实例清理


在某些情况下，例如在 Packer 生成器进程完成之前将其停止，Packer 启动的实例将不会被清理。这些实例不是 Elastic Beanstalk 环境的一部分，只能通过使用亚马逊服务来查看和终止。 EC2 

**手动清理这些实例**

1. 打开 [Amazon EC2 控制台](https://console.amazonaws.cn/ec2/)。

1. 确保您所在的 Amazon 区域与使用 Packer 创建实例的区域相同。

1. 在**资源**下，选择*N ***正在运行的实例**，其中*N*表示正在运行的实例的数量。

1. 在查询文本框中单击。

1. 选择 **Name (名称)** 标签。

1. 输入 **packer**。

   查询应类似于：**tag:Name: packer**

1. 选择符合查询条件的任何实例。

1. 如果**实例状态**是**正在运行**，请依次选择**操作**、**实例状态**、**停止**，然后再依次选择**操作**、**实例状态**、**终止**。

### Platform.yaml 文件格式
Platform.yaml 格式

`platform.yaml` 文件采用以下格式。

```
version: "version-number"

provisioner:
   type: provisioner-type
   template: provisioner-template
   flavor: provisioner-flavor
        
metadata:
   maintainer: metadata-maintainer
   description: metadata-description
   operating_system_name: metadata-operating_system_name
   operating_system_version: metadata-operating_system_version
   programming_language_name: metadata-programming_language_name
   programming_language_version: metadata-programming_language_version
   framework_name: metadata-framework_name
   framework_version: metadata-framework_version

option_definitions:
   - namespace: option-def-namespace
     option_name: option-def-option_name
     description: option-def-description
     default_value: option-def-default_value

option_settings:
   - namespace: "option-setting-namespace"
     option_name: "option-setting-option_name"
     value: "option-setting-value"
```

使用以下值替换占位符：

*version-number*  
必需。YAML 定义的版本。必须是 **1.0**。

*provisioner-type*  
必需。用于创建自定义平台的生成器的类型。必须是 **packer**。

*provisioner-template*  
必需。包含设置的 JSON 文件*provisioner-type*。

*provisioner-flavor*  
可选。用于 AMI 的基本操作系统。下列情况之一：    
amazon (默认)  
Amazon Linux。如果未指定，则是创建该平台时的 Amazon Linux 的最新版本。  
Amazon Linux 2 不是支持的操作系统版本。  
ubuntu1604  
Ubuntu 16.04 LTS  
rhel7  
RHEL 7  
rhel6  
RHEL 6

*metadata-maintainer*  
可选。平台所有者的联系信息 (100 个字符)。

*metadata-description*  
可选。平台的描述 (2000 个字符)。

*metadata-operating\$1system\$1name*  
可选。平台的操作系统的名称 (50 个字符)。在筛选 [ListPlatformVersions](https://docs.amazonaws.cn/elasticbeanstalk/latest/api/API_ListPlatformVersions.html)API 的输出时，此值可用。

*metadata-operating\$1system\$1version*  
可选。平台的操作系统的版本 (20 个字符)。

*metadata-programming\$1language\$1name*  
可选。平台支持的编程语言 (50 个字符)

*metadata-programming\$1language\$1version*  
可选。平台的语言的版本 (20 个字符)。

*metadata-framework\$1name*  
可选。平台使用的 Web 框架的名称 (50 个字符)。

*metadata-framework\$1version*  
可选。平台的 Web 框架的版本 (20 个字符)。

*option-def-namespace*  
可选。`aws:elasticbeanstalk:container:custom` 下的命名空间（100 个字符）。

*option-def-option\$1name*  
可选。选项的名称 (100 个字符)。您可以定义最多 50 个由平台向用户提供的自定义配置选项。

*option-def-description*  
可选。选项的描述 (1024 个字符)。

*option-def-default\$1value*  
可选。在用户未指定值时使用的默认值。  
以下示例将创建选项 **NPM\$1START**。  

```
options_definitions:
 -  namespace: "aws:elasticbeanstalk:container:custom:application"
    option_name: "NPM_START"
    description: "Default application startup command"
    default_value: "node application.js"
```

*option-setting-namespace*  
可选。选项的命名空间。

*option-setting-option\$1name*  
可选。选项的名称。您可以指定最多 50 个[由 Elastic Beanstalk 提供的选项](command-options-general.md)。

*option-setting-value*  
可选。在用户未指定值时使用的值。  
以下示例将创建选项 **TEST**。  

```
option_settings:
 - namespace: "aws:elasticbeanstalk:application:environment"
   option_name: "TEST"
   value: "This is a test"
```

### 标记自定义平台版本


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

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

#### 在自定义平台版本创建期间添加标签


如果使用 EB CLI 创建自定义平台版本，则可以使用 **[eb platform create](eb3-platform.md#eb3-platform-create)** 的 `--tags` 选项添加标签。

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

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

```
$ aws elasticbeanstalk create-platform-version \
      --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \
      --platform-name my-platform --platform-version 1.0.0 --platform-definition-bundle S3Bucket=amzn-s3-demo-bucket,S3Key=sample.zip
```

#### 管理现有自定义平台版本的标签


您可以在现有 Elastic Beanstalk 自定义平台版本中添加、更新和删除标签。

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

例如，以下命令会列出自定义平台版本中的标签。

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

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

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

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

对于 Amazon CLI 或其他基于 API 的客户端，使用**[list-tags-for-resource](https://docs.amazonaws.cn/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:platform/my-platform/1.0.0"
```

使用 **[update-tags-for-resource](https://docs.amazonaws.cn/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:platform/my-platform/1.0.0"
```

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

**注意**  
要在 Elastic Beanstalk 自定义平台版本中使用某些 EB CLI 和 Amazon CLI 命令，您需要自定义平台版本的 ARN。您可以使用下面的命令检索该 ARN。  

```
$ aws elasticbeanstalk list-platform-versions
```
使用 `--filters` 选项从输出筛选出自定义平台的名称。