Create a table with Multi-Region Strong Consistency.
# Step 1: Create a new table in us-east-2 (primary region for MRSC)
# Note: Table must be empty when enabling MRSC
aws dynamodb create-table \
--table-name MusicTable \
--attribute-definitions \
AttributeName=Artist,AttributeType=S \
AttributeName=SongTitle,AttributeType=S \
--key-schema \
AttributeName=Artist,KeyType=HASH \
AttributeName=SongTitle,KeyType=RANGE \
--billing-mode PAY_PER_REQUEST \
--region us-east-2
# Wait for table to become active
aws dynamodb wait table-exists --table-name MusicTable --region us-east-2
# Step 2: Add replica and witness with Multi-Region Strong Consistency
# MRSC requires exactly three replicas in supported regions
aws dynamodb update-table \
--table-name MusicTable \
--replica-updates '[{"Create": {"RegionName": "us-east-1"}}]' \
--global-table-witness-updates '[{"Create": {"RegionName": "us-west-2"}}]' \
--multi-region-consistency STRONG \
--region us-east-2
Verify MRSC configuration and replica status.
# Verify the global table configuration and MRSC setting
aws dynamodb describe-table \
--table-name MusicTable \
--region us-east-2 \
--query 'Table.{TableName:TableName,TableStatus:TableStatus,MultiRegionConsistency:MultiRegionConsistency,Replicas:Replicas[*],GlobalTableWitnesses:GlobalTableWitnesses[*].{Region:RegionName,Status:ReplicaStatus}}'
Test strong consistency with immediate reads across Regions.
# Write an item to the primary region
aws dynamodb put-item \
--table-name MusicTable \
--item '{"Artist": {"S":"The Beatles"},"SongTitle": {"S":"Hey Jude"},"Album": {"S":"The Beatles 1967-1970"},"Year": {"N":"1968"}}' \
--region us-east-2
# Read the item from replica region to verify strong consistency (cannot read or write to witness)
# No wait time needed - MRSC provides immediate consistency
echo "Reading from us-east-1 (immediate consistency):"
aws dynamodb get-item \
--table-name MusicTable \
--key '{"Artist": {"S":"The Beatles"},"SongTitle": {"S":"Hey Jude"}}' \
--consistent-read \
--region us-east-1
Perform conditional writes with MRSC guarantees.
# Perform a conditional update from a different region
# This demonstrates that conditions work consistently across all regions
aws dynamodb update-item \
--table-name MusicTable \
--key '{"Artist": {"S":"The Beatles"},"SongTitle": {"S":"Hey Jude"}}' \
--update-expression "SET #rating = :rating" \
--condition-expression "attribute_exists(Artist)" \
--expression-attribute-names '{"#rating": "Rating"}' \
--expression-attribute-values '{":rating": {"N":"5"}}' \
--region us-east-1
Clean up MRSC global table resources.
# Remove replica tables (must be done before deleting the primary table)
aws dynamodb update-table \
--table-name MusicTable \
--replica-updates '[{"Delete": {"RegionName": "us-east-1"}}]' \
--global-table-witness-updates '[{"Delete": {"RegionName": "us-west-2"}}]' \
--region us-east-2
# Wait for replicas to be deleted
echo "Waiting for replicas to be deleted..."
sleep 30
# Delete the primary table
aws dynamodb delete-table \
--table-name MusicTable \
--region us-east-2