【问题标题】:Lambda function using Layers使用层的 Lambda 函数
【发布时间】:2020-03-18 10:16:22
【问题描述】:

AWS Layer 的新手,尝试使用 Layer 作为我的 Lambda 函数的依赖项。但是敲这个问题"errorType": "Runtime.ImportModuleError",有人能指出我的错误吗?

以下是我所做的:

  1. 通过 CLI 将我的 Firebase-Admin 依赖项压缩并上传到 Lambda。在 zip 中它包含(node_modules、package-lock.json、pacakage.json)

  2. 在我的 Lambda 函数中,我已设置为使用具有通过 AWS GUI 指定的版本的层。

我的 Lambda 函数上的代码

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);
        });
}
  1. 使用空测试用例执行函数{}

  2. 问题如下:

{
  "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"
  ]
}

我还尝试将我的 lambda 函数配置为通过 CLI 使用下面的代码行,结果是 "LastUpdateStatus": "Successful"

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

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda firebase-admin aws-lambda-layers


    【解决方案1】:

    设法找到原因,显然它需要一个额外的文件夹层。

    要将库包含在层中,请将它们放在运行时支持的文件夹之一中。

    对于 Lambda 中使用的不同语言,您应该有一个具有不同名称的额外文件夹层。对于我的情况,我创建了 nodejs 文件夹并将 node_modules 移到其中,然后将其重新上传为第二个版本。

    xray-sdk.zip
    
    └ nodejs/node_modules/aws-xray-sdk 
    

    阅读更多:Including Library Dependencies in a Layer

    【讨论】:

    • 我也有同样的问题。我的文件夹结构完全符合要求,但我遇到了同样的问题。我也在尝试使用 firebase-admin sdk。你能告诉我我在这里缺少什么吗?节点js
    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2017-08-10
    • 2018-04-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多