Как установить переменные среды, используя Node? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь автоматически установить три переменные среды AWS (AWS_ACCESS_KEY, AWS_ACCESS_ID и AWS_SESSION_TOKEN), которые получены из JSON, возвращаемого aws sts assume-role.

Обычно, если я хочу автоматическиустановить переменные окружения Я бы написал скрипт Bash, скажем setvars.sh:

export AWS_ACCESS_KEY=something

, а затем

source setvars.sh

Я знаю, что если вы сделаете process.env.AWS_ACCESS_KEY = 'something'в сценарии Node это не повлияет на родительский процесс.

Существует ли обходной путь, позволяющий использовать сценарий Node (а не Bash, с которым будет сложно манипулировать JSON) для установки переменных средытаким образом?

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Когда вы устанавливаете переменные окружения с помощью скрипта bash и запускаете в оболочке , они доступны только процессам, которые запускаются в той же оболочке . Поэтому вам нужно будет запустить приложение Node в той же оболочке для доступа к этим переменным.

Теперь другой подход заключается в добавлении их в process.env объект, так что вы можете написать сценарий конфигурации, просто чтобы загрузить все переменные конфигурации и требовать его в верхней части приложения Node. Вам необходимо спроектировать приложение таким образом, чтобы вы могли использовать всю конфигурацию в одном файле.

Например:

config.js:

process.env.AWS_ACCESS_KEY = 'something'

app.js:

// Starting point of your app
require('./config');
const app = require('express')();

// Use the config
// AWS_API(process.env.AWS_ACCESS_KEY);

// Other App Logic

Этот подход в основном используется в среде разработки, в рабочей среде вы можете использовать первый подход или добавить глобальную конфигурацию, используя /etc/profile или /etc/environment. См. how-to-set-global-environment-variable *

0 голосов
/ 03 апреля 2019

В качестве дополнения к принятому ответу, Вы также можете определить свой ENV в файле и импортировать конкретную конфигурацию ENV на основе выпуска.

Таким образом, вы можете при необходимости установить файлы ENV для вашей рабочей среды, среды разработки или производства в статических конфигурациях.

Из хранилища / документов dotenv

Как можно раньше в вашем приложении, требуйте и настраивайте dotenv.

require('dotenv').config()

Создайте файл .env в корневом каталоге вашего проекта. добавлять специфичные для среды переменные в новых строках в виде NAME = VALUE. Например:

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3

process.env теперь содержит ключи и значения, которые вы определили в файле .env.

const db = require('db')
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
})

Так что для вас вы можете сделать асинхронный вызов из AWS, чтобы получить эти переменные ENV, или, возможно, сохранить их в .env файле

https://github.com/motdotla/dotenv

0 голосов
/ 03 апреля 2019

Вы можете прочитать файл JSON и установить переменные окружения в process.env:

process.env['environment_variable_name'] = 'environment_variable_value';

NB : Это будет доступно только для этого конкретного процесса узла и его дочерних элементов, а не для всех.

...