相关疑难解决方法(0)

我可以从 Lambda 层导入打字稿类型吗?

我试图在构建 Lambda 函数时使用 TypeScript,但在使用同样用 TypeScript 编写的 Lambda 层时遇到问题。

TypeScript 无法识别我的层的 /opt/nodejs/... 导入(因为它会在 SAM 或 AWS 中运行),因此我无法将我在层中定义的类型导入到我的 Lambda 函数。

我试图查看我是否能够以某种方式 npm 链接该层,但我似乎无法使其正常工作,因为导入是本地路径 '/opt/nodejs...' 而不仅仅是模块名称。

层:

export interface SomeType {
  someField: string
}
Run Code Online (Sandbox Code Playgroud)

拉姆达:

import { SomeType } from '/opt/nodejs/myLayer' // this does not work
Run Code Online (Sandbox Code Playgroud)

我刚刚收到错误消息:Cannot find module '/opt/nodejs/myLayer'.ts(2307)我发现自己不得不用它来抑制它,// @ts-ignore can be ignored as this is a Lambda layer但这意味着我无法使用层中的 TypeScript 类型。

lambda typescript aws-lambda-layers

8
推荐指数
1
解决办法
1725
查看次数

在本地计算机上的 VSCode 中使用 NodeJS 运行带有层的 AWS Lambda

我的项目结构如下:

MyProject
  layers
    myLayer1
      nodejs
        node_modules
          myLayer1
            myExtension.js
  lambda1
    handler.js
  lambda2
    handler.js
  jsconfig.json
Run Code Online (Sandbox Code Playgroud)

myExtension.js

module.exports.myTest = () => {
  return 'My extension test';
};
Run Code Online (Sandbox Code Playgroud)

处理程序.js

const myext = require('myLayer1');
module.exports.handler = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: myext.myTest()
    })
}};
Run Code Online (Sandbox Code Playgroud)

当我部署到 AWS 时,一切正常。但我无法在本地计算机上运行/调试它。

根据我的发现,在这种情况下 jsconfig.json 文件应该有助于映射路径,但是 VSCode/NodeJS 会忽略我在那里编写的任何内容(我尝试将其放置在 MyProject 根文件夹和 lambda 文件夹中)。

如果我将 handler.js 中的“require”更改为:

const myext = require('./layers/myLayer1/nodejs/node_modules/myLayer1');
Run Code Online (Sandbox Code Playgroud)

当我将代码部署到 AWS 时,这显然会破坏代码。

node.js aws-lambda visual-studio-code

8
推荐指数
1
解决办法
1567
查看次数