繁体   English   中英

Typescript 模块在通过 cdk 部署时未在 lambda function 中导入

[英]Typescript modules are not been imported in lambda function while its deploying through cdk

我使用 CDK 在 AWS 中开发我的无服务器应用程序。 When I try to deploy a lambda function post after TS file compilation, its not importing TS modules in lambda function as JS modules.

因此,当我调用 lambda 时,我遇到了未找到模块的错误。

我在部署堆栈之前遵循的步骤:

  1. tsc -> 编译 TS 文件
  2. cdk合成器
  3. cdk 部署

ts配置:

{
  "compilerOptions": {
    "target": "ES2018",
    "module": "commonjs",
    "lib": [
      "es2018"
    ],
    "noEmit": false,
    "declaration": false,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": false,
    "inlineSourceMap": true,
    "inlineSources": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": false,
    "typeRoots": [
      "./node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules",
    "cdk.out"
  ]
}

代码:

import { APIGatewayProxyEventV2, APIGatewayProxyResultV2 } from 'aws-lambda';
import { DynamoDBClient, GetItemCommand, GetItemCommandInput } from "@aws-sdk/client-dynamodb";
import { marshall, unmarshall } from "@aws-sdk/util-dynamodb";

export async function handler(event: APIGatewayProxyEventV2,): Promise<APIGatewayProxyResultV2> {
console.log('event', event);

let userLat = event.pathParameters?.lat;
let userLng = event.pathParameters?.lng;    
let tableName = process.env.TABLE_NAME;
let results;

const dbClient: DynamoDBClient = new DynamoDBClient({ region: "ap-south-1" });
let params: GetItemCommandInput;

if (tableName) {
     params = {
        TableName: tableName,
        Key: marshall({
          "lat": userLat, 
          "lng": userLng
        }),
      };
}

const run = async function () {
    try {
        const resp = await dbClient.send(new GetItemCommand(params));
        results = unmarshall(resp.Item || {});
    } catch(err) {
        results = err;
    }
};

run();

return {
    body: JSON.stringify(
        results
    ),
    statusCode: 200
};     }

细节:

  • 节点:v14.20.0
  • NPM:6.14.17
  • CDK:2.40.0(构建 56ba2ab)
  • Ts:版本 4.8.2

错误:

{ "errorType": "Runtime.ImportModuleError", "errorMessage": "错误:找不到模块 '@aws-sdk/client-dynamodb'\n需要堆栈:\n- /var/task/fetchpartner.js\n- / var/runtime/UserFunction.js\n- /var/runtime/Runtime.js\n- /var/runtime/index.js", "trace": [ "Runtime.ImportModuleError: Error: 找不到模块'@aws- sdk/client-dynamodb'", "需要堆栈:", "- /var/task/fetchpartner.js", "- /var/runtime/UserFunction.js", "- /var/runtime/Runtime.js", “- /var/runtime/index.js”、“在 _loadUserApp (/var/runtime/UserFunction.js:221:13)”、“在 Object.module.exports.load (/var/runtime/UserFunction.js: 279:17)”, “在 Object. (/var/runtime/index.js:43:34)”, “在 Module._compile (internal/modules/cjs/loader.js:1085:14)”, “在Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)", "在 Module.load (internal/modules/cjs/loader.js:950:32)", "在 Z86408593C34AF77FDD16Z0DF932F8B52 .Module._load(内部 /modules/cjs/loader.js:790:12)", "在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)", "在 internal/main/run_main_module.js:17 :47"]}

您可以在包含 lambda 代码的目录中运行npm init并在那里安装您想要的模块。 另一种方法是使用 webpack 之类的东西来编译并将您的代码和模块组合到一个文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM