2015-12-09 74 views
2

嘗試使用Kinesis Producer庫添加用戶記錄時發生InvalidSignatureException。 AWS_JAVA_SDK_VERSION = 26年1月10日
AWS_KINESIS_PRODUCER_VERSION = 0.10.1

ERRORAWS:添加記錄時出現InvalidSignature異常

PutRecords失敗:{ 「__type」: 「InvalidSignatureException」, 「消息」:「我們計算出的請求籤名不匹配您提供的簽名。請檢查您的AWS訪問密鑰和簽名方法。

SCALA KINESIS生產者CODE

private val configuration: KinesisProducerConfiguration = new KinesisProducerConfiguration 
    val credentialsProvider: AWSCredentialsProvider = AwsUtil.getAwsCredentials(config.awsAccessKey, config.awsSecretKey) 
    configuration.setCredentialsProvider(credentialsProvider) 
    configuration.setRecordMaxBufferedTime(config.timeLimit) 
    configuration.setAggregationMaxCount(1) 
    configuration.setRegion(config.streamRegion) 
    configuration.setMetricsLevel("none") 
    private val kinesisProducer = new KinesisProducer(configuration) 
    kinesisProducer.addUserRecord(streamName, key, eventBytes)` 

上述代碼無效。但是我可以通過終端和KinesisClient的aws cli在下面指定的代碼中將記錄添加到kinesis流中。

private def createKinesisClient = { 
    val accessKey = config.awsAccessKey 
    val secretKey = config.awsSecretKey 
    val credentialsProvider: AWSCredentialsProvider = AwsUtil.getAwsCredentials(accessKey, secretKey) 
    val client = new AmazonKinesisClient(credentialsProvider) 

    client.setEndpoint(config.streamEndpoint) 
    client 
    } 
+0

難道你檢查你的Scala代碼是否獲得Config對象?一般來說,使用EC2角色更好,即使在配置中也不提供顯式憑據。 – Guy

+0

如果你打算寫你自己的請求,我發佈了一個圖書館來解決這個問題:https://github.com/ticofab/aws-request-signer。祝你好運! – ticofab

+0

謝謝你們。最後,一旦將aws-sdk和kinesis-library更新到更高版本,問題就會得到解決。 – Ninja

回答

0

發生這種情況是因爲您的VM/PC /服務器時鐘可能偏斜。

如果您正在運行Ubuntu,請嘗試更新你的系統時間:

sudo ntpdate ntp.ubuntu.com

如果您在Mac上使用docker-machine,你可以用這個命令解決:

docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'

相關問題