DynamoDB
kumolo implements the DynamoDB REST API. All operations accept standard AWS SDK v2 requests — point your client at http://localhost:5566.
Unlike S3, UsePathStyle is not required; only BaseEndpoint needs to be overridden on the client.
Support levels
Section titled “Support levels”| Symbol | Meaning |
|---|---|
| ✓ | Fully implemented — the feature behaves like real AWS |
| ◐ | Partial support — the operation works but has known limitations; see the note for details |
| — | Not yet implemented |
Operation support
Section titled “Operation support”Operations sourced from internal/dynamodb/router.go in the kumolo repository.
Table management
Section titled “Table management”| Operation | Supported |
|---|---|
CreateTable | ✓ |
DeleteTable | ✓ |
DescribeTable | ✓ |
ListTables | ✓ |
UpdateTable | ✓ |
Item operations
Section titled “Item operations”| Operation | Supported |
|---|---|
PutItem | ✓ |
GetItem | ✓ |
DeleteItem | ✓ |
UpdateItem | ✓ |
Query & scan
Section titled “Query & scan”| Operation | Supported |
|---|---|
Query | ✓ |
Scan | ◐ |
Batch & transactions
Section titled “Batch & transactions”| Operation | Supported |
|---|---|
BatchGetItem | ✓ |
BatchWriteItem | ✓ |
TransactGetItems | ✓ |
TransactWriteItems | ✓ |
| Operation | Supported |
|---|---|
UpdateTimeToLive | ✓ |
DescribeTimeToLive | ✓ |
Tagging
Section titled “Tagging”| Operation | Supported |
|---|---|
TagResource | ✓ |
UntagResource | ✓ |
ListTagsOfResource | ◐ |
Limits & endpoints
Section titled “Limits & endpoints”| Operation | Supported |
|---|---|
DescribeLimits | ✓ |
DescribeEndpoints | ✓ |
Streams
Section titled “Streams”| Operation | Supported |
|---|---|
ListStreams | ✓ |
DescribeStream | ✓ |
GetShardIterator | ✓ |
GetRecords | ✓ |
PartiQL
Section titled “PartiQL”| Operation | Supported |
|---|---|
ExecuteStatement | ✓ |
BatchExecuteStatement | ✓ |
ExecuteTransaction | ✓ |
Continuous backups (PITR)
Section titled “Continuous backups (PITR)”| Operation | Supported |
|---|---|
DescribeContinuousBackups | ◐ |
UpdateContinuousBackups | ◐ |
Kinesis streaming
Section titled “Kinesis streaming”| Operation | Supported |
|---|---|
DescribeKinesisStreamingDestination | ◐ |
EnableKinesisStreamingDestination | ◐ |
DisableKinesisStreamingDestination | ◐ |
Global tables
Section titled “Global tables”| Operation | Supported |
|---|---|
CreateGlobalTable | — |
DescribeGlobalTable | — |
ListGlobalTables | — |
UpdateGlobalTable | — |
UpdateGlobalTableSettings | — |
DescribeTableReplicaAutoScaling | — |
UpdateTableReplicaAutoScaling | — |
Backups
Section titled “Backups”| Operation | Supported |
|---|---|
CreateBackup | — |
DeleteBackup | — |
DescribeBackup | — |
ListBackups | — |
ExportTableToPointInTime | — |
ListExports | — |
DescribeExport | — |
ImportTable | — |
ListImports | — |
DescribeImport | — |
Contributor insights
Section titled “Contributor insights”| Operation | Supported |
|---|---|
DescribeContributorInsights | — |
ListContributorInsights | — |
UpdateContributorInsights | — |
Quick start
Section titled “Quick start”import ( "context"
"github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/dynamodb" "github.com/aws/aws-sdk-go-v2/service/dynamodb/types")
cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion("us-east-1"), config.WithCredentialsProvider( credentials.NewStaticCredentialsProvider("test", "test", ""), ),)if err != nil { panic(err)}
client := dynamodb.NewFromConfig(cfg, func(o *dynamodb.Options) { o.BaseEndpoint = aws.String("http://localhost:5566")})
if _, err = client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String("my-table"), BillingMode: types.BillingModePayPerRequest, AttributeDefinitions: []types.AttributeDefinition{ {AttributeName: aws.String("pk"), AttributeType: types.ScalarAttributeTypeS}, }, KeySchema: []types.KeySchemaElement{ {AttributeName: aws.String("pk"), KeyType: types.KeyTypeHash}, },}); err != nil { panic(err)}
if _, err = client.PutItem(context.Background(), &dynamodb.PutItemInput{ TableName: aws.String("my-table"), Item: map[string]types.AttributeValue{ "pk": &types.AttributeValueMemberS{Value: "hello"}, "message": &types.AttributeValueMemberS{Value: "hello, kumolo"}, },}); err != nil { panic(err)}import boto3
dynamodb = boto3.client( "dynamodb", region_name="us-east-1", endpoint_url="http://localhost:5566", aws_access_key_id="test", aws_secret_access_key="test",)
dynamodb.create_table( TableName="my-table", BillingMode="PAY_PER_REQUEST", AttributeDefinitions=[ {"AttributeName": "pk", "AttributeType": "S"}, ], KeySchema=[ {"AttributeName": "pk", "KeyType": "HASH"}, ],)
dynamodb.put_item( TableName="my-table", Item={ "pk": {"S": "hello"}, "message": {"S": "hello, kumolo"}, },)aws dynamodb create-table \ --table-name my-table \ --billing-mode PAY_PER_REQUEST \ --attribute-definitions AttributeName=pk,AttributeType=S \ --key-schema AttributeName=pk,KeyType=HASH \ --endpoint-url http://localhost:5566 \ --region us-east-1
aws dynamodb put-item \ --table-name my-table \ --item '{"pk": {"S": "hello"}, "message": {"S": "hello, kumolo"}}' \ --endpoint-url http://localhost:5566