I can't seem to get stream support working in dynamo db local, are they supported? The only indication I could find that they are, is the very last bullet point in the developer guide regarding local differences:
If you're using DynamoDB Streams, the rate at which shards are created might differ. In the DynamoDB web service, shard-creation behavior is partially influenced by table partition activity. When you run DynamoDB locally, there is no table partitioning. In either case, shards are ephemeral, so your application should not be dependent on shard behavior.
With dynamodb local, it appears that the StreamSpecification is ignored so there is no LatestStreamArn when calling createTable or describeTable
The following code returns LatestStreamArn with the managed dynamodb service but not dynamodb local:
ddb.createTable({
TableName: 'streaming_test',
AttributeDefinitions: [
{ AttributeName: 'id', AttributeType: 'S' }
],
KeySchema: [
{ AttributeName: 'id', KeyType: 'HASH' }
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
},
StreamSpecification: {
StreamEnabled: true,
StreamViewType: 'NEW_AND_OLD_IMAGES'
}
}, function (err, data) {
if (err) {
console.log(err, err.stack)
} else {
// data.TableDescription.StreamSpecification and
// data.TableDescription.LatestStreamArn are undefined
// for dynamodb local
console.log(data)
}
})
I am not able to reproduce your issue. Steps I took:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -inMemory -sharedDb
ddb
with dynamodb
.When I did this, I got a non-null and non-empty LatestStreamArn of arn:aws:dynamodb:ddblocal:000000000000:table/streaming_test/stream/2017-02-12T08:39:03.722
.
dynamodb.createTable({
TableName: 'streaming_test',
AttributeDefinitions: [
{ AttributeName: 'id', AttributeType: 'S' }
],
KeySchema: [
{ AttributeName: 'id', KeyType: 'HASH' }
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
},
StreamSpecification: {
StreamEnabled: true,
StreamViewType: 'NEW_AND_OLD_IMAGES'
}
}, function (err, data) {
if (err) {
console.log(err, err.stack)
} else {
console.log(data)
}
})