【发布时间】:2015-12-09 13:44:06
【问题描述】:
尝试使用 Kinesis Producer 库添加用户记录时发生 InvalidSignatureException。
AWS_JAVA_SDK_VERSION=1.10.26
AWS_KINESIS_PRODUCER_VERSION=0.10.1
错误:
PutRecords 失败:{"__type":"InvalidSignatureException","message":"我们计算的请求签名与您提供的签名不匹配。请检查您的 AWS 秘密访问密钥和签名方法。
SCALA KINESIS 生产者代码
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)`
上面的代码不工作。但是我可以通过终端的 aws cli 和 KinesisClient 在下面指定的代码中将记录添加到 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
}
【问题讨论】:
-
您是否检查过您的 scala 代码是否正确获取了 Config 对象?一般来说,最好使用 EC2 角色,即使在配置中也不提供显式凭据。
-
你可以写你自己的请求吗,我发布了一个库来解决这个问题:github.com/ticofab/aws-request-signer。祝你好运!
-
谢谢大家。最后,将 aws-sdk 和 kinesis-library 更新到更高版本后,该问题得到解决。
标签: scala amazon-web-services aws-sdk aws-cli amazon-kinesis