Как получить переменные среды, определенные в serverless.yml в тестах - PullRequest
0 голосов
/ 09 ноября 2018

Я использую безсерверный фреймворк для запуска лямбда-функций на AWS.

В моем serverless.yml есть переменные среды, которые выбираются из SSM.

Когда я пишу интеграционные тесты длякод, мне нужен код, чтобы иметь переменные среды, и я не могу найти хороший способ сделать это.

Я не хочу дублировать все определения переменных только для тестов, они уже определеныв serverless.yml.Кроме того, некоторые являются секретами, и я не могу передать их исходному контролю, поэтому мне пришлось бы также повторять их в среде ci.

Пробовал использовать serverless-jest-plugin, но он не работает и не поддерживается.

Идеи, которые у меня были для решений:

  1. Сделать тесты exec sls invoke - это будет работать, но это будет означать, что код не может быть отлажен, я не буду знать тестохват, и он будет медленным.
  2. Сам парсим serverless.yml и экспортируем переменные env - возможно, но переписывание логики извлечения переменных SSM только для тестов кажется неправильным.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Решение, которое мы в итоге использовали, представляет собой плагин без сервера под названием serverless-export-env .

После добавления этого плагина вы можете запустить serverless export-env, чтобы экспортировать все разрешенные переменные среды в файл .env. Это правильно разрешает параметры ssm и делает тестирование интеграции намного проще для нас.

Кстати, чтобы получить переменные среды, установленные из файла .env, используйте пакет dotenv npm.

Кредит Гришез за решение

0 голосов
/ 24 января 2019

Вы можете запустить узел с опцией --require для добавления файла .env в команду без сервера.

  1. Создать .env в корневом каталоге проекта с помощью package.json и перечислить переменные в .env.
  2. Установить в проекте без сервера и дотенв yarn add -D serverless dotenv.
  3. Запустите команду, подобную node -r dotenv/config ./node_modules/.bin/sls invoke.

Затем вы можете получить переменные окружения в обработчике process.env.XXX.

0 голосов
/ 10 ноября 2018

Вы хотите провести поддельные юнит-тесты или что-то более похожее на интеграционные тесты?

В первом случае вам не нужны реальные значения для переменных среды. Смоделируйте вашу базу данных, или что-то еще, что требует установки переменных среды Это на самом деле предпочтительный способ, потому что тесты будут выполняться очень быстро с правильными макетами.

Если вы действительно хотите использовать подход сквозной интеграции / интеграции, то вы бы сделали что-то вроде sls invoke, но только с использованием javascript. Так что, как и обычные сетевые вызовы к вашему развернутому API.

Кроме того, я бы рекомендовал не хранить ключи в serverless.yml. Вместо этого попробуйте синтаксис secret: ${env:MY_SECRET} (https://serverless.com/framework/docs/providers/aws/guide/variables#referencing-environment-variables), и используйте вместо него переменные окружения. Если у вас есть сервер сборки ci / cd, вы можете хранить там свои секреты.

...