2014-11-04 33 views
3

的Node.js版本0.10.25AWS的Node.js SDK錯誤 - SignatureDoesNotMatch:簽名過期

AWS SDK版本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有關?

+1

我在最新的node.js最近注意到一些怪事sdk,在我的環境之前開始查看實例配置文件角色的憑證鏈提供了證書並且給我提供了類似的錯誤。你有沒有嘗試降級你的軟件包,說'2.0.10',只是爲了看看它是否是最近的錯誤? – mattr 2014-11-04 15:27:25

+0

@mattyice - 我還沒有嘗試過。這樣做後會讓你知道:) – Srivathsa 2014-11-04 17:16:54

回答

-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

3

我知道這是一個老問題引入一個bug,但我今天親身體驗過它。

幸運的是,與AWS SDK的NodeJS現在有一個叫correctClockSkew此配置選項,這將修復系統時鐘偏移一旦出現錯誤:

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

+1

這是正確的答案。亞馬遜應該考慮將默認設置爲true。在瀏覽器中使用AWS Javascript SDK現在更常見,瀏覽器時間也不可靠。 – 2016-03-16 08:43:39

相關問題