亚马逊 Kinesis NodeJS - putRecord 操作过期

5

我正在使用NodeJS和Express作为代理来处理HTTP GET请求,对数据进行一些小的适配,并将数据提交到Amazon Kinesis。这是从我的代码中提取的:

var express = require('express');
var app = express();


app.get('/proxy-test', function(req, res){
    var data = req.query;

    // perform some light data processing

    // send results to kinesis
    kinesis.putRecord({
        StreamName : MY_STREAM_NAME,
        Data : data,
        PartitionKey : MY_PARTITION_KEY
    }, function(err, data) {
        if (err) {
            console.log(err, err.stack); // an error occurred
        } else {
            console.log(data);
        }
    });

    res.send(200);
});

在200个并发用户(循环100次)运行JMeter测试5分钟后,我收到了以下错误消息:{ [InvalidSignatureException: Signature expired: 20140409T152855Z is now earlier than 20140409T153211Z (20140409T153711Z - 5 min.)] message: 'Signature expired: 20140409T152855Z is now earlier than 20140409T153211Z (20140409T153711Z - 5 min.)', code: 'InvalidSignatureException', time: Wed Apr 09 2014 17:37:11 GMT+0200 (CEST), statusCode: 400, retryable: false, _willRetry: false } 'InvalidSignatureException: Signature expired: 20140409T152855Z is now earlier than 20140409T153211Z (20140409T153711Z - 5 min.),提示签名已过期。请问是否可以进行配置或代码更改以确保发送并保存所有Kinesis记录?
1个回答

2

您可能正在Kinesis生产者实例(您在其上运行NodeJS的实例)上遇到时钟漂移问题。当查询各种服务(不仅限于Kinesis)的AWS API时,我们经常看到这种情况。

通常会安装和配置ntp以使用NTP池中的AWS节点,这是非常常见的:

sudo apt-get -qy install ntp
sudo sed -i -r 's/^(server\s[0-3]\.)ubuntu([a-z\.]+)/\1amazon\2 iburst/' /etc/ntp.conf
sudo sed -i -r 's/^(server\sntp\.ubuntu\.com)/#\1\nserver time.nist.gov/' /etc/ntp.conf
sudo service ntp restart

如果您感兴趣,这里有更多关于IT技术的文档:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html


由于我不再参与这个项目,我无法确认或否认时钟漂移是否是问题。 但是,我已经在VertX和Tomcat(AWS Java SDK)上进行了测试,在这两种情况下,超时从未发生。 最终,我在生产者实例上使用了Tomcat。 - Igor
当我遇到 'InvalidSignatureException: Signature expired: 时,这个方法对我有效。 - jmcgrath207

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接