AWS javascript SDK Kinesis getShardIterator ข้อผิดพลาด: พารามิเตอร์ที่ไม่คาดคิด: พบคีย์ 'การประทับเวลา' ที่ไม่คาดคิดในพารามิเตอร์

ฉันใช้ aws-sdk (เวอร์ชัน 2.1.8) เพื่อดึงบันทึกออกจาก Kinesis สิ่งนี้อยู่ภายในฟังก์ชันโหนด Lambda กำลังพยายามใช้ 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 init และเรียกใช้ 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 ฉันทดสอบโดยใช้ค่าที่คุณแนะนำสำหรับการประทับเวลา - ยังคงได้รับข้อผิดพลาดเดียวกัน ฉันได้อัปเดตโพสต์ของฉันด้วยเอาต์พุตบันทึก มันแสดงว่าฉันมีค่าที่ถูกต้องสำหรับ ShardIteratorType และ Timestamp ทั้งหมดนี้เกิดขึ้นภายในฟังก์ชัน Lambda หากนั่นมีความหมายอะไรก็ตาม   -  person Blighty    schedule 08.11.2017
comment
แปลก. สิ่งนี้ใช้ได้ดีสำหรับฉันใน Lambda (โดยใช้รันไทม์ Node.js 6.10 และ JavaScript SDK เริ่มต้นที่ Lambda จัดหาให้) มีโอกาสใดบ้างที่คุณส่งอ็อบเจ็กต์พารามิเตอร์นั้นไปยังการเรียก SDK อื่นโดยไม่ตั้งใจ (อันที่ไม่ยอมรับการประทับเวลา) หรือคุณอ่าน CloudWatch Logs จากฟังก์ชัน Lambda ของคุณผิด คุณสามารถเพิ่มคำสั่ง console.log() เพิ่มเติมเพื่อแก้ไขจุดบกพร่องในรายละเอียดเพิ่มเติมได้หรือไม่   -  person jarmod    schedule 08.11.2017
comment
ให้เราสนทนาต่อในการแชท   -  person jarmod    schedule 08.11.2017


คำตอบ (1)


ฉันพบสิ่งที่เกิดขึ้น aws-sdk กำลังรับค่า Timestamp และคูณด้วย 1,000 นี่มันบ้าไปแล้ว - ไม่มีที่ไหนเลยที่กล่าวถึงสิ่งนี้ในเอกสารที่มันระบุเพียงว่า

การประทับเวลาของบันทึกข้อมูลที่จะเริ่มอ่าน ใช้กับตัววนซ้ำประเภท AT_TIMESTAMP การประทับเวลาคือวันที่ยุค Unix ที่มีความแม่นยำในหน่วยมิลลิวินาที

ดังนั้นการใช้สิ่งนี้

การประทับเวลา: 1510673368611

จะล้มเหลวแม้ว่าจะเป็นการประทับเวลาที่ถูกต้องในหน่วยมิลลิวินาทีก็ตาม คุณต้องหารด้วย 1,000

ประทับเวลา: 1510673368.611

นี่เป็นเรื่องน่าโมโหมากที่ได้ค้นพบ เพียงตรวจสอบความถูกต้องของค่าที่ฉันส่ง อย่าเปลี่ยนแปลงและตรวจสอบผลลัพธ์ หรือคุณรู้ไหมว่าสิ่งนี้เกิดขึ้นในเอกสาร

person Blighty    schedule 14.11.2017