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 |
◐ |
UpdateKinesisStreamingDestination |
— |
Global tables
Section titled “Global tables”| Operation | Supported |
|---|---|
CreateGlobalTable |
— |
DescribeGlobalTable |
— |
DescribeGlobalTableSettings |
— |
ListGlobalTables |
— |
UpdateGlobalTable |
— |
UpdateGlobalTableSettings |
— |
DescribeTableReplicaAutoScaling |
— |
UpdateTableReplicaAutoScaling |
— |
Backups
Section titled “Backups”| Operation | Supported |
|---|---|
CreateBackup |
— |
DeleteBackup |
— |
DescribeBackup |
— |
ListBackups |
— |
RestoreTableFromBackup |
— |
RestoreTableToPointInTime |
— |
ExportTableToPointInTime |
— |
ListExports |
— |
DescribeExport |
— |
ImportTable |
— |
ListImports |
— |
DescribeImport |
— |
Resource policy
Section titled “Resource policy”| Operation | Supported |
|---|---|
GetResourcePolicy |
— |
PutResourcePolicy |
— |
DeleteResourcePolicy |
— |
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