joh*_*mac 3 node.js node-modules aws-lambda aws-cdk
我正在使用 CDK 通过 API Gateway、Lambda 和 DynamoDB 创建一个简单的无服务器项目。到目前为止看起来很酷,但是当我向 Lambda 添加外部依赖项时出现以下错误:
"Runtime.ImportModuleError: Error: Cannot find module './uuid-random'",
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我并不是在问这个错误的问题是什么,因为这是有详细记录的。我正在寻求帮助,因为到目前为止我尝试压缩依赖项失败了。
我已经做了研究,而且我并不是唯一遇到这种情况的人。然而,我有点困惑该走哪条路。我需要捆绑我的依赖项,但到目前为止,所有示例对于我正在做的事情来说都相当复杂,并且没有一个示例适合。我还看到了使用的建议fromAsset,但这也不起作用(cdk部署刚刚挂起)。因此,我非常感谢任何帮助解决这个看似简单的问题的帮助。TIA。
项目结构:
bin/
cdkProject.js
handlers/
api.js
lib/
cdkProject-stack.js
node_modules/
test/
.gitignore
cdk.json
package.json
tsconfig.json
Run Code Online (Sandbox Code Playgroud)
Lambda (api.js)
const AWS = require("aws-sdk");
const db = new AWS.DynamoDB;
const TABLE_NAME = process.env.TABLE_NAME || "";
const PRIMARY_KEY = process.env.PRIMARY_KEY || "";
const uuid = require('./uuid-random');
async function postProduct(event) {
const params = {
TableName: TABLE_NAME,
Item: {
"id": {
S: uuid()
},
"name": {
S: "Test Product 1"
},
"price": {
N: "1.55"
},
"tags": {
SS: [ "tag1","tag2" ]
}
}
};
try {
const response = await db
.putItem(params)
.promise()
.then(res => res)
.catch(err => err);
console.log(JSON.stringify(response, undefined, 2));
return JSON.stringify(response, undefined, 2)
} catch (err) {
console.log(JSON.stringify(err, undefined, 2));
}
}
module.exports = {
postProduct
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,每个 lambda 都需要自己的 package.json,其中包含自己的依赖项。
cdk 代码会将其引用到 lambda 文件夹,如下所示
const fn = new lambda.Function(this, "MyFunction", {
runtime: lambda.Runtime.NODEJS_12_X,
handler: "index.handler",
code: lambda.Code.fromAsset(path.join("./handlers/test-uuid/")),
});
Run Code Online (Sandbox Code Playgroud)
使用aws-cdk-lib/aws-lambda-nodejs(以前的@aws-cdk/aws-lambda-nodejsCDK v1 - 现在已弃用)构造,它将使用 esbuild 捆绑您的 lambda 代码和所有依赖项。
默认情况下,构建将使用 esbuild 的 Docker 版本。但是,如果您明确地将 esbuild 添加到项目 deps 中,那么它将使用本地版本,并且您将\xe2\x80\x99 不需要 Docker。
\n| 归档时间: |
|
| 查看次数: |
8181 次 |
| 最近记录: |