Бессерверный автономный неопределенный модуль при загрузке из лямбда-слоя

У меня есть следующее дерево проекта

Бессерверный автономный неопределенный модуль при загрузке из лямбда-слоя

Где папка nodejs — это лямбда-слой, определенный в следующем serverless.yaml

service: aws-nodejs # NOTE: update this with your service name


provider:
  name: aws
  runtime: nodejs8.10
  stage: dev

plugins:
  - serverless-offline
layers:
  layer1:
    path: nodejs # required, path to layer contents on disk
    name: ${self:provider.stage}-layerName # optional, Deployed Lambda layer name

functions:
  hello:
    handler: handler.hello
    layers:
      - {Ref: Layer1LambdaLayer}
    events:
      - http:
          path: /dev
          method: get

Уровень 1 содержит только пакет UUID.

Поэтому, когда я пытаюсь запустить лямбду локально с помощью бессерверного автономного плагина, он говорит, что не может найти UUID модуля.

Но когда я развертываю код на AWS, он работает как часы.

Каким-либо образом мы можем запустить лямбда-слои локально для целей тестирования? а для ускорения разработки?

Или есть ли способ, где я могу динамически установить путь node_module так, чтобы он указывал на папку слоя во время разработки, и как только мне нужно перейти к производству, он изменит путь на правильный

как называется твоя тема? выглядит хорошо!

nedo 09.04.2019 12:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
1
4 470
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Хорошо, после многих испытаний я нашел рабочее решение

Я добавил команду запуска npm, которая экспортирует временный путь node_module в список путей.

"scripts": {
    "offline": "export NODE_PATH=\"${PWD}/nodejs/node_modules\" && serverless offline"
  },

Таким образом, узел может искать модули узла внутри подпапок.

Хорошее решение. Но что делать, если у вас больше одного модуля?

yuriy.stos 05.08.2019 08:04

@ yuriy.stos, вы имеете в виду, если у нас есть несколько слоев?

Allloush 06.08.2019 05:35

Кстати, эта проблема была исправлена ​​в sls 1.49.0. Просто беги:

sudo npm i serverless

Затем вы должны указать package include в разделе слоя serverless.yml.

service: aws-nodejs # NOTE: update this with your service name
provider:
  name: aws
  runtime: nodejs8.10
  stage: dev

plugins:
  - serverless-offline
layers:
  layer1:
    path: nodejs # required, path to layer contents on disk
    package:
    include:
    - node_modules/**
    name: ${self:provider.stage}-layerName # optional, Deployed Lambda layer name

functions:
  hello:
    handler: handler.hello
    layers:
      - {Ref: Layer1LambdaLayer}
    events:
      - http:
          path: /dev
          method: get

Протестировано во время выполнения nodejs10.x

Решит ли это проблему поиска пакетов для бессерверного автономного плагина?

Allloush 06.08.2019 03:29

Протестировано. Не работает. Serverless по-прежнему не может найти путь /opt/something, когда something на самом деле не в /opt (это, очевидно, плохая практика помещать ваш код под учетной записью root в /opt

Alex G.P. 11.12.2019 12:05

Я обошел это, запустив serverless-offline в контейнере и скопировав свои слои в каталог /opt/ с помощью gulp. Я установил gulp watch, чтобы отслеживать любые изменения слоя и копировать их в каталог /opt/.

Я использую слои в автономном режиме без сервера, устанавливая слой из локальной файловой системы в качестве зависимости от разработчиков.

npm i <local_path_to_my_layer_package> --save-dev

Другие вопросы по теме