Когда дело доходит до разработки приложений, безопасное управление конфиденциальной информацией, такой как ключи API, учетные данные базы данных и параметры конфигурации, имеет первостепенное значение. Эффективное управление этими переменными среды на протяжении всего жизненного цикла разработки представляет собой повсеместную проблему. Очевидно, что полагаться исключительно на файлы .env стало недостаточно по нескольким веским причинам.

В этой статье я изучаю лучшие практики эффективного управления переменными среды в масштабе вашего приложения Node с помощью
Infisical.

Что такое инфизик?

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

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

Начиная

Прежде чем вы сможете получить переменные среды для вашего приложения Node, вы должны сначала добавить их в проект в Infisical Cloud или в локальный экземпляр Infisical.

Теперь приступим к процессу настройки.

Сначала установите пакет infisical-node в свой проект:

$ npm install infisical-node --save

Затем импортируйте SDK и создайте экземпляр клиента с вашим Infisical Token:

import InfisicalClient from "infisical-node";

const client = new InfisicalClient({
  token: "your_infisical_token"
});

Чтобы обеспечить оптимальную производительность, я настоятельно рекомендую создать единственный экземпляр клиента Infisical и экспортировать его для универсального использования во всем вашем приложении. Этот подход выгоден, поскольку Node SDK реализует встроенный механизм кэширования, который сохраняет и периодически обновляет секреты, сокращая ненужные вызовы. Эта функция кэширования упрощает синхронизацию переменных среды, особенно при масштабировании.

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

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

app.get("/", async (req, res) => {
  // Asynchronously fetch the secret named "NAME" from Infisical
  const name = await client.getSecret("NAME");
  
  // Send a response containing the retrieved secret value
  res.send(`Hello! My name is: ${name.secretValue}`);
});

Вот и все!

Благодаря этой настройке ваше приложение теперь может запрашивать переменные среды у Infisical всякий раз, когда они необходимы. Теперь у вас есть возможность централизованно управлять всеми переменными среды для вашего приложения Node, что помогает избежать любых проблем, связанных с отсутствующими или неправильно настроенными переменными среды.

Для более глубокого понимания того, как эффективно управлять переменными среды, я рекомендую углубиться в документацию, чтобы изучить дополнительные функции и лучшие практики.

Но вы все еще используете файл .env…

Однако есть момент, который стоит уточнить относительно использования файла .env, который может вызвать вопрос у некоторых читателей: «Если Infisical Token, используемый для получения других переменных среды, хранится в файле .env, разве это не противоречит цель инструмента?»

Ответ - нет.

Как упоминалось ранее, основная цель рекомендуемого подхода — поддерживать синхронизацию переменных среды в вашей команде разработчиков. Часто в базу кода вводятся новые переменные среды, но обновления файлов .env остаются без внимания, что приводит к потенциальным сбоям приложения. Эта проблема становится более заметной по мере роста вашей инфраструктуры, что приводит к так называемому «тайному разрастанию». Infisical, напротив, предлагает решение, которое централизует переменные вашей среды, позволяя вам обновлять их в одном месте и беспрепятственно доставлять их всей вашей команде и инфраструктуре, от разработки до производства. Этот подход отличается от общепринятой практики непосредственного хранения многочисленных переменных среды в файлах .env.

Заключение

В заключение отметим, что Infisical — отличная платформа для упрощения управления переменными среды как для отдельных лиц, так и для команд. Будучи открытым исходным кодом и оснащенным удобным Node SDK, он обеспечивает возможность динамического извлечения переменных среды для ваших приложений Node, когда это необходимо, улучшая общий рабочий процесс разработки и развертывания.