使用 SAM cli 和 AWS CDK 在本地调试时未发现 AWS lambda 模块错误?

AWS lambda module not found error when debugging locally using SAM cli and AWS CDK?

我正在尝试使用 SAM cli 和 AWS CDK 在本地调试 lambda 函数。所以我收到错误功能模块未找到任何想法为什么会这样?我从 github https://github.com/mavi888/cdk-serverless-get-started

中获取了这个项目

function.js:

exports.handler = async function (event) {
  console.log("request:", JSON.stringify(event));

  // return response back to upstream caller
  return sendRes(200, "HELLLOOO");
};

const sendRes = (status, body) => {
  var response = {
    statusCode: status,
    headers: {
      "Content-Type": "text/html",
    },
    body: body,
  };
  return response;
};

lib 文件夹内

// lambda function
    const dynamoLambda = new lambda.Function(this, "DynamoLambdaHandler", {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.asset("functions"),
      handler: "function.handler",
      environment: {
        HELLO_TABLE_NAME: table.tableName,
      },
    });

我正在使用生成云形成 template.yaml 文件的 cdk synth > template.yaml 命令。现在我找到带有 logicalID 的函数名称,例如:myFunction12345678,然后尝试使用此命令 sam local invoke myFunction12345678 在本地调试它,在我的例子中它是 DynamoLambdaHandler 函数。我收到功能模块未找到错误。知道我错过了什么吗?

代码可用于 github:https://github.com/mavi888/cdk-serverless-get-started

问题是 sam 运行一个 Docker 容器,并从当前目录安装卷。因此,它没有找到 Lambda 代码,因为 CDK 创建的 CloudFormation 模板中的代码路径不包括 cdk 创建资产的 cdk.out 目录。

您有两个选择:

  1. 运行 您的 sam 命令带有定义的卷装载 sam local invoke -v cdk.out
  2. 运行 来自 cdk.out 目录的命令并将 JSON 模板作为参数传递,因为 cdk 写入了 JSON 模板:sam local invoke -t <StackNameTemplate.json>

我推荐后者,因为您是在 CDK 创建的框架内工作,而不是创建额外的文件。