node.js - Amazon Kinesis NodeJS - putRecord 操作过期

标签 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: 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.)\n at Request.extractError (/Users/me/proxy/node_modules/aws-sdk/lib/service_interface/json.js:43:33)\n at Request.callListeners (/Users/me/proxy/node_modules/aws-sdk/lib/sequential_executor.js:114:20)\n at Request.emit (/Users/me/proxy/node_modules/aws-sdk/lib/sequential_executor.js:81:10)\n at Request.emit (/Users/me/proxy/node_modules/aws-sdk/lib/request.js:578:14)\n at Request.transition (/Users/me/proxy/node_modules/aws-sdk/lib/request.js:12:12)\n at AcceptorStateMachine.runTo (/Users/me/proxy/node_modules/aws-sdk/lib/state_machine.js:14:12)\n at /Users/me/proxy/node_modules/aws-sdk/lib/state_machine.js:26:10\n at Request. (/Users/me/proxy/node_modules/aws-sdk/lib/request.js:28:9)\n at Request. (/Users/me/proxy/node_modules/aws-sdk/lib/request.js:580:12)\n at Request.callListeners (/Users/me/proxy/node_modules/aws-sdk/lib/sequential_executor.js:90:20)'

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

最佳答案

您的 Kinesis 生产者实例(您运行 NodeJS 的实例)可能会出现时钟漂移。我们过去常常在查询各种服务(不仅仅是 Kinesis)的 AWS API 时看到这种情况。

安装和配置 ntp 以使用 NTP 池中的 AWS Node 是很常见的:

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

关于node.js - Amazon Kinesis NodeJS - putRecord 操作过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22967932/

相关文章:

javascript - 无法使用super调用继承的类函数

java.lang.IllegalStateException : Connection pool shut down exception from spring-integration-aws library

javascript - 如何删除一个div检查数据库

javascript - 异步回调nodejs

javascript - AppEngine 应用程序 header 中没有 X-AppEngine-Region?

node.js - express.js 少编译器 : can not get work

python - 如何在 python 脚本中调试 KCL(python)?

android - 使用 appium Node 服务器在模拟器上安装 Android APK

node.js - 在 Mongoose 中创建新文档时可以添加新属性吗?