AWS Lambda не выполняет команды DynamoDB: getItem или batchGetItem

Я пытаюсь заставить функцию DynamoDB batchGetItem () возвращать значения из моей таблицы. Однако при вызове он не выполняет код. Я проверил это, добавив ведение журнала в различные разделы кода. Я вырвал мясо, но это исполняемый код (storageEvents.js):

'use strict';
var AWS = require("aws-sdk");

var storageEvents = (function () {
    var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10', region: 'us-east-1'});
    var s3 = new AWS.S3({apiVersion: '2012-08-10', region: 'us-east-1'});

    var myBucket = 'my.events';
    var myObject = 'events.txt';

    return {
        loadEvents: function (session, callback) {
            console.info('loadEvents');
            dynamodb.batchGetItem({
                RequestItems: {
                  'EventsData': {
                    Keys: [
                      {'country': {S: 'USA'}}
                    ],
                  }
                }
            }, function (err, data) {
                console.info('batchGetItem');
                var currentEventsList = "test";
                callback(currentEventsList);
            });
        },
        loadEvent: function(session, callback) {
            console.info('loadEvent');
            dynamodb.getItem({
                TableName: 'EventsData',
                Key: { event_name: { S: 'Fun Event' } }
            }, function (err, data) {
                console.info('getItem');
                var currentEventsList = "test";
                callback(currentEventsList);
            });
        },
        loadS3events: function(session, callback) {
            console.info('loadS3events');
            s3.getObject({
                Bucket: myBucket,
                Key: myObject
            }, function(err, data) {
                console.info('getObject');
                var currentEventsList = "test";
                callback(currentEventsList);
            });
        }
    };
})();
module.exports = storageEvents;

Вот как он вызывается из index.js:

var storageEvents = require('./storageEvents');

storageEvents.loadEvents(session, function (currentEventsList) {
    console.info("getEventsFromDynamoDb currentEventsList: " + currentEventsList);
    eventList = currentEventsList;
});

Остальные функции вызываются аналогично. Когда это выполняется, я вижу в журналах CloudWatch «loadEvents», но никогда не вижу «batchGetItem». Ни одна из моих попыток выполнить эту работу для DynamoDB или S3 не увенчалась успехом, поэтому я должен делать что-то не так. Я знаю, что мои разрешения верны, по крайней мере, для DynamoDB, потому что отдельное выполнение функции загрузки для пользовательской информации в другой таблице работает нормально. Я смоделировал это после этого, но, поскольку я обращаюсь к ним по-другому, я не уверен, что делаю не так.

Поведение ключевого слова "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
0
425
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот результат скрипта,

ReferenceError: session is not defined
    at Object.<anonymous> (/home/ec2-user/testing/test/index.js:3:26)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:134:18)
    at node.js:962:3

Как только сеанс определен, вот результат.

loadEvents
batchGetItem
getEventsFromDynamoDb currentEventsList: test

Все работает как положено.

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

japkin 30.05.2018 17:22

Я также только что подтвердил, что session.sessionId одинаков на каждом шаге, включая loadEvents, поэтому он определенно не пропускает сеанс.

japkin 30.05.2018 18:56

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

Kannaiyan 30.05.2018 18:58

Это выполняется в навыке Alexa в AWS Lambda. Я не просто запускаю это из командной строки.

japkin 30.05.2018 19:12
Ответ принят как подходящий

Я разобрался в проблеме. Я вызывал storageEvents.loadEvents () внутри функции, и я вызывал эту функцию из функции handleFirstEvent (). Поскольку это не выполнялось с помощью обратного вызова, функция завершалась до получения данных. В моей функции loadUser () это работало, потому что я использовал обратный вызов из функции основного обработчика. Теперь я понимаю, что обратные вызовы должны быть сложены, чтобы можно было использовать данные.

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