AWS node.js SDK错误 - SignatureDoesNotMatch:签名已过期

时间:2014-11-04 13:44:54

标签: node.js amazon-web-services aws-sdk

Node.js版本0.10.25

AWS开发工具包版本latest - 2.0.23

我有一个持续监听队列(SQS)的应用程序,如果该队列中有消息,应用程序将读取消息并处理它并将一些数据保存到S3。当我在大约20分钟后启动应用程序时,我会不断收到以下错误。

Potentially unhandled rejection [160] SignatureDoesNotMatch: Signature expired: 20141104T062952Z is now earlier than 20141104T062952Z (20141104T064452Z - 15 min.)
at Request.extractError (/myproject/node_modules/aws-sdk/lib/protocol/query.js:39:29)
at Request.callListeners (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:100:18)
at Request.emit (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/myproject/node_modules/aws-sdk/lib/request.js:604:14)
at Request.transition (/myproject/node_modules/aws-sdk/lib/request.js:21:12)
at AcceptorStateMachine.runTo (/myproject/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /myproject/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/myproject/node_modules/aws-sdk/lib/request.js:22:9)
at Request.<anonymous> (/myproject/node_modules/aws-sdk/lib/request.js:606:12)
at Request.callListeners (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:104:18)

这不是我的系统时间问题。我的系统时间与EC2实例的时间同步。为什么我收到此错误?它与SQS或S3有关吗?

3 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但我今天亲自体验过。

幸运的是,AWS NodeJS SDK现在有一个名为peekRecord的配置选项,它将在发生错误时修复系统时钟偏移:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#correctClockSkew-property

答案 1 :(得分:0)

可能是你电脑时间不对

签名不匹配是因为认证过程依赖于时钟同步。

检查机器上的时间。

在 Linux / WSL 上,您可以运行 sudo hwclock -s 来修复。其他操作系统将需要不同的命令。

答案 2 :(得分:-1)

感谢Loren Segal(亚马逊)的快速反应。有关详细信息,请参阅https://github.com/aws/aws-sdk-js/issues/401。简而言之,SDK不会重试签名错误,其中的解决方法是

AWS.events.on('retry', function(resp) {
  if (resp.error.code === 'SignatureDoesNotMatch') {
    resp.error.retryable = true;
  }
});

这不是一个回归,即它不是2.0.23

中引入的错误