如何在 Amazon Linux 2 上手动运行需要访问 Elastic Beanstalk 实例的环境属性的脚本?

上次更新时间:2021 年 5 月 28 日

我想在 Amazon Linux 2 上手动运行需要访问我的 AWS Elastic Beanstalk 实例的环境属性的脚本。

简短描述

您可以在 Amazon Linux 2 平台使用使用平台挂钩手动运行脚本。这些脚本需要访问 Elastic Beanstalk 实例的环境属性。最佳操作方法是在实例预置期间,使用平台挂钩在环境实例上配置和运行自定义代码。使用平台挂钩而不是在配置文件(.ebextensions)中提供文件和命令。

注意:以下解决方法包括两个可以跨多个平台(包括 PHP、Python、Ruby、Amazon Corretto、Tomcat 和 Node.js)使用的脚本。这些脚本允许用户获取 /opt/elasticbeanstalk/deployment/env 文件中定义的环境属性源代码。

警告:如果您的使用场景需要手动运行脚本,则可以完成以下步骤。但手动运行脚本(即在 Elastic Beanstalk 上通过 SSH 运行脚本)并不是最佳实践,因为通过 SSH 执行的任何更改都不会持久。

解决方法

1.    在应用程序源包的 .platform/hooks/postdeploy.platform/confighooks/postdeploy 目录中分别创建一个名为 01_set_env.sh 的文件。例如:

~/workspace/my-app/
├── .platform
│   ├── hooks
│   │   ├── postdeploy
│   │   │   ├── 01_set_env.sh
│   ├── confighooks
│   │   ├── postdeploy
│   │   │   ├── 01_set_env.sh
|-- helloworld

2.    使用 Bash 脚本允许实例上的任何用户访问此环境变量文件。Bash 脚本包含复制 /opt/elasticbeanstalk/deployment/env 文件并设置 644 权限的逻辑。例如:

.platform/hooks/postdeploy/01_set_env.sh AND .platform/confighooks/postdeploy/01_set_env.sh
-----
#!/bin/bash

#Create a copy of the environment variable file.
cp /opt/elasticbeanstalk/deployment/env /opt/elasticbeanstalk/deployment/custom_env_var

#Set permissions to the custom_env_var file so this file can be accessed by any user on the instance. You can restrict permissions based on your requirements.
chmod 644 /opt/elasticbeanstalk/deployment/custom_env_var

#Remove duplicate files upon deployment.
rm -f /opt/elasticbeanstalk/deployment/*.bak

# Add the following code to the 'ec2-user' bash profile to avoid manually sourcing the file on the instance.
source_cmd="source <(sed -E -n 's/[^#]+/export &/ p' /opt/elasticbeanstalk/deployment/custom_env_var)"
bash_profile_path=/home/ec2-user/.bash_profile
grep -qxF -- "$source_cmd" "$bash_profile_path" || echo $source_cmd >> $bash_profile_path

3.    分别在 .platform/hooks/postdeploy/01_set_env.sh..platform/confighooks/postdeploy/01_set_env.sh 文件上设置权限。

chmod +x .platform/hooks/postdeploy/01_set_env.sh
chmod +x .platform/confighooks/postdeploy/01_set_env.sh

重要提示:在将第 3 步中的文件添加到应用程序源包之前,必须在本地计算机上设置 644 权限。

4.    部署 .platform 挂钩脚本。

注意:包含空格或特殊字符的环境属性将由 Bash shell 解释,并且可能会导致出现不同值。

重要提示:在 Amazon Linux 2 上,所有环境属性都合并到名为 /opt/elasticbeanstalk/deployment/env 的单个文件中。您必须仅在 Elastic Beanstalk 的应用程序部署过程中使用此文件。/opt/elasticbeanstalk/deployment/env 中定义的属性在操作系统级别不可用。如果您通过在实例上运行手动脚本来访问这些变量,则不可用属性可能会导致“permission denied”(权限被拒绝)问题。/opt/elasticbeanstalk/deployment/env 文件拥有受限的权限,非根用户(例如,ec2-user)可能难以获取源代码。例如:

[root@ip-X-X-X-X deployment]# ls -latr /opt/elasticbeanstalk/deployment/env

-r-------- 1 root root 147 Jun 17 06:23 /opt/elasticbeanstalk/deployment/env


这篇文章对您有帮助吗?


您是否需要账单或技术支持?