在 AWS Beanstalk ebextensions 中访问环境变量
Accessing environment variables in AWS Beanstalk ebextensions
我正在尝试访问我在 AWS Beanstalk 配置中定义的环境变量。我需要在 .ebextensions
或 中的配置文件中访问它,该文件被复制到配置文件中。我尝试了以下方法:
container_commands:
update_nginx_config:
command: "cp .ebextensions/files/nginx/nginx.conf /etc/nginx/nginx.conf"
并且在我的 nginx.conf
文件中,我尝试访问 $MYVAR
、${MYVAR}
和 {$MYVAR}
,其中一些建议 here and here(后者直接在配置文件中)。
files:
"/etc/nginx/nginx.conf" :
mode: "000644"
owner: root
group: root
content: |
$MYVAR ${MYVAR} {$MYVAR}
这也不行。在所有情况下,变量名都只是输出,例如 $MYVAR
,因此 Beanstalk 无法识别我的变量。我在关于 container_commands
的 AWS documentation 中找到了以下内容:
They also have access to environment variables such as your AWS
security credentials.
这个不错,就是没说怎么样。
如何使用 ebextensions 访问环境变量,无论是在配置文件本身还是在复制到位的单独文件中?
提前致谢!
我联系了亚马逊技术支持来回答这个问题,这是他们的回复:
Unfortunately the variables are not available in ebextensions
directly. The best option to do that is by creating a script that then
is run from container commands like this:
files:
"/home/ec2-user/setup.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
# Commands that will be run on container_commmands
# Here the container variables will be visible as environment variables.
container_commands:
set_up:
command: /home/ec2-user/setup.sh
因此,如果您创建 shell 脚本并通过容器命令调用它,那么您将可以访问 shell 脚本中的环境变量,如下所示:$ENVIRONMENT_VARIABLE
。我已经测试过了,它有效。
如果您遇到问题 运行 以 root 身份运行脚本并且无法读取配置的环境变量,请尝试将以下内容添加到脚本的顶部。
. /opt/elasticbeanstalk/support/envvars
根据您的用例,您可能需要稍微改变一下您的方法(至少我做了),但这是一个可行的解决方案。我希望这对某人有所帮助!
来自这个回答:
您可以使用此处描述的 GetOptionSetting 函数:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html
例如,如果您设置 worker_processes
变量,它可能看起来像:
files:
"/etc/nginx/nginx.conf" :
mode: "000644"
owner: root
group: root
content: |
worker_processes `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MYVAR"}}`;
注意函数调用中的反引号 ``。
如果您直接在容器命令中使用值,实例附带的 get-config
脚本可以提供帮助。
示例:
20_install_certs:
command: |
MY_VAR=$(/opt/elasticbeanstalk/bin/get-config environment -k MY_VAR)
这有点不同use-case,仅用于调试目的。
您可以通过
访问环境变量
$ /opt/elasticbeanstalk/bin/get-config environment
文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platforms-scripts.html
我认为只适用于 Linux 环境!
我正在尝试访问我在 AWS Beanstalk 配置中定义的环境变量。我需要在 .ebextensions
或 中的配置文件中访问它,该文件被复制到配置文件中。我尝试了以下方法:
container_commands:
update_nginx_config:
command: "cp .ebextensions/files/nginx/nginx.conf /etc/nginx/nginx.conf"
并且在我的 nginx.conf
文件中,我尝试访问 $MYVAR
、${MYVAR}
和 {$MYVAR}
,其中一些建议 here and here(后者直接在配置文件中)。
files:
"/etc/nginx/nginx.conf" :
mode: "000644"
owner: root
group: root
content: |
$MYVAR ${MYVAR} {$MYVAR}
这也不行。在所有情况下,变量名都只是输出,例如 $MYVAR
,因此 Beanstalk 无法识别我的变量。我在关于 container_commands
的 AWS documentation 中找到了以下内容:
They also have access to environment variables such as your AWS security credentials.
这个不错,就是没说怎么样。
如何使用 ebextensions 访问环境变量,无论是在配置文件本身还是在复制到位的单独文件中?
提前致谢!
我联系了亚马逊技术支持来回答这个问题,这是他们的回复:
Unfortunately the variables are not available in ebextensions directly. The best option to do that is by creating a script that then is run from container commands like this:
files:
"/home/ec2-user/setup.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
# Commands that will be run on container_commmands
# Here the container variables will be visible as environment variables.
container_commands:
set_up:
command: /home/ec2-user/setup.sh
因此,如果您创建 shell 脚本并通过容器命令调用它,那么您将可以访问 shell 脚本中的环境变量,如下所示:$ENVIRONMENT_VARIABLE
。我已经测试过了,它有效。
如果您遇到问题 运行 以 root 身份运行脚本并且无法读取配置的环境变量,请尝试将以下内容添加到脚本的顶部。
. /opt/elasticbeanstalk/support/envvars
根据您的用例,您可能需要稍微改变一下您的方法(至少我做了),但这是一个可行的解决方案。我希望这对某人有所帮助!
来自这个回答:
您可以使用此处描述的 GetOptionSetting 函数:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html
例如,如果您设置 worker_processes
变量,它可能看起来像:
files:
"/etc/nginx/nginx.conf" :
mode: "000644"
owner: root
group: root
content: |
worker_processes `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MYVAR"}}`;
注意函数调用中的反引号 ``。
如果您直接在容器命令中使用值,实例附带的 get-config
脚本可以提供帮助。
示例:
20_install_certs:
command: |
MY_VAR=$(/opt/elasticbeanstalk/bin/get-config environment -k MY_VAR)
这有点不同use-case,仅用于调试目的。
您可以通过
访问环境变量$ /opt/elasticbeanstalk/bin/get-config environment
文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platforms-scripts.html
我认为只适用于 Linux 环境!