【发布时间】:2017-02-24 22:17:06
【问题描述】:
我正在尝试使用 DynamoDB 流和 AWS 提供的 Java DynamoDB 流 Kinesis 适配器来捕获 DynamoDB 表更改。我正在使用 Scala 应用程序中的 AWS Java 开发工具包。
我首先关注 AWS guide,然后浏览 AWS 发布的 code example。但是,我在让亚马逊自己发布的代码在我的环境中工作时遇到问题。我的问题在于 KinesisClientLibConfiguration 对象。
在示例代码中,KinesisClientLibConfiguration 配置了 DynamoDB 提供的流 ARN。
new KinesisClientLibConfiguration("streams-adapter-demo",
streamArn,
streamsCredentials,
"streams-demo-worker")
我在我的 Scala 应用程序中遵循了类似的模式,首先从我的 Dynamo 表中找到当前 ARN:
lazy val streamArn = dynamoClient.describeTable(config.tableName)
.getTable.getLatestStreamArn
然后使用提供的 ARN 创建KinesisClientLibConfiguration:
lazy val kinesisConfig :KinesisClientLibConfiguration =
new KinesisClientLibConfiguration(
"testProcess",
streamArn,
defaultProviderChain,
"testWorker"
).withMaxRecords(1000)
.withRegionName("eu-west-1")
.withMetricsLevel(MetricsLevel.NONE)
.withIdleTimeBetweenReadsInMillis(500)
.withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON)
我已经验证了提供的流 ARN,并且所有内容都与我在 AWS 控制台中看到的相符。
在运行时我最终得到一个异常,指出提供的 ARN 不是有效的流名称:
com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShardSyncTask call
SEVERE: Caught exception while sync'ing Kinesis shards and leases
com.amazonaws.services.kinesis.model.AmazonKinesisException: 1 validation
error detected: Value 'arn:aws:dynamodb:eu-west-1:STREAM ARN' at
'streamName' failed to satisfy constraint: Member must satisfy regular
expression pattern: [a-zA-Z0-9_.-]+ (Service: AmazonKinesis; Status Code:
400; Error Code: ValidationException; Request ID: )
查看KinesisClientLibConfiguration 上提供的文档确实有道理,因为第二个参数被列为 streamName 而没有提及 ARN。
我似乎在KinesisClientLibConfiguration 上找不到与 ARN 相关的任何内容。由于我使用的是 DynamoDB 流而不是 Kinesis 流,因此我也不确定如何找到我的流名称。
此时我不确定我在已发布的 AWS 示例中遗漏了什么,似乎他们可能使用的是更旧版本的 KCL。我正在使用 1.7.0 版的 amazon-kinesis-client。
【问题讨论】:
标签: java scala amazon-web-services amazon-dynamodb amazon-kinesis