AWS javascript SDK Kinesis getShardIterator Ошибка: UnexpectedParameter: в параметрах обнаружен неожиданный ключ 'Timestamp'

Я использую aws-sdk (версия 2.1.8) для получения записей из Kinesis. Это внутри лямбда-функции узла. Попытка использовать ShardIteratorType: AT_TIMESTAMP. Я указываю метку времени в объекте params

const AWS = require("aws-sdk");
const kinesis = new AWS.Kinesis({ region: 'us-east-1' });
var params = {
    ShardId: shard.ShardId, /* required */
    ShardIteratorType: 'AT_TIMESTAMP', /* required */
    StreamName: process.env.STREAM_NAME, /* required */
    Timestamp: new Date(2017, 11, 08, 14, 32, 51)
};

kinesis.getShardIterator(params, function (err, data) {
    if (err) {
        return defer.reject(err);
    }
    defer.resolve(data);
});

Но я получаю эту ошибку: Неожиданный ключ «Отметка времени» найден в параметрах. Проверял форумы google, SO и aws, но безрезультатно. Я слежу за документацией AWS: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Kinesis.html#getShardIterator-property

Вот журналы функции Lambda, где я использую getShardIterator

2017-11-08T15:53:13.551Z    ec3ef291-c49c-11e7-ad35-473206669891    SHARD 
ITERATOR TYPE:  AT_TIMESTAMP
2017-11-08T15:53:13.551Z    ec3ef291-c49c-11e7-ad35-473206669891    
TIMESTAMP:  2017-12-08T14:32:51.000Z

ShardIteratorTypes LATEST и TRIM_HORIZON работают нормально. Проблема возникает только тогда, когда я пытаюсь использовать AT_TIMESTAMP.


person Blighty    schedule 08.11.2017    source источник
comment
Можете ли вы включить код, который вызывает SDK, передавая переменную params?   -  person jarmod    schedule 08.11.2017
comment
добавлен вызов библиотеки aws kinesis и вызов getShardIterator   -  person Blighty    schedule 08.11.2017
comment
Используя последнюю версию aws-sdk (2.145.0), у меня нет проблем с передачей параметра Timestamp. Он не работает с InvalidParameterType при передаче метки времени в указанном вами формате, но предоставление следующего кажется приемлемым: Timestamp: new Date (2017, 11, 08, 14, 32, 51).   -  person jarmod    schedule 08.11.2017
comment
Интересно. Сейчас протестирую.   -  person Blighty    schedule 08.11.2017
comment
@jarmod Я тестировал с использованием вашего предложенного значения для Timestamp - все равно получаю ту же ошибку. Я обновил свой пост выводом логов. Это показывает, что у меня есть допустимые значения для ShardIteratorType и Timestamp. Все это происходит внутри лямбда-функции, если это что-то значит.   -  person Blighty    schedule 08.11.2017
comment
Странный. Это отлично работает для меня в Lambda (с использованием среды выполнения Node.js 6.10 и SDK JavaScript по умолчанию, предоставляемого Lambda). Есть ли вероятность, что вы по ошибке передаете этот объект params в другой вызов SDK (тот, который не принимает метку времени), или вы неправильно читаете журналы CloudWatch из своей функции Lambda? Можете ли вы добавить больше операторов console.log () для более подробной отладки?   -  person jarmod    schedule 08.11.2017
comment
Позвольте нам продолжить это обсуждение в чате.   -  person jarmod    schedule 08.11.2017


Ответы (1)


Я нашел, что происходит. Aws-sdk берет значение Timestamp и умножает его на 1000. Это безумие - нигде об этом не упоминается в документации, где просто говорится

Отметка времени записи данных, с которой нужно начать чтение. Используется с типом итератора сегментов AT_TIMESTAMP. Метка времени - это дата эпохи Unix с точностью до миллисекунд.

Следовательно, используя это

Отметка времени: 1510673368611

завершится ошибкой, даже если это действительная метка времени в миллисекундах. Вам нужно разделить на 1000

Отметка времени: 1510673368.611

Это было довольно неприятно. Просто проверьте значение, которое я отправляю, не изменяйте его, а затем подтвердите результат. Или, вы знаете, УМЕНИЕ, ЧТО ЭТО ПРОИСХОДИТ В ДОКУМЕНТАХ.

person Blighty    schedule 14.11.2017