簡體   English   中英

AWS Lambda 是否支持 aws-sdk v3?

[英]Does AWS Lambda support aws-sdk v3 or not?

在這里的 cdk 研討會上有一個小型 lambda function 。 I'm writing the lambda function in typescript, deploying via a pipeline which creates a cloud formation stack containing the lambda function.

我正在嘗試在 lambda 中使用 sdk v3,如此所示。 但后來我在這里看到相互沖突的文檔。

這些錯誤是因為我嘗試使用 V3 而我不應該使用,還是出於其他原因? 處理程序設置正確,function 運行但失敗並出現錯誤:

{
    "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module '@aws-sdk/client-sns'\nRequire stack:\n- /var/task/ReceiveMessageLoraThing.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module '@aws-sdk/client-sns'",
        "Require stack:",
        "- /var/task/ReceiveMessageLoraThing.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:999:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
        "    at Module.load (internal/modules/cjs/loader.js:863:32)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
        "    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)",
        "    at internal/main/run_main_module.js:17:47"
    ]
}

該文件部署為 js,並設置了正確的處理程序。 如果我注釋掉require語句,它可以正常工作:

// works
"use strict";
//const sns = require("@aws-sdk/client-sns");
exports.handler = async (event) => {
    console.log("hello");
    return true;
}

// doesn't work
"use strict";
const sns = require("@aws-sdk/client-sns");
exports.handler = async (event) => {
    console.log("hello");
    return true;
}

沒有使用這個研討會的代碼生成的 node_modules 或層,但在我 go 之前,我想知道我是否真的可以在 lambda 上使用 V3。

謝謝

是的,您可以使用 AWS SDK v3,就像任何其他 JS 庫一樣。

The Node environment for Lambda comes with installed AWS SDK v2 (the previous one), as you can see here:https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html

因此,要使用 v3,您應該將它與您的應用程序捆綁在一起,就像與任何其他依賴項一樣,並部署捆綁包 ( https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html )。

實際上,即使 Lambda 環境中提供了 SDK v2,將它與您的應用程序捆綁並部署它仍然是最佳實踐。 這樣,您將始終使用您指定的版本,而不是 Lambda 上的版本,並且可以隨時更新。 即使他們沒有進行任何不兼容的更改,新的 SDK 版本(未經您的特定應用程序測試)也總是可能存在一些會破壞您的 Lambda 的錯誤(非常不可能,但可能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM