AWS javascript SDK Kinesis getShardIterator Error: UnexpectedParameter: Kunci 'Timestamp' yang tidak terduga ditemukan di params

Saya menggunakan aws-sdk(versi 2.1.8) untuk mengeluarkan catatan dari Kinesis. Ini ada dalam fungsi simpul Lambda. Mencoba menggunakan ShardIteratorType: AT_TIMESTAMP. Saya menyediakan Stempel Waktu di objek 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);
});

Namun saya mendapatkan kesalahan ini: Kunci tak terduga 'Stempel Waktu' ditemukan di params. Memeriksa forum google, SO, dan aws, tidak berhasil. Saya mengikuti dokumentasi dari AWS: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Kinesis.html#getShardIterator-property

Berikut adalah log dari fungsi Lambda tempat saya menggunakan 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 TERBARU dan TRIM_HORIZON berfungsi dengan baik. Hanya ketika saya mencoba menggunakan AT_TIMESTAMP masalah terjadi.


person Blighty    schedule 08.11.2017    source sumber
comment
Bisakah Anda memasukkan kode yang memanggil SDK, meneruskan variabel params?   -  person jarmod    schedule 08.11.2017
comment
menambahkan init & panggilan perpustakaan aws kinesis ke getShardIterator   -  person Blighty    schedule 08.11.2017
comment
Menggunakan versi aws-sdk terbaru (2.145.0), saya tidak mengalami masalah dalam meneruskan parameter Timestamp. Itu gagal dengan InvalidParameterType ketika meneruskan stempel waktu dalam format yang Anda tentukan tetapi memberikan yang berikut ini tampaknya dapat diterima: Stempel waktu: Tanggal baru (2017, 11, 08, 14, 32, 51).   -  person jarmod    schedule 08.11.2017
comment
Menarik. Saya akan mengujinya sekarang.   -  person Blighty    schedule 08.11.2017
comment
@jarmod Saya menguji menggunakan nilai yang Anda sarankan untuk Stempel Waktu - masih mendapatkan kesalahan yang sama. Saya telah memperbarui posting saya dengan keluaran log. Ini menunjukkan bahwa saya memiliki nilai yang valid untuk ShardIteratorType dan Timestamp. Ini semua terjadi di dalam fungsi Lambda, jika itu berarti.   -  person Blighty    schedule 08.11.2017
comment
Aneh. Ini berfungsi dengan baik bagi saya di Lambda (menggunakan runtime Node.js 6.10 dan SDK JavaScript default yang disediakan oleh Lambda). Apakah ada kemungkinan Anda salah meneruskan objek params tersebut ke panggilan SDK yang berbeda (yang tidak menerima Stempel Waktu) atau Anda salah membaca CloudWatch Logs dari fungsi Lambda Anda? Bisakah Anda menambahkan lebih banyak pernyataan console.log() untuk men-debugnya lebih detail?   -  person jarmod    schedule 08.11.2017
comment
Mari kita melanjutkan diskusi ini dalam chat.   -  person jarmod    schedule 08.11.2017


Jawaban (1)


Saya menemukan apa yang sedang terjadi. Aws-sdk mengambil nilai Stempel Waktu dan mengalikannya dengan 1000. Ini gila - hal ini tidak disebutkan di dokumen, yang hanya menyatakan

Stempel waktu rekaman data untuk mulai membaca. Digunakan dengan tipe iterator shard AT_TIMESTAMP. Stempel waktu adalah tanggal zaman Unix dengan presisi dalam milidetik

Oleh karena itu, gunakan ini

Stempel waktu: 1510673368611

akan gagal, meskipun stempel waktu tersebut valid dalam milidetik. Anda harus membaginya dengan 1000

Stempel waktu: 1510673368.611

Hal ini cukup menjengkelkan untuk diketahui. Validasi saja nilai yang saya kirimkan, jangan diubah lalu validasi hasilnya. Atau, Anda tahu, SEBUTKAN BAHWA INI TERJADI DI DOCS.

person Blighty    schedule 14.11.2017