我想使用平台挂钩自定义我的 Amazon Elastic Beanstalk 环境,以创建自定义脚本或其他可执行文件。我想将它们部署在该环境中运行的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上。
## 简短描述
您可以使用平台挂钩扩展 Elastic Beanstalk 环境的功能,以运行自定义脚本和可执行文件。Elastic Beanstalk 还可以在不同的实例配置阶段运行这些挂钩。
**注意**:Amazon Linux AMI 平台版本(**Amazon Linux 2** 之前的版本)不支持平台挂钩。
平台挂钩有两种类型:
* 当您提供新的源包进行部署时,**应用程序部署平台挂钩**会在应用程序部署期间运行。当您进行需要终止和重新创建所有环境实例的配置更改时,它们也会运行。
* 当您进行仅更新环境实例而不重新创建环境实例的配置更改时,**配置部署平台挂钩**会在配置部署期间运行。
## 解决方法
### 设置您的 .platform 目录
1. 在应用程序包的根目录中,分别为应用程序部署和配置部署平台挂钩创建名为“**.platform/hooks**”或“**.platform/confighooks**”的隐藏目录。
2. 根据运行时的实例配置阶段,您必须将挂钩文件放在以下子目录之一:
* “**prebuild**”
* “**predeploy**”
* “**postdeploy**”
要确定您的用例所需的子目录,请参阅[扩展 Elastic Beanstalk Linux 平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html?trk=cndc-detail)。
3. 您的应用程序源包必须与以下包类似:
```
~/workspace/my-application/
|-- .platform
|--hooks
|--prebuild
|-- custom-prebuild-script.sh
|--predeploy
|-- custom-predeploy-script.sh
|--postdeploy
|-- custom-postdeploy-script.sh
|-- .ebextensions
|-- index.php
`-- styles.css
```
### 指定挂钩文件
创建挂钩文件时,请记住以下信息:
* 挂钩文件可以是以“**#!**”行开头的二进制文件或脚本文件,并包含其解释器路径,例如“**#!/bin/bash**”。有关脚本文件(例如“**custom-postdeploy-script.sh**”)内内容的示例,请参阅以下文件:
```
#!/bin/bash
sudo su
cd /var/app/current
echo "Hello from AWS hook" >> 'test.txt'
```
* 在本地计算机上使用“**chmod +x**”来设置对挂钩文件的执行权限。或者,您可以使用“**.ebextensions**”来提供权限。请参阅以下示例文件:
```
container_commands:
01_chmod1:
command: "chmod +x .platform/hooks/postdeploy/custom-postdeploy-script.sh"
```
有关更多信息,请参阅[如何使用 .ebextensions 自定义我的 Elastic Beanstalk 环境?](https://repost.aws/zh-Hans/knowledge-center/elastic-beanstalk-configuration-files?trk=cndc-detail)
### 将平台挂钩应用于您的应用程序
1. [创建包含前述平台挂钩和配置文件的应用程序源包](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html?trk=cndc-detail)。
**注意**:文件浏览器可以隐藏以句点开头的文件夹,例如 **.platform** 和 **.ebextensions**。要确保这些文件夹可见,请在创建应用程序源包时在应用程序包的根目录中包括这些文件夹。
2. [部署已更新的 Elastic Beanstalk 应用程序](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deploy-existing-version.html?trk=cndc-detail)。