我使用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记录?
答案 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