Лямбда-слои - PullRequest
       17

Лямбда-слои

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

Я создаю лямбда-слой, объединяя некоторые зависимости, включая node_modules.Я успешно создаю слой, но когда я пытаюсь запросить модуль из моего кода, консоль сообщает, что модуль не найден.Вот код

var Promise = require('promise');
module.exports.handler = function(event, context, callback) {   
  new Promise(function (resolve, reject) {
    setTimeout(function() {
      callback(null, "helloWorld2");
    }, 9000);
  });
};

Как я могу ссылаться на модули узлов из слоя ???

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Как у вас работает лямбда?Если через sam cli , что-то похожее на приведенное ниже работает для меня как мой template.yaml ...

пример шаблона

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: example of node.js lambda function using layer for dependencies

Resources:

  ExampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: nodejs8.10
      CodeUri: nodejs/
      Handler: src/event.handler
      Layers:
        - !Ref NodeModulesLayer

  NodeModulesLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      Description: full set of function dependencies
      ContentUri: ./
      CompatibleRuntimes:
        - nodejs6.10
        - nodejs8.10
      LicenseInfo: 'Available under the MIT-0 license.'
      RetentionPolicy: Retain

, указывающий на локальный слой

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

Аспект, который я нашел хитрым, заключается в том, что каталогОжидается, что структура слоя node.js будет ...

nodejs/
  node_modules/

..., что означает, что для того, чтобы локально установленный каталог node_modules работал как слой, ваш файл package.jsonдолжен быть вложен в папку с именем nodejs.

Обратите внимание на пути в приведенном выше примере template.yaml:

  1. ExampleFunction.Properties.CodeUri имеет значение nodejs/
  2. ExampleFunction.Properties.Handler должен быть указан как путь к файлу вашего обработчика, относительно nodejs/.
  3. NodeModulesLayer.Properties.ContentUri установлен как папка, содержащая как файл template.yaml, так и nodejs dir.

Это означает, что в моем примере предполагается следующая структура ...

nodejs/
  node_modules/
  src/
    event.js
  package.json
template.yaml

сохранить поддержку сборки sam

Еще один недочёт, который нужно опасаться ...

Что касается определения ресурса вашей функции в template.yaml, то есть некоторая "гибкость"литий "с точки зрения того, какие части пути вы положили в CodeUri против Handler.В некоторых случаях выполнение ...

    Properties:
      CodeUri: nodejs/src/
      Handler: event.handler

... работает так же хорошо, как выполнение ...

    Properties:
      CodeUri: nodejs/
      Handler: src/event.handler

НО, если вы используете команду sam buildБывший НЕ будет работать.Эта команда ожидает найти package.json внутри каталога CodeUri.Поэтому придерживайтесь CodeUri: nodejs/ и используйте значение Handler для навигации по любой дополнительной иерархии папок, необходимой для достижения вашего обработчика.

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

Попробуйте простой пример настройки лямбда-слоя в nodejs:

https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...