Постановка задачи

У вас есть приложение узла, которое должно поддерживать отклонения в переменных среды; однако это приложение размещено в Elasticbeanstalk. В этом посте будет показано, как включить поддержку переменных среды для вашего приложения узла.

Почему

Переменные среды обеспечивают гибкость вашего кода без необходимости иметь жесткие значения кода, которые могут меняться по разным причинам:

  • Вы не контролируете ценности
     – Сторонние интеграции
  • Значение зависит от среды
    : DEV, UAT, STAGING, PROD и т. д.
  • Значения могут определять некоторый условный путь выполнения
     – Отключение электронной почты
     – Управление шаблонами ведения журналов
     – Переключатели функций

Как

Нам нужен файл для стандартизации поддержки переменных окружения в приложении. Создайте файл с именем `env.js`. Он будет экспортировать объект, содержащий все в `process.env`, в дополнение к определенной переменной `PORT`.

import dotenv from "dotenv";
// injects values from the .env file into process.env
dotenv.config();
const PORT = process.env.PORT || 8080;
const resolved = { …process.env, PORT };
export default resolved;

Предположим, у нас есть базовое экспресс-приложение Node. Для простоты отладки добавьте базовый маршрут, отображающий некоторую переменную среды MY_ENV_VALUE. Он вернет определенную переменную среды.

import express from “express”;
import env from “./env.js”;
const app = express();

app.get('/', (req, res) => {
 res.send('Hello World!')
})
app.get("/env", (req, res) => {
 const { MY_ENV_VALUE } = env;
 res.status(200).json({
 MY_ENV_VALUE
 });
});
const port = 8080;
app.listen(port, () => {
 console.log("Running on Port: " + port);
});

Запуск приложения в Elasticbeanstalk и отправка запроса GET/env покажет, что переменная среды не определена.

Давайте определим это в Elasticbeankstalk.

  • Перейти к конфигурации

  • Найдите раздел «Программное обеспечение». Выберите «Редактировать».

  • Установите ключ и значение среды. Выберите «Применить».

  • Подождите, пока среда перезагрузится с указанными нами новыми свойствами среды. Свойство среды будет добавлено в `process.env` и по замыслу будет отображаться в модуле `env`, который мы экспортировали ранее.


Как только среда обновится, запустите ее в браузере.

ПОЛУЧИТЬ /env показывает:

Заключение

Поддержка переменных среды в вашем приложении позволит создавать масштабируемые приложения, которым не нужны изменения для поддержки изменений в вашей среде. Если вам необходимо поддерживать секретные переменные среды, я рекомендую использовать AWS KMS https://aws.amazon.com/kms/, этот сервис зашифрует ваши хранящиеся ключи и предоставит вам более детальный контроль доступа к значениям.