Aws lambda 问题:尝试添加层但失败
我制作了一个集成了一层的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
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],
});
这应该可以解决问题。代码在我看来还行。你看到了什么错误?我已经用我得到的错误更新了这个问题。代码看起来不错。你看到了什么错误?我已经用我得到的错误更新了问题