在 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 - 更改解决方案堆栈名称