Amazon Kinesis NodeJS - putRecord操作过期

时间:2014-04-09 15:58:59

标签: node.js express amazon-kinesis

我使用NodeJS和Express作为代理来处理HTTP GET请求,对数据进行一些小的调整,并将数据提交给Amazone 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个并发用户运行JMeter测试(循环100次)后,5分钟后,我收到此错误:

  

{[InvalidSignatureException:签名已过期:20140409T152855Z现在早于20140409T153211Z(20140409T153711Z - 5分钟)]     消息:'签名已过期:20140409T152855Z现在早于20140409T153211Z(20140409T153711Z - 5分钟)',     代码:' InvalidSignatureException',     时间:2014年4月9日星期三17:37:11 GMT + 0200(CEST),     statusCode:400,     可重试:false,     _willRetry:false}' InvalidSignatureException:签名已过期:20140409T152855Z现在早于20140409T153211Z(20140409T153711Z - 5分钟)\ n在Request.extractError(/ Users / me / proxy / node_modules / aws-sdk / lib / service_interface / json.js:43:33)\ n在Request.emit上的Request.callListeners(/Users/me/proxy/node_modules/aws-sdk/lib/sequential_executor.js:114:20)n。(/ Users / me / request / node(/Users/me/proxy/node_modules/aws-sdk/lib/request.js:578:14)在Request.transition(/Users/me/proxy/node_modules/aws-sdk/lib/request.js:12:12)nn在AcceptorStateMachine.runTo(/ Users / me / proxy / node_modules / aws-sdk / lib / state_machine.js:14:12)\ n在/Users/me/proxy/node_modules/aws-sdk/lib/state_machine.js:26:10,n请求。 (/Users/me/proxy/node_modules/aws-sdk/lib/request.js:28:9)\n请求。 (/Users/me/proxy/node_modules/aws-sdk/lib/request.js:580:12)\n在Request.callListeners(/Users/me/proxy/node_modules/aws-sdk/lib/sequential_executor.js: 90:20)'

我能做些什么(配置或代码更改)以确保发送和保存所有Kinesis记录?

1 个答案:

答案 0 :(得分:1)

您的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

如果您有兴趣,可以使用以下链接获取更多文档:

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