Лямбда-функция с использованием слоев - PullRequest
0 голосов
/ 18 марта 2020

Новый для AWS Layer, пытающийся использовать Layer в качестве зависимости для моей функции Lambda. Однако постучите в этом вопросе "errorType": "Runtime.ImportModuleError", кто-нибудь может указать на мою ошибку?

Ниже я сделал следующее:

  1. Заархивировал и загрузил мою зависимость Firebase-Admin в Lambda через CLI. В zip-файле он содержит (node_modules, package-lock. json, pacakage. json)

  2. В моей функции Lambda я настроил использование слоя с версией, указанной через AWS GUI.

Код моей лямбда-функции

var admin = require('firebase-admin');
var serviceAccount = require("../maskedPath.json");

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://maskedProject.firebaseio.com"
  });

var registrationToken = 'maskedToken';

exports.handler =  function(event, context, callback) {
    var message = {
        data: {
          score: '850',
          time: '2:45'
        },
        token: registrationToken
      };

    admin.messaging().send(message)
        .then((response) => {
            // Response is a message ID string.
            console.log('Successfully sent message:', response);
        })
        .catch((error) => {
            console.log('Error sending message:', error);
        });
}

Выполнить функцию с пустым контрольным набором {}

Выпуск, как показано ниже:

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'firebase-admin'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'firebase-admin'",
    "Require stack:",
    "- /var/task/index.js",
    "- /var/runtime/UserFunction.js",
    "- /var/runtime/index.js",
    "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
    "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
    "    at Object.<anonymous> (/var/runtime/index.js:43:30)",
    "    at Module._compile (internal/modules/cjs/loader.js:955:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)",
    "    at Module.load (internal/modules/cjs/loader.js:811:32)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:723:14)",
    "    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)",
    "    at internal/main/run_main_module.js:17:11"
  ]
}

У меня также есть попытался настроить функцию my lambda для использования слоя через CLI со строкой кода ниже, результат был "LastUpdateStatus": "Successful"

aws lambda update-function-configuration --function-name maskedData --layers arn:aws:lambda:maskedData:layer:maskedData:1

1 Ответ

0 голосов
/ 18 марта 2020

Удалось найти причину, по-видимому, для этого требуется дополнительный слой папок.

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

Для другого языка, используемого в Lambda, у вас должен быть дополнительный слой папки с другим именем. Для моего случая я создал папку nodejs и переместил node_modules внутрь, затем повторно загрузил ее как 2-ую версию.

xray-sdk.zip

└ nodejs/node_modules/aws-xray-sdk 

Подробнее о: Включение зависимостей библиотеки в слой

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