【问题标题】:Running AWS Lambda with layers using NodeJS in VSCode on local machine在本地机器上的 VSCode 中使用 NodeJS 运行带有层的 AWS Lambda
【发布时间】:2020-10-20 01:31:18
【问题描述】:

我的项目结构如下:

MyProject
  layers
    myLayer1
      nodejs
        node_modules
          myLayer1
            myExtension.js
  lambda1
    handler.js
  lambda2
    handler.js
  jsconfig.json

myExtension.js

module.exports.myTest = () => {
  return 'My extension test';
};

handler.js

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

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

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

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

const myext = require('./layers/myLayer1/nodejs/node_modules/myLayer1');

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

【问题讨论】:

    标签: node.js visual-studio-code aws-lambda


    【解决方案1】:

    概述

    这类似于另一个正在寻找如何从多层引用模块的问题:How configure Visual Studio Code to resolve input paths for AWS Lambda Layers (javascript)

    对于node_modules 具有单层的 lambda 函数,更简单的答案是在没有依赖关系的 lambda 的 package.json 文件所在的目录中使用 jsconfig.json 文件(这不是整个项目,但仅限 lambda 函数项目的根)。

    问题的示例项目确实尝试使用jsconfig.json 文件,但它应该位于lambda1lambda2 目录中,而问题的此文件位于顶层,它没有想要的效果。

    用于 VS 代码的示例 jsconfig.json 文件

    对于问题中的示例项目,该文件应放置在以下两个位置:

    • MyProject/lambda1/jsconfig.json
    • MyProject/lambda2/jsconfig.json
    // https://code.visualstudio.com/docs/languages/jsconfig
    {
      "compilerOptions": {
        // baseUrl is the path used for pathless / naked node module includes
        "baseUrl": "../layer/node_modules/",
        "moduleResolution": "node",
        "module": "commonJS"
      }
    }
    

    完整的示例代码/项目结构

    https://github.com/pwrdrvr/layers-js-demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2019-09-05
      • 2021-04-02
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多