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

上次更新时间:2020 年 8 月 20 日

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

简短描述

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

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

解决方法

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

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

2.    创建一个 Bash 脚本,它将复制 /opt/elasticbeanstalk/deployment/env 文件并设置 644 权限,以使实例上的任何用户都可以访问该文件。例如:

.platform/hooks/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
-----

重要提示:.platform/hooks/postdeploy/01_set_env.sh 文件设置权限 chmod +x

3.    部署 .platform 挂钩文件。

4.    为避免手动获取文件源代码,请将以下代码添加到用户的 ~/.bash_profile 中:

source <(sed -E -n 's/[^#]+/export &/ p' /opt/elasticbeanstalk/deployment/custom_env_var)

注意:在 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

这篇文章对您有帮助吗?


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