DynamoDB
DynamoDB CLI Reference
AWS CLI commands for DynamoDB
Complete reference for AWS DynamoDB CLI commands with examples.
Table Operations
Create Table
# Simple table with partition key only
aws dynamodb create-table \
--table-name Users \
--attribute-definitions AttributeName=userId,AttributeType=S \
--key-schema AttributeName=userId,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
# Table with composite key
aws dynamodb create-table \
--table-name Orders \
--attribute-definitions \
AttributeName=customerId,AttributeType=S \
AttributeName=orderId,AttributeType=S \
--key-schema \
AttributeName=customerId,KeyType=HASH \
AttributeName=orderId,KeyType=RANGE \
--billing-mode PAY_PER_REQUEST
# With provisioned capacity
aws dynamodb create-table \
--table-name Products \
--attribute-definitions AttributeName=productId,AttributeType=S \
--key-schema AttributeName=productId,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5Describe Table
aws dynamodb describe-table --table-name Users
# Get only table status
aws dynamodb describe-table \
--table-name Users \
--query 'Table.TableStatus'List Tables
aws dynamodb list-tables
# With pagination
aws dynamodb list-tables --limit 10Delete Table
aws dynamodb delete-table --table-name UsersUpdate Table
# Change to on-demand billing
aws dynamodb update-table \
--table-name Users \
--billing-mode PAY_PER_REQUEST
# Update provisioned capacity
aws dynamodb update-table \
--table-name Users \
--provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10Item Operations
Put Item
aws dynamodb put-item \
--table-name Users \
--item '{
"userId": {"S": "user-001"},
"name": {"S": "John Doe"},
"email": {"S": "john@example.com"},
"age": {"N": "30"},
"active": {"BOOL": true}
}'
# With condition (only if not exists)
aws dynamodb put-item \
--table-name Users \
--item '{"userId": {"S": "user-001"}, "name": {"S": "John"}}' \
--condition-expression "attribute_not_exists(userId)"Get Item
# Simple get
aws dynamodb get-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}'
# With composite key
aws dynamodb get-item \
--table-name Orders \
--key '{
"customerId": {"S": "cust-001"},
"orderId": {"S": "order-001"}
}'
# Get specific attributes
aws dynamodb get-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--projection-expression "name, email"
# Strongly consistent read
aws dynamodb get-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--consistent-readUpdate Item
# Update single attribute
aws dynamodb update-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--update-expression "SET #n = :name" \
--expression-attribute-names '{"#n": "name"}' \
--expression-attribute-values '{":name": {"S": "Jane Doe"}}'
# Update multiple attributes
aws dynamodb update-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--update-expression "SET age = :age, #s = :status" \
--expression-attribute-names '{"#s": "status"}' \
--expression-attribute-values '{":age": {"N": "31"}, ":status": {"S": "active"}}'
# Increment a counter
aws dynamodb update-item \
--table-name Products \
--key '{"productId": {"S": "prod-001"}}' \
--update-expression "SET viewCount = viewCount + :inc" \
--expression-attribute-values '{":inc": {"N": "1"}}'
# Add to a list
aws dynamodb update-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--update-expression "SET tags = list_append(if_not_exists(tags, :empty), :tag)" \
--expression-attribute-values '{":tag": {"L": [{"S": "premium"}]}, ":empty": {"L": []}}'
# Return updated values
aws dynamodb update-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--update-expression "SET age = :age" \
--expression-attribute-values '{":age": {"N": "32"}}' \
--return-values ALL_NEWDelete Item
aws dynamodb delete-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}'
# With condition
aws dynamodb delete-item \
--table-name Users \
--key '{"userId": {"S": "user-001"}}' \
--condition-expression "active = :false" \
--expression-attribute-values '{":false": {"BOOL": false}}'Query Operations
Query by Partition Key
aws dynamodb query \
--table-name Orders \
--key-condition-expression "customerId = :cid" \
--expression-attribute-values '{":cid": {"S": "cust-001"}}'Query with Sort Key Condition
# Begins with
aws dynamodb query \
--table-name Orders \
--key-condition-expression "customerId = :cid AND begins_with(orderId, :prefix)" \
--expression-attribute-values '{
":cid": {"S": "cust-001"},
":prefix": {"S": "2024-"}
}'
# Between
aws dynamodb query \
--table-name Orders \
--key-condition-expression "customerId = :cid AND orderId BETWEEN :start AND :end" \
--expression-attribute-values '{
":cid": {"S": "cust-001"},
":start": {"S": "2024-01-01"},
":end": {"S": "2024-12-31"}
}'Query with Filter
aws dynamodb query \
--table-name Orders \
--key-condition-expression "customerId = :cid" \
--filter-expression "#s = :status" \
--expression-attribute-names '{"#s": "status"}' \
--expression-attribute-values '{
":cid": {"S": "cust-001"},
":status": {"S": "SHIPPED"}
}'Query Index
aws dynamodb query \
--table-name Orders \
--index-name StatusIndex \
--key-condition-expression "#s = :status" \
--expression-attribute-names '{"#s": "status"}' \
--expression-attribute-values '{":status": {"S": "PENDING"}}'Query with Pagination
# First page
aws dynamodb query \
--table-name Orders \
--key-condition-expression "customerId = :cid" \
--expression-attribute-values '{":cid": {"S": "cust-001"}}' \
--limit 10
# Next page (use LastEvaluatedKey from previous response)
aws dynamodb query \
--table-name Orders \
--key-condition-expression "customerId = :cid" \
--expression-attribute-values '{":cid": {"S": "cust-001"}}' \
--limit 10 \
--exclusive-start-key '{"customerId": {"S": "cust-001"}, "orderId": {"S": "order-010"}}'Scan Operations
# Simple scan
aws dynamodb scan --table-name Users
# Scan with filter
aws dynamodb scan \
--table-name Users \
--filter-expression "age > :minAge" \
--expression-attribute-values '{":minAge": {"N": "25"}}'
# Scan with projection
aws dynamodb scan \
--table-name Users \
--projection-expression "userId, #n, email" \
--expression-attribute-names '{"#n": "name"}'
# Parallel scan
aws dynamodb scan \
--table-name Users \
--total-segments 4 \
--segment 0Batch Operations
Batch Get
aws dynamodb batch-get-item \
--request-items '{
"Users": {
"Keys": [
{"userId": {"S": "user-001"}},
{"userId": {"S": "user-002"}},
{"userId": {"S": "user-003"}}
]
}
}'Batch Write
aws dynamodb batch-write-item \
--request-items '{
"Users": [
{"PutRequest": {"Item": {"userId": {"S": "user-004"}, "name": {"S": "Alice"}}}},
{"PutRequest": {"Item": {"userId": {"S": "user-005"}, "name": {"S": "Bob"}}}},
{"DeleteRequest": {"Key": {"userId": {"S": "user-001"}}}}
]
}'Transactions
TransactWrite
aws dynamodb transact-write-items \
--transact-items '[
{
"Put": {
"TableName": "Orders",
"Item": {"customerId": {"S": "cust-001"}, "orderId": {"S": "order-new"}}
}
},
{
"Update": {
"TableName": "Inventory",
"Key": {"productId": {"S": "prod-001"}},
"UpdateExpression": "SET quantity = quantity - :qty",
"ExpressionAttributeValues": {":qty": {"N": "1"}}
}
}
]'TransactGet
aws dynamodb transact-get-items \
--transact-items '[
{"Get": {"TableName": "Users", "Key": {"userId": {"S": "user-001"}}}},
{"Get": {"TableName": "Orders", "Key": {"customerId": {"S": "cust-001"}, "orderId": {"S": "order-001"}}}}
]'Global Secondary Index
Create GSI
aws dynamodb update-table \
--table-name Orders \
--attribute-definitions AttributeName=status,AttributeType=S \
--global-secondary-index-updates '[
{
"Create": {
"IndexName": "StatusIndex",
"KeySchema": [{"AttributeName": "status", "KeyType": "HASH"}],
"Projection": {"ProjectionType": "ALL"}
}
}
]'Delete GSI
aws dynamodb update-table \
--table-name Orders \
--global-secondary-index-updates '[
{"Delete": {"IndexName": "StatusIndex"}}
]'Streams
# Enable streams
aws dynamodb update-table \
--table-name Orders \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES
# Describe stream
aws dynamodbstreams describe-stream \
--stream-arn arn:aws:dynamodb:us-east-1:123456789012:table/Orders/stream/timestampTTL
# Enable TTL
aws dynamodb update-time-to-live \
--table-name Sessions \
--time-to-live-specification Enabled=true,AttributeName=expirationTime
# Describe TTL
aws dynamodb describe-time-to-live --table-name SessionsBackups
# Create backup
aws dynamodb create-backup \
--table-name Users \
--backup-name Users-backup-2024
# List backups
aws dynamodb list-backups --table-name Users
# Restore from backup
aws dynamodb restore-table-from-backup \
--target-table-name Users-restored \
--backup-arn arn:aws:dynamodb:us-east-1:123456789012:table/Users/backup/backup-id
# Enable point-in-time recovery
aws dynamodb update-continuous-backups \
--table-name Users \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=trueTags
# Add tags
aws dynamodb tag-resource \
--resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Users \
--tags Key=Environment,Value=Production
# List tags
aws dynamodb list-tags-of-resource \
--resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Users