

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

# 平台挂钩
<a name="platforms-linux-extend.hooks"></a>

平台挂钩是专为扩展您的环境平台而设计的。这些自定义脚本和其他可执行文件部署为应用程序源代码的一部分，并由 Elastic Beanstalk 在不同的实例预置阶段运行。

**注意**  
Amazon Linux AMI 平台版本（Amazon Linux 2 之前的版本）不支持平台挂钩。

## 应用程序部署平台挂钩
<a name="platforms-linux-extend.hooks.appdeploy"></a>

当您提供新的源包进行部署时，或者当您进行的配置更改要求终止和重新创建所有环境实例时，将发生*应用程序部署*。

要提供在应用程序部署期间运行的平台挂钩，请将文件放在源包中的 `.platform/hooks` 目录下（位于以下子目录之一中）。
+ `prebuild` – 此处的文件在 Elastic Beanstalk 平台引擎下载和提取应用程序源包之后且在设置和配置应用程序和 Web 服务器之前运行。

  `prebuild` 文件在运行任何配置文件的 [commands](customize-containers-ec2.md#linux-commands) 部分中的命令之后且在运行 `Buildfile` 命令之前运行。
+ `predeploy` – 此处的文件在 Elastic Beanstalk 平台引擎设置和配置应用程序及 Web 服务器之后且在将它们部署到其最终运行时位置之前运行。

  `predeploy` 文件在运行任何配置文件的 [container\_commands](customize-containers-ec2.md#linux-container-commands) 部分中的命令之后且在运行 `Procfile` 命令之前运行。
+ `postdeploy` – 此处的文件在 Elastic Beanstalk 平台引擎部署应用程序和代理服务器之后运行。

  这是最后一个部署工作流步骤。

## 配置部署平台挂钩
<a name="platforms-linux-extend.hooks.configdeploy"></a>

如果您进行的配置更改仅更新环境实例而不重新创建环境实例，则会发生*配置部署*。以下选项更新会导致配置更新。
+ [环境属性和特定于平台的设置](environments-cfg-softwaresettings.md)
+ [静态文件](environment-cfg-staticfiles.md)
+ [Amazon X-Ray 守护程序](environment-configuration-debugging.md)
+ [日志存储和流式处理](environments-cfg-logging.md)
+ 应用程序端口（有关详细信息，请参阅 [反向代理配置](platforms-linux-extend.proxy.md)）

要提供在配置部署期间运行的挂钩，请将它们放在源包中的 `.platform/confighooks` 目录下。应用与应用程序部署挂钩相同的三个子目录。

## 有关平台挂钩的更多信息
<a name="platforms-linux-extend.hooks.more"></a>

挂钩文件可以是二进制文件，也可以是以包含其解释器路径的 `#!` 行开头的脚本文件，例如 `#!/bin/bash`。所有文件都必须具有执行权限。使用 `chmod +x` 对挂钩文件设置执行权限。对于 2022 年 4 月 29 日或之后发布的所有基于 Amazon Linux 2023 和 Amazon Linux 2 的平台版本，Elastic Beanstalk 会自动向所有平台挂钩脚本授予执行权限。在这种情况下，您无需手动授予执行权限。有关这些平台版本的列表，请参阅《*Amazon Elastic Beanstalk 发布说明指南*》中的 [2022 年 4 月 29 日 ](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2022-04-29-linux.html#release-2022-04-29-linux.platforms) Linux 发布说明。

Elastic Beanstalk 按照文件名的字母表顺序运行上述每个目录中的文件。所有文件都以 `root` 用户身份运行。平台挂钩的当前工作目录 (cwd) 是应用程序的根目录。对于 `prebuild` 和 `predeploy` 文件，该目录是应用程序暂存目录，对于 `postdeploy` 文件，该目录是当前应用程序目录。如果其中一个文件失败（以非零退出代码退出），则部署中止并失败。

如果平台挂钩文本脚本包含 Windows *回车符/换行符* (CRLF) 换行符，则该脚本可能会失败。如果某文件保存在 Windows 主机中，然后传输到 Linux 服务器，则它可能包含 Windows CRLF 换行符。对于 [2022 年 12 月 29 日](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2022-12-29-linux.html)当天或之后发布的平台，Elastic Beanstalk 会自动将 Windows CRLF 字符转换为平台挂钩文本文件中的 Linux *换行符* (LF) 换行符。如果应用程序在此日期之前发布的任何 Amazon Linux 2 平台上运行，则需要将 Windows CRLF 字符转换为 Linux LF 字符。实现此目的的一种方法是在 Linux 主机上创建并保存脚本文件。互联网上也提供了转换这些字符的工具。

挂钩文件可以访问您在应用程序选项中定义的所有环境属性和系统环境变量 `HOME`、`PATH` 和 `PORT`。

要将环境变量和其他配置选项的值添加到平台挂钩脚本中，您可以使用 Elastic Beanstalk 在环境实例上提供的 `get-config` 实用程序。有关更多信息，请参阅 [适用于 Elastic Beanstalk 环境的平台脚本工具](custom-platforms-scripts.md)。