Обратите внимание: хотя я упоминаю здесь AWS SAM и DynamoDB, я думаю, что это скорее AWS JavaScript SDK или, возможно, даже просто вопрос Node/NPM в глубине души, и поэтому на него, вероятно, ответит любой, у кого есть опыт написания Node/JavaScript. приложения на AWS Lambda.
Я использовал AWS SAM для инициализации репозитория JavaScript Lambda в стиле «Hello World» и использовал его для развертывания этой Lambda за шлюзом API. На самом деле это было довольно круто и очень мало работы, чтобы все правильно настроить.
Сейчас я пытаюсь изменить шаблонный код 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 не установлен. Итак, из корня репо я запускаю:
npm i @aws-sdk/lib-dynamodb
А затем снова запустите sam build... только для того, чтобы получить точно такую же ошибку.
Почему я получаю эту ошибку и что я могу сделать, чтобы исправить ее, чтобы мой вызов обработчика Lambda извлекал все необходимые компоненты клиента JavaScript AWS DynamdoDB?





Имя пакета, в котором хранится клиент, — @aws-sdk/client-dynamodb.
Установите и импортируйте оттуда.
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-dynamodb/index.html