Модуль SAM Lambda Layer не найден для общего кода nodejs - PullRequest
0 голосов
/ 10 октября 2019

Я определяю несколько лямбда-функций в одном файле template.yaml. Эти функции имеют некоторый общий код, но не опубликованные модули. Я предполагал, что смогу превратить этот общий материал в версионный слой. С каталогом, действующим следующим образом:

  • Project
    • LambdaFunc1
      • package.json
      • node_modules
      • func1. js
    • LambdaFunc2
      • package.json
      • node_modules
      • func2.js
    • common-stuff
      • package.json
      • my-common.js
    • template.yaml
    • node_modules

После тестирования я копирую common-stuff в каталог Projects / node_modules, а мои другие решения LambdaFuncs require ('common-stuff') основаны на перемещении Node вверх по структуре каталогов для не найденных модулей.

Чтобы SAM выполнил сборку / пакет / развертывание, я заметил, что SAM не затрагивает общие вещи, но создает структуру .aws-sam / build с двумя другими функциями Lambda. Мне нужно было создать структуру для SAMUR CodeURI для архивирования.

Package / common-stuff / packaged / nodejs / node_modules / common-stuff / с моим package.json и my-common.js. Мой package.json использует имя: "common-stuff", main: "my-common.js"

Других файлов нет - ничего нет в nodejs, так как я только упаковываю модули. Это кажется мне причиной для слоев. Я подтвердил, что SAM упаковывает zip-файл, содержащий nodejs / node_modules / common-stuff / ..., загрузив zip-файл Layer.

В определении шаблона функции Lambda я добавляю разрешение для разрешения 'lambda: GetLayerVersion». Когда я просматриваю лямбда-функцию в консоли, я вижу это разрешение вместе с другими.

Интересно, что aws lambda get-layer-version-policy --layer-name MyLayer --version-number 8 -Выводимый текст возвращает ошибку, что нет прикрепленных политик. Я предполагаю, что это потому, что я непосредственно добавил его в функцию, как я вижу это в функции Lambda с правильным Allow / GetLayerVersion.

Это, кажется, удовлетворяет тому, что я прочитал, однако Nodeне находит модуль. Журналы CloudWatch просто говорят, что не могут найти модуль, ничего о разрешениях или синтаксисе. Кроме того, эти функции работали, пока я не добавил подход Layer.

'sam local start-api' тоже не работает, та же ошибка. Когда я смотрю в каталог кэша слоев по умолчанию в Windows 10 C: \ Users \ me \ AppData \ Roaming \ AWS SAM \, там находится пустой каталог layer-pkg.

Есть ли какая-то другая магия, которую мне не хватает? Есть ли лучший подход для совместного использования общего кода между функциями Node Lambda?

Я не могу сказать, не может ли AWS получить слой, или структура zip неверна, или требование («обычный материал») отличается (надеюсь, что нет).

Скотт

...