node.js - nodejs中如何访问ecs任务定义环境变量?
问题描述
我正在尝试使用 process.env 访问在我的 nodejs 应用程序内的任务定义中设置的环境变量。
我使用 Dockerfile 创建项目的映像,将其上传到 ECR,然后在任务定义中使用此映像。
我在 Dockerfile 中为 nodejs 应用程序设置了环境变量,如下所示:
# Dockerfile
...
RUN ROOT_DIR='/'
RUN PUBLIC_DIR='/public'
...
我有这个任务定义:
# task_definition.json
...
"environment" : [
{ "name" : "KeyOne", "value" : "KeyOneValue" },
{ "name" : "KeyTwo", "value" : "KeyTwoValue" }
]
...
我无法访问process.env.KeyOne
/ process.env.KeyTwo
(它们是undefined
)
我希望能够从任务定义中设置这些环境变量,然后在 nodejs 应用程序中引用它们,process.env
而不是在 Dockerfile 中设置它们。
解决方案
这是我刚刚使用 ECS Fargate 对我的帐户进行的测试。任务定义中的所有环境变量都可以从 NodeJS 代码中访问。
源代码位于 https://github.com/sebsto/ecs-demo/tree/master/so
任务定义摘录:
"environment": [
{
"name": "KEY1",
"value": "VALUE1"
}
],
代码摘录:
app.get('/', (req, res) => {
res.send(`Hello world<br/>${JSON.stringify(process.env, null, 2)}`);
});
输出 :
Hello world
{ "KEY1": "VALUE1", "NODE_VERSION": "10.16.0", "HOSTNAME": "ip-10-0-0-83.eu-west-1.compute.internal", "YARN_VERSION": "1.16.0", "HOME": "/root", "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI": "/v2/credentials/b630982f-dffb-4ccc-9c8b-8311e42b57ab", "AWS_EXECUTION_ENV": "AWS_ECS_FARGATE", "AWS_DEFAULT_REGION": "eu-west-1", "ECS_CONTAINER_METADATA_URI": "http://169.254.170.2/v3/12186f93-de7b-47e3-a096-b0f23d7e0e81", "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "AWS_REGION": "eu-west-1", "PWD": "/usr/src/app" }
我会让容器保持运行几个月,你可以在http://52.18.232.75:8080/测试自己
推荐阅读
- python - 虚拟环境处于活动状态,但在 Python 3 中实际上没有受到任何影响
- rust - 是否可以将两箱库中的 proc-macro 箱视为实现细节而不遵循语义版本控制?
- html - 为什么父母和孩子的div有相同的高度
- java - 如何在构造函数中明确表示可以插入一个对象以及该对象的所有子类?
- java - 我需要更改此函数以计算正确的平均值吗?
- javascript - 尝试一个可编辑的 vue.js 自动补全组件
- windows - Windows 10 上的 Windows 启动中自动运行 devserver 17 的问题
- php - 如何通过像下面的脚本这样的 php 从 xml 的一个标签中获取数据?
- java - 在java中消费Neo4j驱动的结果
- sql - 我怎样才能写出同月雇佣的员工和订单?