Aws lambda 问题:尝试添加层但失败

Aws lambda 问题:尝试添加层但失败,aws-lambda,aws-cdk,Aws Lambda,Aws Cdk,我制作了一个集成了一层的lambda,如下所示: const layer = new lambda.LayerVersion(this, 'session-store-layer', { code: lambda.Code.fromAsset('src/resources'), compatibleRuntimes: [lambda.Runtime.NODEJS_12_X], }); layer.addPermission('remote-acco

我制作了一个集成了一层的lambda,如下所示:

    const layer = new lambda.LayerVersion(this, 'session-store-layer', {
      code: lambda.Code.fromAsset('src/resources'),
      compatibleRuntimes: [lambda.Runtime.NODEJS_12_X],
    });
    layer.addPermission('remote-account-grant', { accountId: '648594647853' });

    const createSessionFunction = new lambda.Function(
      this,
      'CreateSessionHandler',
      {
        runtime: lambda.Runtime.NODEJS_12_X,
        code: lambda.Code.fromAsset('src/functions/createSession'),
        handler: 'index.handler',
        layers: [layer],
        environment: {
          SESSION_STORE_TABLE_NAME: table.tableName,
        },
      }
    );

文件夹
src/resources
包含包
uuid
utils
文件夹中的一个小函数,我试图在lambda CreateSessionHandler上使用包
uuid
,但它不起作用。。。我遗漏了一些东西,但我不知道它是什么我想这是因为你没有一个
package.json
uuid
的依赖关系定义在
src/functions
文件夹中,而是在
src/resources
文件夹中。通常,您将
package.json
文件与
index.js
文件放在同一文件夹中,因此在这种情况下,您的函数
createSession、deleteSession等
找不到
uuid
模块


我认为,如果您为
src/functions
中的那些函数提供
package.json
,或者修改
require
调用,使其上升到
resources
文件夹中的
package.json
,如-
const-uuid=require(“../../resources/uuid”)中所需的任何级别,都会起作用

我认为这是因为您没有一个
包.json
,它在
src/functions
文件夹中定义了对
uuid
的依赖关系,而是在
src/resources
文件夹中。通常,您将
package.json
文件与
index.js
文件放在同一文件夹中,因此在这种情况下,您的函数
createSession、deleteSession等
找不到
uuid
模块

我认为,如果您为
src/functions
中的那些函数提供
package.json
,或者修改
require
调用,使其上升到
resources
文件夹中的
package.json
,如-
const-uuid=require(“../../resources/uuid”)中所需的任何级别,都会起作用

根据您的问题选择答案

来自AWS文件:

NodeJS层需要特定的文件结构。基本上,您需要在一个
nodejs
目录中运行
npm init
,这样您就可以得到另一个
node\u modules
目录,如下所示:

.
├─ src
│    └─ stack.ts  
│    └─ resources           
│         └─ nodejs                   
│              └─ node_modules
|              └─ package.json
│    
然后将路径传递到
LayerVersion
选项:

const layer = new lambda.LayerVersion(this, 'session-store-layer', {
  code: lambda.Code.fromAsset('src/resources'),
  compatibleRuntimes: [lambda.Runtime.NODEJS_12_X],
});
这应该可以解决问题。

根据您的问题选择答案

来自AWS文件:

NodeJS层需要特定的文件结构。基本上,您需要在一个
nodejs
目录中运行
npm init
,这样您就可以得到另一个
node\u modules
目录,如下所示:

.
├─ src
│    └─ stack.ts  
│    └─ resources           
│         └─ nodejs                   
│              └─ node_modules
|              └─ package.json
│    
然后将路径传递到
LayerVersion
选项:

const layer = new lambda.LayerVersion(this, 'session-store-layer', {
  code: lambda.Code.fromAsset('src/resources'),
  compatibleRuntimes: [lambda.Runtime.NODEJS_12_X],
});

这应该可以解决问题。

代码在我看来还行。你看到了什么错误?我已经用我得到的错误更新了这个问题。代码看起来不错。你看到了什么错误?我已经用我得到的错误更新了问题