nodejs中如何访问ecs任务定义环境变量?

Posted

技术标签:

【中文标题】nodejs中如何访问ecs任务定义环境变量?【英文标题】:How to access ecs task definition environment variables in nodejs? 【发布时间】:2019-12-01 14:26:41 【问题描述】:

我正在尝试使用 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

我希望能够从任务定义中设置这些环境变量,然后使用 process.env 在 nodejs 应用程序中引用它们,而不是在 Dockerfile 中设置它们。

【问题讨论】:

这应该可以工作,但请注意,您不要在 docker 中使用 RUN 命令设置环境变量 显然,像这样设置它们可以让process.env使用它们 hm,我不是节点专家,但如果是这样的话,环境变量会在构建过程中添加到进程中,并且在运行时不可用 我使用类似的设置滚动,(基于 laravel 的项目),它按预期工作 您的项目中是否还有 .env 文件?因为如果 .env 文件丢失,它可能会静默失败 【参考方案1】:

这是我刚刚使用 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/自己测试

【讨论】:

以上是关于nodejs中如何访问ecs任务定义环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 AWS ECS 任务定义提供环境变量?

aws 如何从生产环境中的 lambda 函数访问 ECS 服务

我应该如何将敏感的环境变量传递给 Amazon ECS 任务?

如何在 ECS 任务中将 rds.DatabaseCluster 机密作为环境变量传递

AWS ECS:ENV 变量超出任务定义 JSON

如何从 ECS 容器中获取任务 ID?