бессерверные переменные в локальных тестах

serverless предлагает удобный рабочий процесс для использования переменных как в коде функции времени выполнения, так и в конфигурации AWS для функций Lambda и маршрутизации шлюза API. Это описано на странице http://docs.serverless.com/docs/templates-variables и Как определять переменные СУХИМ способом.

Мне сложно понять, как назначать переменные, когда я тестирую свои лямбда-функции локально с помощью sls function run -s stage. Функция работает нормально, когда я запускаю тест на Lambda, включив параметр -d, но без него он не работает, потому что не была назначена необходимая переменная. serverless предоставляет следующие сообщения:

Serverless: WARNING: This variable is not defined: region  
Serverless: WARNING: This variable is not defined: appEnv

Я использую переменные DRY, как описано в ссылке 2. Конкретно:

s-переменные-aguldman-useast1.json:

{
  "appEnv": "qa"
}

функции / fn1 / s-function.json:

{
...
  "environment": {
    "NODE_ENV": "${appEnv}"
  }
...
}

функции / fn1 / handler.js:

...
var foo = process.env.NODE_ENV;
...

Любой совет?

Спасибо!


person Andrew Guldman    schedule 26.04.2016    source источник


Ответы (3)


Я должен немного предположить здесь, потому что мне не хватает информации из вашего вопроса. Итак, я предполагаю, что:

  • что вы пытаетесь вывести переменную с именем region
  • что у вас есть файл s-function.json, в котором есть следующее:

    "environment": { "myEnvironmentVar":"${myEnvironmentVar}" }

  • что вы пытаетесь получить доступ к содержимому переменной региона, используя этот код в своей лямбда-функции: process.env.myEnvironmentVar;

если это предупреждение, которое вы получаете: Serverless: WARNING: This variable is not defined: region

Если это так, то проблема в том, что вы не определили эту переменную ни в одном из этих двух файлов:

  • _meta / переменные / s-переменные-common.json
  • _meta / переменные / s-переменные-stage.json

Также, если вы добавите значение в s-variables-common.json, а затем также добавите его в s-variables-stage.json, тогда s-variables-stage.json переопределит значение s-variables-common.json

person OneMuppet    schedule 26.04.2016
comment
Верно-верно. Извините за паршивый вопрос. Я просто улучшил его и (как и ожидалось) в процессе этого смог ответить на свой вопрос. Спасибо за помощь! - person Andrew Guldman; 26.04.2016

Если я добавлю параметр -r us-east-1 в serverless function run, он будет работать нормально. Интересно, что бессерверному режиму не нужна опция -r, когда он запускается удаленно (если в проекте есть один регион), но нужен при локальном запуске.

Обобщить:

serverless function run -s stage -r us-east-1

успешно читает переменные из соответствующего файла s-переменных, но

serverless function run -s stage

не. Наоборот,

serverless function run -s stage -d

отлично работает без явного указания региона, по-видимому, потому что в моем проекте только один регион.

person Andrew Guldman    schedule 26.04.2016

Прежде всего, выполните следующую команду, чтобы создать json-файл переменных этапа / регионов в папке _meta.

sls stage create

затем укажите свое сценическое имя и регион (вы должны предоставить ключ доступа Amazon и секретный ключ). Затем будет создан следующий файл json.

_meta/variables/s-variables-{your_region}-{your_stage}.json
ie. _meta/variables/s-variables-us-east-1-dev.json

Если вы хотите добавить переменную вручную, вы можете сделать это следующим образом. Эти переменные будут добавлены к вышеуказанным s-переменным - {your_region} - {your_stage} .json файл.

sls variables set

а затем укажите ключ и значение или в одной строке следующим образом

sls variables set -k appEnv -v dev

Надеюсь это поможет.

person Viraths    schedule 23.11.2016