在 SSH 中缺少 Elastic Beanstalk 环境变量

Posted

技术标签:

【中文标题】在 SSH 中缺少 Elastic Beanstalk 环境变量【英文标题】:Elastic Beanstalk Environment Variables Missing When In SSH 【发布时间】:2019-10-04 10:18:56 【问题描述】:

我正在尝试在我的 NodeJS 应用程序上运行一些需要通过 SSH 运行的命令(例如 Sequelize 播种),但是当我这样做时,我注意到缺少预期的 env var。

如果我在本地计算机上运行 eb printenv,我会看到在我的 EB 仪表板中设置的预期环境变量

如果我通过 SSH 登录并运行 printenv,我期望的所有这些变量都会丢失。

那么会发生什么,当我运行种子时,我得到一个错误:

node_modules/.bin/sequelize db:seed:all
ERROR: connect ECONNREFUSED 127.0.0.1:3306

我注意到端口错误,应该是 5432。我检查了我的环境变量是否设置为printenv,但它们不存在。这让我怀疑我的 ssh 会话中没有加载正确的 env 变量,并且 NodeJS 正在回退到我在配置中提供的默认值。

我在网上找到了一些解决方案,比如运行以下加载环境变量:

/opt/python/current/env

但是python目录不存在。 /opt/ 中的所有内容都是 elasticbeanstalkaws 目录。

我取得了一些成功,因此我至少可以通过运行以下命令看到环境变量存在于服务器上的某个位置:

sudo /opt/elasticbeanstalk/bin/get-config environment --output YAML

但是仅仅运行这个命令并不能解决问题。它所做的只是将预期的环境变量输出到屏幕上。那是东西!至少我知道他们肯定在那里!但是当我运行printenv时,环境变量仍然不存在@

那么我该如何解决这个问题呢? Sequelize 和 NodeJS 显然也没有看到 env 变量,它正在尝试使用在我的配置文件中设置的后备默认值。

【问题讨论】:

【参考方案1】:

我知道我的回答迟了,但我遇到了同样的问题,在尝试使用 bash 脚本后,我找到了一种将它存储在环境变量中的方法。 您可以简单地运行以下命令:

export env=`/opt/elasticbeanstalk/bin/get-config environment -k <your-variable-name>`

现在您将能够轻松访问此变量:

echo $your-variable-name

之后,您可以利用 env var 做任何您喜欢的事情。就我而言,我用它来决定在一个名为build-script.sh 的文件中构建我的代码的哪个版本,其内容如下:

# get env variable to know in which environment this code is running in
export env=`/opt/elasticbeanstalk/bin/get-config environment -k environment`

# building the code based on the current environment
      if [ $env = "production" ]
      then
              echo "building for production"
              npm --prefix /var/app/current run build-prod
      else
              echo "building for non production"
              npm --prefix /var/app/current run build-prod
      fi

希望这可以帮助任何面临同样问题的人??

【讨论】:

以上是关于在 SSH 中缺少 Elastic Beanstalk 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 在配置菜单中没有负载均衡器设置

Elastic Beanstalk:将分支部署到环境

将 ssh 密钥添加到 Elastic Beanstalk

AWS Elastic Map Reduce Hive 运行 v0.5?缺少函数:“str_to_map”、“reflect”

为 Elastic Beanstalk 上的 github 私有存储库访问设置 SSH 密钥

markdown Elastic BeanstalkにSSHで接続する