Функция AWS Lambda с DynamoDB — put и putItem не добавляют элемент в таблицу

Я пытаюсь использовать функции Lambda для базового API базы данных, при этом вызовы должны выполняться непосредственно для каждой функции Lambda через URL-адрес ее функции.

Он отлично работает для получения элемента базы данных по его идентификатору, но когда я пытаюсь вместо этого использовать put, элемент не добавляется в таблицу.

Я пробовал несколько разных методов и примеров, но не смог заставить ни один из них работать. С некоторыми примерами из документации AWS и других руководств/потоков у меня были различные ошибки 502 и проблемы с версией узла, импортом и требованием и т. д.

С другими функция работает без ошибок, но элемент просто не добавляется в таблицу DynamoDB. Роль выполнения лямбда-функции имеет DynamoDBFullAccess (собственно, я дал ей все политики с DynamoDB в названии).

Я был бы очень признателен за решение, которое представляет собой не просто фрагмент кода, но включает информацию о настройке функции, например. для какой версии узла предназначен код и полный код, включая импорт и экспорт.

Рабочая лямбда-функция для получения предмета по id:

const AWS = require ('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient({
  region: 'us-east-1'
});
exports.handler = async (event) => {
 
 const id = +event.queryStringParameters.id
 
 const params = {
  TableName: "test",
  Key: {
     "id": id
  }
 };

 const data = await dynamoDb.get(params).promise();
 
 const response = {}
 
 if ((typeof data) === "object") {
  response.statusCode = 200;
  response.body = JSON.stringify(data);
 } else {
  response.statusCode = 500;
 }
 return response;
};

Попытка использования put. Это возвращает пустой объект с кодом состояния 200, как и ожидалось, но жестко закодированный элемент не добавляется в таблицу «тест». Ошибок в CloudWatch нет вообще.

const AWS = require ('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient({
  region: 'us-east-1'
});
exports.handler = async (event) => {
 
 const params = {
  TableName: "test",
  Item: {
     "id": 1
  }
 };

 const data = await dynamoDb.put(params).promise();
 
 const response = {}
 
 if ((typeof data) === "object") {
  response.statusCode = 200;
  response.body = JSON.stringify(data);
 } else {
  response.statusCode = 500;
 }
 return response;
};

Код выглядит разумным. Как вы определяете, что пункт не был написан? Есть вероятность, что вы просматриваете таблицу с именем test не в том регионе AWS?

jarmod 29.03.2023 21:27

Вы определенно думаете в правильном направлении! Я проверял количество предметов на столе, к счастью, я наткнулся на ресурс, в котором упоминалось, что обновление количества предметов занимает 6 часов... Пошел исследовать предметы на столе, и там есть все мои предметы! Упс... Я оставлю это на случай, если это поможет кому-то еще, кто может совершить ту же ошибку. Спасибо за Ваш ответ!

DishiestAlarm 29.03.2023 21:50

Также обратите внимание, что при вызове put, если элемент с таким же первичным ключом уже существует, этот элемент будет просто заменен. (Конечное) количество предметов не изменится. Неясно, является ли принятый ответ на самом деле ответом tbh, несмотря на то, что в целом он полезен.

jarmod 29.03.2023 22:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы всегда должны заключать асинхронные методы в блоки try/catch, чтобы выявить любые исключения.

Несмотря на это, похоже, что ваш GetItem использует строку как id, тогда как ваш PutItem использует число.

Убедитесь, что вы используете правильный тип данных, и добавьте try/catch, и ваша проблема должна быть отсортирована.

Оказывается, моя проблема была простой ошибкой пользователя, как обычно! Я проверял количество элементов в таблице, чтобы увидеть, был ли элемент опубликован, не осознавая, что для обновления количества элементов требуется 6 часов. Элементы на самом деле были размещены в конце концов!

Другие вопросы по теме