在 AWS Elastic Beanstalk 下设置 node.js process.env 变量

Posted

技术标签:

【中文标题】在 AWS Elastic Beanstalk 下设置 node.js process.env 变量【英文标题】:Set node.js process.env variables under AWS Elastic Beanstalk 【发布时间】:2016-01-09 18:38:06 【问题描述】:

我正在尝试将特定于 Jenkins 构建的环境变量传播到 node.js 服务器中,以便可以知道 AWS 弹性 beanstalk 环境正在运行哪个构建#/git-branch/commit-sha。

按照各种 AWS 指南,我创建了一个包含环境变量的文件。目的是在构建过程中替换文件中的值,以便它们反映构建特定的信息:

$ cat .ebextensions/env.config
option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: BUILD_NUMBER
    value: BUILD_NUMBER_VALUE

问题是当节点实例在 EBS 环境中启动时,process.env.BUILD_NUMBER 未设置(由节点服务器内的 console.log(process.env) 确认)。

知道此配置中缺少哪些环境变量以显示在 Node 的 process.env 下吗?

注意事项:

看来namespace 不是强制性的。为了安全起见,我尝试了使用和不使用它,没有区别

【问题讨论】:

【参考方案1】:

另一个可能的选择是使用package.json 为您生成状态。如果您运行npm version patch,npm 将增加您应用程序的补丁版本。它还将使用相同的版本名称标记您的 git 存储库。如果您随后运行 eb deploy elastic beanstalk 将创建一个以您的标签命名的 zip 文件。例如:

    package.json 中的当前版本 === "1.3.2" 运行npm version patch package.json 中的新版本 === "1.3.3"

    eb 部署日志:

    正在创建应用程序版本存档“v1_3_3”。`

    将 store-api/v1_3_3.zip 上传到 S3。这可能需要一段时间。`

然后您可以在代码中的 package.json 中要求:

var p = require('./package.json');
console.log(p.version);

结果是你最终在你的 repo 中得到一个标签,该标签链接到你的 package.json 文件中的一个版本,然后也链接到 s3 中的一个 .zip 文件。

【讨论】:

我们的系统将部署与多个 Jenkins 作业创建的构建集成在一起(一些专用于 gihthub 拉取请求)。因此,我需要将特定构建与 Jenkins 作业及其相关的环境变量联系起来。虽然清晰、简单和优雅,但这个解决方案不会削减它...... 我知道这个答案不是问题作者所期望的,但这正是我正在寻找的。简洁大方。【参考方案2】:

发现问题

我对此感到相当愚蠢,因为问题是 .ebextensions/env.config 文件在项目中的 gulp 任务期间被覆盖。因此,问题在于配置文件并未实际部署。部署后,一切都像魅力一样运行......

【讨论】:

以上是关于在 AWS Elastic Beanstalk 下设置 node.js process.env 变量的主要内容,如果未能解决你的问题,请参考以下文章

AWS - 如何在不丢失实例和弹性 IP 的情况下暂停 Elastic Beanstalk 环境?

AWS Elastic Beanstalk 日志轮换

AWS Elastic beanstalk - 更改解决方案堆栈名称

在 AWS Elastic Beanstalk 上设置 Django:未找到 WSGIPath

aws elastic beanstalk上的url转发

发生故障时如何查看 AWS Elastic Beanstalk 部署过程日志