上次更新时间:2021 年 1 月 20 日
我想在 Amazon Linux 2 上手动运行需要访问我的 AWS Elastic Beanstalk 实例上的环境属性的脚本。
简短描述您可以在 Amazon Linux 2 平台使用使用平台挂钩手动运行脚本。这些脚本需要访问 Elastic Beanstalk 实例上的环境属性。在实例预置期间,要在环境实例上配置和运行自定义代码,最佳做法是使用平台挂钩,而不是提供 配置文件 (.ebextensions) 中的文件和命令。
注意:以下解决方法包括两个可以跨多个平台(包括 PHP、Python、Ruby、Amazon Corretto、Tomcat 和 Node.js)使用的脚本。这些脚本允许用户获取 /opt/elasticbeanstalk/deployment/env 文件中定义的环境属性源代码。
解决方法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.要允许实例上的任何用户均可访问环境变量文件,请使用包含用于复制 /opt/elasticbeanstalk/deployment/env 文件和设置 644 权限的相同逻辑的 Bash 脚本。例如:
.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 as per your requirements.
chmod 644 /opt/elasticbeanstalk/deployment/custom_env_var
#Remove duplicate files upon deployment.
rm -f /opt/elasticbeanstalk/deployment/*.bak
-----
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
4.部署 .platform 挂钩脚本。
5.为避免手动获取文件源代码,请将以下代码添加到用户的 ~/.bash_profile 中:
source <(sed -E -n 's/+/export &/ p' /opt/elasticbeanstalk/deployment/custom_env_var)
注意:包含空格或特殊字符的环境属性将由 Bash shell 解释,并且可能会导致出现不同值。
重要提示:在 Amazon Linux 2 上,所有环境属性都集中到单个名为 /opt/elasticbeanstalk/deployment/env 的文件中。您必须仅在 Elastic Beanstalk 的应用程序部署流程中使用此文件。/opt/elasticbeanstalk/deployment/env 中定义的属性在操作系统级别不可用,如果您通过在实例上运行的手动脚本访问这些变量,则会导致“权限被拒绝”问题。/opt/elasticbeanstalk/deployment/env 文件拥有受限的权限,非 root 用户(例如,ec2-user)可能难以获取源代码。例如:
# ls -latr /opt/elasticbeanstalk/deployment/env
-r-------- 1 root root 147 Jun 17 06:23 /opt/elasticbeanstalk/deployment/env