请注意:虽然我在这里提到了AWS SAM和DynamoDB,但我认为这更多的是一个AWS JavaScript SDK,或者甚至可能只是一个Node/NPM问题,因此,可能是任何有在AWS Lambda上编写Node/JavaScript应用程序经验的人都能回答的。
我使用AWS SAM初始化一个"Hello World"风格的JavaScript Lambda repo,并使用它在API网关后面部署该Lambda。这实际上是非常酷的,几乎不需要做什么工作就可以正确配置所有内容。
我现在正在尝试修改样板TypeScript代码(本质上是TypeScript Lambda处理程序)来读取/写入DynamoDB表。
在Lambda处理器中,我添加了:
import { PutCommand } from "@aws-sdk/lib-dynamodb";
…并运行sam build
,其中包括调用EsBuild进行编译/检查。这行代码失败,出现以下错误:
Build Failed
Error: NodejsNpmEsbuildBuilder:EsbuildBundle - Esbuild Failed: ✘ [ERROR] Could not resolve "@aws-sdk/lib-dynamodb"
app.ts:5:27:
5 │ import { PutCommand } from "@aws-sdk/lib-dynamodb";
╵ ~~~~~~~~~~~~~~~~~~~~~~~
所以我查看我的package.json
(AWS SAM为我生成的),我看到:
{
"name": "my-lambda",
"version": "1.0.0",
"description": "experimental",
"main": "app.js",
"repository": "<redacted>",
"author": "me myself and i",
"license": "MIT",
"scripts": {
"unit": "jest",
"lint": "eslint '*.ts' --quiet --fix",
"compile": "tsc",
"test": "npm run compile && npm run unit"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.92",
"@types/jest": "^29.2.0",
"@types/node": "^18.11.4",
"@typescript-eslint/eslint-plugin": "^5.10.2",
"@typescript-eslint/parser": "^5.10.2",
"esbuild": "^0.14.14",
"esbuild-jest": "^0.5.0",
"eslint": "^8.8.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^29.2.1",
"prettier": "^2.5.1",
"ts-node": "^10.9.1",
"typescript": "^4.8.4"
}
}
所以,我认为这是有意义的,对吧?未安装aws-sdk/lib-dynamodb
包。因此,从repo的根目录,我运行:
npm i @aws-sdk/lib-dynamodb
然后重新运行sam build
…只是得到完全相同的错误。
为什么我得到这个错误,我能做些什么来修复它,使我的Lambda处理程序调用拉在AWS DynamdoDB JavaScript客户端的所有必要的组件?
保存客户端的包名为@aws-sdk/client-dynamodb
。
安装并导入。
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-dynamodb/index.html