

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

# Elastic Beanstalk Linux 平台
<a name="platforms-linux"></a>

Elastic Beanstalk Linux 平台提供了大量开箱即用的功能。您可以通过多种方式扩展平台以支持您的应用程序。有关更多信息，请参阅 [扩展 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

Elastic Beanstalk 支持的大多数平台都基于 Linux 操作系统。具体而言，这些平台基于亚马逊 Linux（由提供的 Linux 发行版） AWS。Elastic Beanstalk Linux 平台使用亚马逊弹性计算云 EC2（亚马逊）实例，这些实例运行亚马逊 Linux。

**Topics**
+ [受支持的 Amazon Linux 版本](#platforms-linux.versions)
+ [Elastic Beanstalk Linux 平台列表](#platforms-linux.list)
+ [实例部署工作流](platforms-linux-extend.workflow.md)
+ [在 Amazon Linux 2 及更高版本上运行的 ECS 的实例部署工作流](platforms-linux-extend.workflow.ecs-al2.md)
+ [适用于 Elastic Beanstalk 环境的平台脚本工具](custom-platforms-scripts.md)

## 受支持的 Amazon Linux 版本
<a name="platforms-linux.versions"></a>

AWS Elastic Beanstalk 支持基于亚马逊 Linux 2 和亚马逊 Linux 2023 的平台。

有关 Amazon Linux 2 和 Amazon Linux 2023 的更多信息，请参阅以下文件：
+ **亚马逊 Linux 2** — [亚马逊* EC2 用户指南中的亚马逊* L](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html) inux。
+ **Amazon Linux 2023** – *Amazon Linux 2023 用户指南*中的[什么是 Amazon Linux 2023？](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html)。

有关支持的平台版本的更多信息，请参阅 [Elastic Beanstalk 支持的平台](concepts.platforms.md)。

**注意**  
您可以将应用程序从 Elastic B AL2 eanstalk AL1 或平台分支迁移到 AL2等效的 023 平台分支。有关更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### Amazon Linux 2023
<a name="platforms-linux.versions.al2023"></a>

AWS 2023 年 3 月宣布亚马逊 Linux 2023 [正式](https://aws.amazon.com//blogs/aws/amazon-linux-2023-a-cloud-optimized-linux-distribution-with-long-term-support/)上市。*Amazon Linux 2023 用户指南*总结了 Amazon Linux 2 与 Amazon Linux 2023 之间的主要差异。有关更多信息，请参阅用户指南中的[比较 Amazon Linux 2 和 Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html)。

Elastic Beanstalk Amazon Linux 2 和 Amazon Linux 2023 平台之间具有高度的兼容性。尽管还有一些差异需要注意：
+ **实例元数据服务版本 1 (IMDSv1)**-在 AL2 023 平台`true`上，[禁用IMDSv1](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)选项设置默认为。默认设置在 AL2 平台`false`上。
+ **pkg-repo 实例工具** — 该[pkg-repo](custom-platforms-scripts.md#custom-platforms-scripts.pkg-repo)工具不适用于在 023 平台上 AL2运行的环境。但是，您仍然可以手动将软件包和操作系统更新应用到 AL2 023 实例。有关更多信息，请参阅 *Amazon Linux 2023 用户指南*中的[管理软件包和操作系统更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。
+ **Apache HTTPd 配置** — 适用于 AL2 023 平台的 Apache `httpd.conf` 文件有一些与以下平台不同的配置设置： AL2
  + 默认情况下，拒绝访问服务器的整个文件系统。这些设置在 Apache 网站[安全提示](https://httpd.apache.org/docs/2.4/misc/security_tips.html)页面上的*默认保护服务器文件*中进行了描述。
  + 拒绝访问所有目录`.htaccess`中的设置，但特别启用的目录除外。此设置在 Apache 网站[安全提示](https://httpd.apache.org/docs/2.4/misc/security_tips.html)页面上的*保护系统设置*中进行了描述。[Apache HTTP 服务器教程：.htaccess 文件](https://httpd.apache.org/docs/2.4/howto/htaccess.html)页面指出，此设置可能有助于提高性能。
  + 拒绝访问带有名称模式 `.ht*` 的文件。此设置阻止 Web 客户端查看 `.htaccess` 和 `.htpasswd` 文件。

  您可以更改您的环境的上述任何配置设置。有关更多信息，请参阅 [配置 Apache HTTPD](platforms-linux-extend.proxy.md#platforms-linux-extend.proxy.httpd)。
+ **多行环境变量支持** — AL2 023 平台支持 systemd 服务配置中的环境变量和密钥的多行值。Amazon Linux 2 平台不支持多行环境变量值。此增强功能允许您在 AL2 023 平台上使用多行密钥和配置值。有关使用环境变量和密钥的更多信息，请参阅[Amazon Linux 2 环境变量中的多行值](AWSHowTo.secrets.env-vars.md#AWSHowTo.secrets.multiline)。
+ **CloudWatch 自定义日志转发**-已弃用的 Log CloudWatch s 代理（`awslogs`软件包）在 AL2 023 平台上不可用。如果您有安装和使用已弃用`awslogs`代理的自定义日志转发配置，则在从 Amazon Linux 2 迁移到 AL2 023 时，必须更新配置文件以使用统一 CloudWatch 代理。有关更多信息，请参阅 [自定义日志文件流式传输](AWSHowTo.cloudwatchlogs.md#AWSHowTo.cloudwatchlogs.streaming.custom)。

**特定于平台的差异**

除了基本操作系统的差异外，Amazon Linux 2 和 AL2 023 运行时平台之间还存在平台特定的差异：
+ **.NET 平台分支** — 亚马逊 Linux 2 和 AL2 023 的.NET 平台分支策略有所不同。在 Amazon Linux 2 上，.NET Core 平台在单个平台分支中维护一个轮换窗口，其中包含.NET 主要版本。在 AL2 023 上，每个平台分支都固定到特定的.NET 主要版本（例如.NET 9、.NET 10）。

  如果您部署依赖于框架的应用程序（依赖于平台安装的.NET 运行时的应用程序），则必须选择与应用程序的目标.NET 版本相匹配的平台分支。如果您部署自包含的应用程序（捆绑自己的.NET 运行时的应用程序），则无论应用程序的.NET 版本如何，都可以使用任何 AL2 023 .NET 平台分支，因为您的应用程序不依赖于平台安装的运行时。有关更多信息，请参阅 [捆绑适用于 .NET Core on Linux Elastic Beanstalk 平台的应用程序](dotnet-linux-platform-bundle-app.md)。
+ **Node.js 版本选择** — 亚马逊 Linux 2 上的 Node.js 平台支持在应用程序`package.json`文件中指定 Node.js 版本。 AL2023 上的 Node.js 平台不支持此功能。您必须使用平台分支提供的默认 Node.js 版本。有关 Node.js 版本管理的更多信息，请参阅[配置您的应用程序对 Elastic Beanstalk 的依赖项](nodejs-platform-dependencies.md)。
+ **Ruby Puma 服务器版本** — 亚马逊 Linux 2 上的 Ruby 平台会忽略应用程序`Gemfile.lock`文件中指定的 Puma 版本，而是使用平台默认 Puma 版本。 AL2023 上的 Ruby 平台支持中指定的 Puma 版本（`Gemfile.lock`如果存在）。如果未指定版本，则平台将安装平台默认 Puma 版本。
+ **PHP 软件包的可用性** — 亚马逊 Linux 2 PHP 平台上提供的某些软件包在 AL2 023 PHP 平台上不可用：
  + *MySQL 客户端包* — `mysql` 和`mysql-devel`命令行客户端软件包未安装在 AL2 023 PHP 平台上。如果您的应用程序需要 MySQL 数据库连接，请使用两个平台上都提供的 PHP `mysqli` 或`pdo_mysql`扩展。
  + *Compass 和 Ruby 工具* — Compass CSS 框架支持的`ruby-devel`和`rubygems`软件包未安装在 AL2 023 PHP 平台上。指南针已被弃用。可以考虑使用现代 CSS 预处理工具作为替代工具。
+ **Go 版本控制工具** — Bazaar 版本控制系统 (`bzr`) 在 AL2 023 Go 平台上不可用。Bazaar 已被弃用，未包含在 AL2 023 软件包存储库中。改用 Git、Mercurial 或 Subversion 进行版本控制，所有这些都在 AL2 023 Go 平台上可用。

## Elastic Beanstalk Linux 平台列表
<a name="platforms-linux.list"></a>

下面的列表提供了 Elastic Beanstalk 针对不同编程语言和 Docker 容器支持的 Linux 平台。Elastic Beanstalk 为所有平台提供基于 Amazon Linux 2 和 Amazon Linux 2023 的平台。要了解有关平台的更多信息，请选择对应的链接。
+ [Docker（和 ECS Docker）](create_deploy_docker.md) 
+ [Go](create_deploy_go.md)
+ [Tomcat（运行 Java SE）](create_deploy_Java.md)
+ [Java SE](create_deploy_Java.md)
+ [Linux 上的 .NET Core](create-deploy-dotnet-core-linux.md)
+ [Node.js](create_deploy_nodejs.md)
+ [PHP](create_deploy_PHP_eb.md)
+ [Python](create-deploy-python-apps.md)
+ [Ruby](create_deploy_Ruby.md)

# 实例部署工作流
<a name="platforms-linux-extend.workflow"></a>

**注意**  
本节信息不适用于*在 Amazon Linux 2 和 Amazon Linux 2023 上运行的 ECS* 平台分支。有关更多信息，请参阅下一部分[在 Amazon Linux 2 及更高版本上运行的 ECS 的实例部署工作流ECS 开启 AL2 及以后的实例部署工作流程](platforms-linux-extend.workflow.ecs-al2.md)。

有多种扩展环境平台的方法，对于了解 Elastic Beanstalk 在预配置实例或向实例运行部署时会发生什么情况非常有用。下图显示了整个部署工作流程。它描述了部署中的不同阶段以及 Elastic Beanstalk 在每个阶段中采取的步骤。

**注意**  
该图不代表 Elastic Beanstalk 在部署期间对环境实例采取的完整步骤集。我们提供此图作为说明，为您提供执行自定义项的顺序和上下文。
为简单起见，图中仅提及 `.platform/hooks/*` 挂钩子目录（用于应用程序部署），而不提及 `.platform/confighooks/*` 挂钩子目录（用于配置部署）。后面子目录中的挂钩运行的步骤与图中显示的相应子目录中的挂钩运行的步骤完全相同。

![\[在基于 Amazon Linux 的平台上运行的环境实例上的扩展执行顺序的工作流。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/platforms-linux-extend-order.png)


以下列表详细介绍了部署阶段和步骤。

1. **初始步骤**

   Elastic Beanstalk 下载并提取您的应用程序。在上述每个步骤之后，Elastic Beanstalk 会运行一个可扩展性步骤。

   1. 运行任何配置文件的 [commands:](customize-containers-ec2.md#linux-commands) 部分中的命令。

   1. 运行在源包的 `.platform/hooks/prebuild` 目录中找到的任何可执行文件（`.platform/confighooks/prebuild` 用于配置部署）。

1. **配置**

   Elastic Beanstalk 配置您的应用程序和代理服务器。

   1. 运行源包 `Buildfile` 中的命令。

   1. 如果源包 `.platform/nginx` 目录中包含任何自定义代理配置文件，请将其复制到其运行时位置。

   1. 运行任何配置文件的 [container\$1commands:](customize-containers-ec2.md#linux-container-commands) 部分中的命令。

   1. 运行在源包的 `.platform/hooks/predeploy` 目录中找到的任何可执行文件（`.platform/confighooks/predeploy` 用于配置部署）。

1. **部署**

   Elastic Beanstalk 部署并运行您的应用程序和代理服务器。

   1. 运行源包 `Procfile` 文件中的命令。

   1. 使用您的自定义代理配置文件（如果有）运行或重新运行代理服务器。

   1. 运行在源包的 `.platform/hooks/postdeploy` 目录中找到的任何可执行文件（`.platform/confighooks/postdeploy` 用于配置部署）。

# 在 Amazon Linux 2 及更高版本上运行的 ECS 的实例部署工作流
<a name="platforms-linux-extend.workflow.ecs-al2"></a>

上一节介绍了应用程序部署工作流各个阶段支持的可扩展性功能。Docker 平台分支[*在 Amazon Linux 2 及更高版本上运行的 ECS*](create_deploy_docker_ecs.md)有一些不同之处。本节介绍这些概念如何应用于此特定平台分支。

有多种扩展环境平台的方法，对于了解 Elastic Beanstalk 在预配置实例或向实例运行部署时会发生什么情况非常有用。下图显示了基于*在 Amazon Linux 2 上运行的 ECS* 和*在 Amazon Linux 2023 上运行的 ECS* 平台分支的环境的整个部署工作流。它描述了部署中的不同阶段以及 Elastic Beanstalk 在每个阶段中采取的步骤。

与上一节中描述的工作流不同，部署配置阶段不支持以下可扩展性功能：`Buildfile`命令、`Procfile`命令、反向代理配置。

**注意**  
该图不代表 Elastic Beanstalk 在部署期间对环境实例采取的完整步骤集。我们提供此图作为说明，为您提供执行自定义项的顺序和上下文。
为简单起见，图中仅提及 `.platform/hooks/*` 挂钩子目录（用于应用程序部署），而不提及 `.platform/confighooks/*` 挂钩子目录（用于配置部署）。后面子目录中的挂钩运行的步骤与图中显示的相应子目录中的挂钩运行的步骤完全相同。

![\[基于 ECS 的 Docker 平台上的环境实例上的扩展执行顺序的工作流。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/platform-ecs-al2-extended-order.png)


以下列表详细介绍了部署工作流步骤。

1. 运行 `EBhooksDir` 下 `appdeploy/pre` 目录中找到的任何可执行文件。

1. 运行在源包的 `.platform/hooks/prebuild` 目录中找到的任何可执行文件（`.platform/confighooks/prebuild` 用于配置部署）。

1. 运行在源包的 `.platform/hooks/predeploy` 目录中找到的任何可执行文件（`.platform/confighooks/predeploy` 用于配置部署）。

1. 运行 `EBhooksDir` 下 `appdeploy/enact` 目录中找到的任何可执行文件。

1. 运行 `EBhooksDir` 下 `appdeploy/post` 目录中找到的任何可执行文件。

1. 运行在源包的 `.platform/hooks/postdeploy` 目录中找到的任何可执行文件（`.platform/confighooks/postdeploy` 用于配置部署）。

对 `EBhooksDir` 的引用表示平台挂钩目录的路径。要检索目录路径名，请使用环境实例命令行上的 [get-config](custom-platforms-scripts.md#custom-platforms-scripts.get-config) 脚本工具，如下所示：

```
$ /opt/elasticbeanstalk/bin/get-config platformconfig -k EBhooksDir
```

# 适用于 Elastic Beanstalk 环境的平台脚本工具
<a name="custom-platforms-scripts"></a>

本主题介绍 AWS Elastic Beanstalk 为使用 Amazon Linux 平台的环境提供的工具。这些工具位于 Elastic Beanstalk 环境的亚马逊 EC2 实例上。

## get-config
<a name="custom-platforms-scripts.get-config"></a>

使用 `get-config` 工具检索纯文本环境变量值以及其他平台和实例信息。可在 `/opt/elasticbeanstalk/bin/get-config` 中获得此工具。

### get-config 命令
<a name="custom-platforms-scripts.get-config.commands"></a>

每个 `get-config` 工具命令都返回特定类型的信息。使用以下语法运行任何工具的命令。

```
$ /opt/elasticbeanstalk/bin/get-config command [ options ]
```

以下示例运行 `environment` 命令。

```
$ /opt/elasticbeanstalk/bin/get-config environment -k PORT
```

根据您选择的命令和选项，工具返回具有键值对或单个值的对象（JSON 或 YAML）。

您可以使用 SSH 连接到 Elastic Beanstalk 环境中的 EC2 实例进行测试`get-config`。

**注意**  
运行 `get-config` 以进行测试时，某些命令可能需要 root 用户权限才能访问基础信息。如果您收到访问权限错误，请在 `sudo` 下再次运行命令。  
在部署到环境的脚本中使用该工具时，无需添加 `sudo`。Elastic Beanstalk 以 root 用户身份运行所有脚本。

以下各节介绍这些工具的命令。

#### optionsettings – 配置选项
<a name="custom-platforms-scripts.get-config.commands.optionsettings"></a>

`get-config optionsettings` 命令返回一个对象，其中列出在环境上设置并由平台在环境实例上使用的配置选项。它们按命名空间排列。

```
$ /opt/elasticbeanstalk/bin/get-config optionsettings
{"aws:elasticbeanstalk:application:environment":{"JDBC_CONNECTION_STRING":""},"aws:elasticbeanstalk:container:tomcat:jvmoptions":{"JVM Options":"","Xms":"256m","Xmx":"256m"},"aws:elasticbeanstalk:environment:proxy":{"ProxyServer":"nginx","StaticFiles":[""]},"aws:elasticbeanstalk:healthreporting:system":{"SystemType":"enhanced"},"aws:elasticbeanstalk:hostmanager":{"LogPublicationControl":"false"}}
```

要返回特定配置选项值，请使用 `--namespace` (`-n`) 选项来指定命名空间，并使用 `--option-name` (`-o`) 选项来指定选项名称。

```
$ /opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:container:php:phpini -o memory_limit
256M
```

#### environment – 环境属性
<a name="custom-platforms-scripts.get-config.commands.environment"></a>

`get-config environment` 命令会返回一个包含环境属性列表的对象，包括用户配置的环境属性和由 Elastic Beanstalk 提供的环境属性。用户配置的属性可以在[控制台](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)中定义为*纯文本*，也可以使用配置选项命名空间 [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment) 进行定义。

```
$ /opt/elasticbeanstalk/bin/get-config environment
{"JDBC_CONNECTION_STRING":"","RDS_PORT":"3306","RDS_HOSTNAME":"anj9aw1b0tbj6b.cijbpanmxz5u.us-west-2.rds.amazonaws.com","RDS_USERNAME":"testusername","RDS_DB_NAME":"ebdb","RDS_PASSWORD":"testpassword1923851"}
```

例如，Elastic Beanstalk 提供用于连接到集成 Amazon RDS 数据库实例的环境属性（例如，`RDS_HOSTNAME`）。这些 RDS 连接属性在 `get-config environment` 的输出中显示。但是，它们不会在 `get-config optionsettings` 的输出中显示。这是因为没有在配置选项中设置这些属性。

要返回特定环境属性，请使用 `--key` (`-k`) 选项来指定属性键。

```
$ /opt/elasticbeanstalk/bin/get-config environment -k TESTPROPERTY
testvalue
```

**注意**  
`get-config` 工具无法检索[存储密钥的环境变量](AWSHowTo.secrets.env-vars.md)。有关如何以编程方式从密钥或参数存储中检索值的更多信息，请参阅 [使用 Secrets Manager](AWSHowTo.secrets.Secrets-Manager-and-Parameter-Store.md#AWSHowTo.secrets.Secrets-Manager)或 [使用 Systems Manager Parameter Store](AWSHowTo.secrets.Secrets-Manager-and-Parameter-Store.md#AWSHowTo.secrets.SSM-parmameter-store)。

#### container – 实例上的配置值
<a name="custom-platforms-scripts.get-config.commands.container"></a>

`get-config container` 命令返回一个对象，其中列出环境实例的平台和环境配置值。

以下示例显示此命令在 Amazon Linux 2 Tomcat 环境上的输出。

```
$ /opt/elasticbeanstalk/bin/get-config container
{"common_log_list":["/var/log/eb-engine.log","/var/log/eb-hooks.log"],"default_log_list":["/var/log/nginx/access.log","/var/log/nginx/error.log"],"environment_name":"myenv-1da84946","instance_port":"80","log_group_name_prefix":"/aws/elasticbeanstalk","proxy_server":"nginx","static_files":[""],"xray_enabled":"false"}
```

要返回特定键的值，请使用 `--key` (`-k`) 选项指定键。

```
$ /opt/elasticbeanstalk/bin/get-config container -k environment_name
myenv-1da84946
```

#### addons – 附加项配置值
<a name="custom-platforms-scripts.get-config.commands.addons"></a>

`get-config addons` 命令返回一个包含环境附加项配置信息的对象。使用它检索与环境关联的 Amazon RDS 数据库的配置。

```
$ /opt/elasticbeanstalk/bin/get-config addons
{"rds":{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}}
```

您可以通过两种方式限制结果。要检索特定附加项的值，请使用 `--add-on` (`-a`) 选项指定附加项名称。

```
$ /opt/elasticbeanstalk/bin/get-config addons -a rds
{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}
```

要返回附加项中特定密钥的值，请添加 `--key` (`-k`) 选项以指定密钥。

```
$ /opt/elasticbeanstalk/bin/get-config addons -a rds -k RDS_DB_NAME
ebdb
```

#### platformconfig – 恒定的配置值
<a name="custom-platforms-scripts.get-config.commands.platformconfig"></a>

`get-config platformconfig` 命令返回一个对象，其中包含对平台版本恒定不变的平台配置信息。在运行相同平台版本的所有环境中，输出是相同的。命令的输出对象有两个嵌入式对象：
+ `GeneralConfig` – 包含在所有 Amazon Linux 2 和 Amazon Linux 2023 平台分支的最新版本中恒定不变的信息。
+ `PlatformSpecificConfig` – 包含对于平台版本而言恒定不变且特定于该版本的信息。

以下示例显示此命令在使用*运行 Corretto 11 平台分支的 Tomcat 8.5* 的环境上的输出。

```
$ /opt/elasticbeanstalk/bin/get-config platformconfig
{"GeneralConfig":{"AppUser":"webapp","AppDeployDir":"/var/app/current/","AppStagingDir":"/var/app/staging/","ProxyServer":"nginx","DefaultInstancePort":"80"},"PlatformSpecificConfig":{"ApplicationPort":"8080","JavaVersion":"11","TomcatVersion":"8.5"}}
```

要返回特定键的值，请使用 `--key` (`-k`) 选项指定键。这些键在两个嵌入式对象间是唯一的。您不需要指定包含密钥的对象。

```
$ /opt/elasticbeanstalk/bin/get-config platformconfig -k AppStagingDir
/var/app/staging/
```

### get-config 输出选项
<a name="custom-platforms-scripts.get-config.global"></a>

使用 `--output` 选项指定输出对象格式。有效值为 `JSON`（默认值）和 `YAML`。这是一个全局选项。您必须在命令名称之前指定该选项。

以下示例以 YAML 格式返回配置选项值。

```
$ /opt/elasticbeanstalk/bin/get-config --output YAML optionsettings
aws:elasticbeanstalk:application:environment:
  JDBC_CONNECTION_STRING: ""
aws:elasticbeanstalk:container:tomcat:jvmoptions:
  JVM Options: ""
  Xms: 256m
  Xmx: 256m
aws:elasticbeanstalk:environment:proxy:
  ProxyServer: nginx
  StaticFiles:
        - ""
aws:elasticbeanstalk:healthreporting:system:
  SystemType: enhanced
aws:elasticbeanstalk:hostmanager:
  LogPublicationControl: "false"
```

## pkg-repo
<a name="custom-platforms-scripts.pkg-repo"></a>

**注意**  
`pkg-repo` 工具不适用于基于 Amazon Linux 2023 平台的环境。但是，您可以手动将软件包和操作系统更新应用于 AL2 023 实例。有关更多信息，请参阅 *Amazon Linux 2023 用户指南*中的[管理软件包和操作系统更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)

在某些紧急情况下，您可能需要使用尚未发布所需的 Elastic Beanstalk 平台版本的 Amazon Linux 2 安全补丁来更新您的亚马逊 EC2 实例。默认情况下，您无法对 Elastic Beanstalk 环境执行手动更新。这是因为平台版本被锁定到特定版本的 Amazon Linux 2 存储库。此锁定可确保实例运行受支持且一致的软件版本。对于紧急情况，如果您需要在新的 Elastic Beanstalk 平台版本中发布之前在环境中安装该程序包，则 `pkg-repo` 工具允许在 Amazon Linux 2 上手动更新 yum 程序包作为解决方法。

Amazon Linux 2 平台上的 `pkg-repo` 工具提供解锁 `yum` 程序包存储库的功能。然后，您可以对安全补丁手动执行 **yum update**。相反，您可以通过使用该工具锁定 yum 程序包存储库来跟踪更新，以防止进一步更新。该`pkg-repo`工具位于您的 Elastic Beanstalk 环境中所有 EC2 实例的`/opt/elasticbeanstalk/bin/pkg-repo`目录中。

使用该`pkg-repo`工具的更改仅在使用该工具的 EC2 实例上进行。这些更改不会影响其他实例，也不会阻止将来对环境进行更新。本主题后面提供的示例说明如何通过从脚本和配置文件调用 `pkg-repo` 命令来跨所有实例应用更改。

**警告**  
我们不建议大多数用户使用此工具。应用于已解锁平台版本的任何手动更改都将被视为带外更改。此选项仅适用于在紧急情况下可接受以下风险的用户：  
无法保证程序包版本在您的环境中的所有实例之间保持一致。
使用 `pkg-repo` 工具修改的环境无法保证正常运行，因为这些环境尚未在 Elastic Beanstalk 支持的平台上进行测试和验证。
我们强烈建议应用包括测试和撤销计划的最佳实践。为了帮助实现最佳实践，您可以使用 Elastic Beanstalk 控制台和 EB CLI 来克隆环境和交换环境。 URLs有关使用这些操作的更多信息，请参阅本指南*管理环境*一章中的[蓝绿部署](using-features.CNAMESwap.md)。

如果您计划手动编辑 yum 存储库配置文件，请首先运行 `pkg-repo` 工具。采用手动编辑的 yum 存储库配置文件的 `pkg-repo` 工具在 Amazon Linux 2 环境中可能无法按预期工作。这是因为该工具可能无法识别配置更改。

有关 Amazon Linux 软件包存储库的更多信息，请参阅*亚马逊 EC2 用户指南*中的[软件包存储库](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html#package-repository)主题。

### pkg-repo 命令
<a name="custom-platforms-scripts.pkg-repo.commands"></a>

使用以下语法运行 `pkg-repo` 工具命令。

```
$ /opt/elasticbeanstalk/bin/pkg-repo command [options]
```

`pkg-repo` 命令如下：
+ **lock** – 将 `yum` 程序包存储库锁定到特定版本
+ **unlock** – 从特定版本解锁 `yum` 程序包存储库
+ **status** – 列出所有 `yum` 程序包存储库及其当前锁定状态
+ **help** – 显示通用帮助或一条命令的帮助

这些选项适用于以下命令：
+ `lock`、`unlock` 和 `status ` –选项：`-h`、`--help` 或无（默认值）。
+ `help` – 选项：`lock`、`unlock`、`status` 或无（默认值）。



以下示例运行 **unlock** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo unlock
Amazon Linux 2 core package repo successfully unlocked
Amazon Linux 2 extras package repo successfully unlocked
```

以下示例运行 **lock** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo lock
Amazon Linux 2 core package repo successfully locked
Amazon Linux 2 extras package repo successfully locked
```

以下示例运行 **status** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo status
Amazon Linux 2 core package repo is currently UNLOCKED
Amazon Linux 2 extras package repo is currently UNLOCKED
```

以下示例运行 **lock** 命令的 **help** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo help lock
```

以下示例运行 `pkg-repo` 工具的 **help** 命令。

```
$ sudo /opt/elasticbeanstalk/bin/pkg-repo help
```

您可以通过使用 SSH 连接到 Elastic Beanstalk 环境中的实例来测试 `pkg-repo`。一个 SSH 选项是 EB CLI [**eb ssh**](eb3-ssh.md) 命令。

**注意**  
`pkg-repo` 工具需要根用户权限才能运行。如果您收到访问权限错误，请在 `sudo` 下再次运行命令。  
在部署到环境的脚本或配置文件中使用该工具时，无需添加 `sudo`。Elastic Beanstalk 以 root 用户身份运行所有脚本。

### pkg-repo 示例
<a name="custom-platforms-scripts.pkg-repo.examples"></a>

上一节提供了在 Elastic Beanstalk 环境的单个 EC2 实例上进行测试的命令行示例。这种方法对测试很有帮助。但是，它一次只更新一个实例，因此将更改应用到环境中的所有实例是不切实际的。

更实用的方法是使用[平台挂钩](platforms-linux-extend.hooks.md)脚本或 [`.ebextensions`](ebextensions.md) 配置文件以一致的方式跨所有实例应用更改。

以下示例从 [`.ebextensions`](ebextensions.md) 文件夹中的配置文件调用 `pkg-repo`。当您部署应用程序源代码捆绑包时，Elastic Beanstalk 将运行 `update_package.config` 文件中的命令。

```
.ebextensions
└── update_package.config
```

要接收最新版本的 *docker* 程序包，此配置将在 **yum update** 命令中指定 *docker* 程序包。

```
### update_package.config ###

commands:
  update_package:
    command: |
      /opt/elasticbeanstalk/bin/pkg-repo unlock
      yum update docker -y
      /opt/elasticbeanstalk/bin/pkg-repo lock
      yum clean all -y
      rm -rf /var/cache/yum
```

此配置没有在 **yum update** 命令中指定任何程序包，因此将应用所有可用的更新。

```
### update_package.config ###

commands:
  update_package:
    command: |
      /opt/elasticbeanstalk/bin/pkg-repo unlock
      yum update -y
      /opt/elasticbeanstalk/bin/pkg-repo lock
      yum clean all -y
      rm -rf /var/cache/yum
```

以下示例从 bash 脚本调用 `pkg-repo` 作为[平台挂钩](platforms-linux-extend.hooks.md)。Elastic Beanstalk 运行位于 `prebuild` 子目录中的 `update_package.sh` 脚本文件。

```
.platform
└── hooks
    └── prebuild
        └── update_package.sh
```

要接收最新版本的 *docker* 程序包，此脚本将在 **yum update** 命令中指定 *docker* 程序包。如果省略软件包名称，将应用所有可用的更新。前面的配置文件示例展示了这种情况。

```
### update_package.sh ###

#!/bin/bash

/opt/elasticbeanstalk/bin/pkg-repo unlock
yum update docker -y
/opt/elasticbeanstalk/bin/pkg-repo lock
yum clean all -y
rm -rf /var/cache/yum
```

## download-source-bundle （仅限亚马逊 Linux AMI）
<a name="custom-platforms-scripts.download"></a>

在 Amazon Linux AMI 平台分支（Amazon Linux 2 以前的版本）上，Elastic Beanstalk 提供了额外的工具，即 `download-source-bundle`。部署平台时，使用此工具下载应用程序源代码。可在 `/opt/elasticbeanstalk/bin/download-source-bundle` 中获得此工具。

示例脚本 `00-unzip.sh` 位于环境实例上的 `appdeploy/pre` 文件夹中。它演示在部署过程中如何使用 `download-source-bundle` 将应用程序源代码下载到 `/opt/elasticbeanstalk/deploy/appsource` 文件夹。