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

上次更新时间: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)可能难以获取源代码。例如:

[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

这篇文章对您有帮助吗?


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