如何使用 Elastic Beanstalk 实例 shell 中的环境变量?

上次更新时间:2021 年 1 月 6 日

我想使用 AWS Elastic Beanstalk 实例 shell 中的环境变量。

简短描述

在 Elastic Beanstalk 中,操作系统不会显示环境变量。

要在环境变量设置为 Elastic Beanstalk 环境变量时将实用工具与操作系统中的环境变量一起使用,必须使用可将环境变量导出为操作系统变量的 .ebextension。

以下解决方法显示了如何执行此操作:

1.使用 get-config 实用工具读取您的 Elastic Beanstalk 环境变量。

2.使用 jq 实用工具(可从 jq 网站获得)将 get-config 输出从 JSON 转换为 shell 变量。

3.将变量保存在 /etc/profile.d/sh.local 文件中。bash 将读取此文件以将变量导出到操作系统。

解决方法

1.在应用程序源包中创建一个 .ebextension 文件,并包含以下内容:

commands:
    setvars:
        command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local
packages:
    yum:
        jq: []

注意:第 1 步中的配置文件称为 setvars.config

2.保存 .ebextension 文件并将其部署到 Elastic Beanstalk 环境中。

3.要测试是否正在导出变量,请使用 SSH 连接到您的实例,然后运行以下命令。

env | grep VARIABLE_NAME

重要提示:对于第 3 步,请将 VARIABLE_NAME 设置为在环境中定义的变量。

输出将显示您的环境变量是否设置正确。在以下示例输出中,在 Elastic Beanstalk 环境中定义了一个名为 RDS_PORT 的变量。

$ env|grep RDS_PORT
RDS_PORT=3306

注意:由于您使用的是 .ebextension 上的命令,因此只能使用新的部署更新 sh.local 文件。如果在环境中添加或更改新变量,则必须在将变量导出到操作系统之前创建新部署。