Backup Strategy

Use S3 exports instead of multiple DynamoDB backups to significantly reduce long-term backup storage costs.

DynamoDB backup options

DynamoDB offers two native backup methods to protect your data:1

Continuous backups (Point-in-Time Recovery - PITR):

  • Automatic backups for the preceding 1 to 35 days
  • Restore to any second within the recovery window
  • Charged based on table size: $0.20 per GB-month2
  • Always-on protection with per-second granularity

On-demand backups:

  • Manual snapshots taken at specific points in time
  • Retained until explicitly deleted
  • Charged per backup: $0.10 per GB-month for each backup3
  • Can be managed directly in DynamoDB or through AWS Backup

While these native backup options provide convenient disaster recovery capabilities, storing multiple backups can become expensive quickly, especially for large tables or long retention requirements.

The cost problem with multiple DynamoDB backups

The cost of DynamoDB backups scales linearly with both the size of your data and the number of backups you maintain. Each backup you keep incurs ongoing monthly storage charges.

Example: Daily backups with 30-day retention

Consider a DynamoDB table with 500GB of data where you need to maintain daily backups for 30 days:

Using DynamoDB on-demand backups:

  • Table size: 500GB
  • Retention: 30 daily backups
  • Cost per backup: 500GB × $0.10/GB-month = $50/month
  • Total monthly cost: 30 backups × $50 = $1,500/month

For teams running multiple tables or larger databases, these costs multiply quickly. A common mistake is treating DynamoDB backups like S3 storage—they’re not. Each DynamoDB backup is a separately charged snapshot with its own monthly storage fee.

Understanding DynamoDB backup billing

DynamoDB on-demand backups are billed monthly, with some important nuances:4

  • When you create a backup on any day, you’re charged for the remaining days of that month
  • On the 1st of each subsequent month, you’re charged for the full month for all existing backups
  • If you delete a backup mid-month, the charge is prorated based on actual usage
  • The “sum of all backups” model means costs accumulate with each additional backup

This billing model makes sense for short-term backups but becomes expensive for long-term retention.

The S3 export approach

Instead of maintaining multiple DynamoDB backups, you can export your data to Amazon S3 and manage backups there. This approach dramatically reduces costs for most backup retention scenarios.5

How it works:

  1. Enable Point-in-Time Recovery (PITR) on your table ($0.20/GB-month)
  2. Export table data to S3 on your desired schedule (daily, weekly, etc.)
  3. Store exported backups in S3 instead of keeping multiple DynamoDB snapshots
  4. Apply S3 Lifecycle policies to automatically transition older backups to cheaper storage tiers

Pricing structure:

  • DynamoDB PITR: $0.20 per GB-month (enables exports and 35-day recovery)
  • Export to S3: $0.10 per GB per export (one-time charge)5
  • S3 Standard storage: $0.023 per GB-month
  • S3 Glacier Instant Retrieval: $0.004 per GB-month (minimum 90 days)
  • S3 Glacier Flexible Retrieval: $0.0036 per GB-month (3-5 hour retrieval)

Cost comparison example

Let’s revisit the 500GB table with 30-day retention requirement:

Option 1: DynamoDB on-demand backups only

  • 30 daily backups × 500GB × $0.10/GB-month = $1,500/month

Option 2: PITR + S3 exports with intelligent tiering

  • PITR (last 35 days): 500GB × $0.20/GB-month = $100/month
  • Daily export costs: 30 exports × 500GB × $0.10 = $1,500/month in exports
  • S3 storage for 30 backups: 15TB × $0.023 = $345/month

Wait—that’s actually more expensive! But here’s the key: you don’t need to export daily for long-term backups.

Option 3: PITR + weekly S3 exports (optimal)

  • PITR (continuous, 35-day protection): 500GB × $0.20/GB-month = $100/month
  • Weekly exports: 4 exports × 500GB × $0.10 = $200/month
  • S3 storage (4 weeks): 2TB × $0.023/GB-month = $46/month
  • Total: $346/month

Savings: $1,154/month (77% reduction) compared to daily DynamoDB backups.

Option 4: PITR + S3 with lifecycle transitions (best for long-term)

For longer retention requirements (90 days, 1 year, etc.), S3 becomes even more compelling:

  • PITR (35-day recovery): $100/month
  • Weekly exports to S3: $200/month
  • S3 Standard (recent 30 days, 4 backups × 500GB): 2TB × $0.023 = $46/month
  • S3 Glacier Instant Retrieval (30-90 days, 8 backups): 4TB × $0.004 = $16/month
  • S3 Glacier Flexible Retrieval (90+ days, older backups): varies
  • Total for 90-day retention: ~$362/month

Compare to DynamoDB backups for 90 days:

  • 13 weekly backups × 500GB × $0.10/GB-month = $650/month

Savings: $288/month (44% reduction) and you still have 35 days of point-in-time recovery.

When to use each approach

Use DynamoDB backups when:

  • You need very short-term backups (7 days or less)
  • Compliance requires DynamoDB-native backups
  • Restore simplicity is more important than cost
  • Your tables are small (< 50GB)
  • You only need 1-3 backups at a time

Use S3 exports when:

  • Long-term retention requirements (30+ days)
  • Multiple backups needed over time (daily, weekly, monthly)
  • Large tables (100GB+)
  • Cost optimization is a priority
  • You need backups for analytics or cross-region transfers
  • You want to leverage cheaper S3 storage tiers
  • PITR for continuous protection and quick restores (last 35 days)
  • Weekly or monthly S3 exports for long-term retention
  • Delete DynamoDB on-demand backups after exporting to S3
  • S3 Lifecycle policies to transition older backups to Glacier

This hybrid approach gives you the best of both worlds: fast recovery from PITR for recent changes and cost-effective long-term storage in S3.

Implementing an S3 backup strategy

Step 1: Enable Point-in-Time Recovery

  • Enables export capability
  • Provides 35-day continuous backup
  • Costs $0.20/GB-month

Step 2: Set up automated exports

  • Use AWS Lambda, Step Functions, or EventBridge to schedule exports
  • Export to S3 based on your retention needs (daily, weekly, monthly)
  • Organize exports with consistent naming (e.g., table-name/YYYY-MM-DD/)

Step 3: Configure S3 Lifecycle policies

  • Transition objects after 30 days: S3 Standard → Glacier Instant Retrieval
  • Transition objects after 90 days: Glacier Instant Retrieval → Glacier Flexible Retrieval
  • Delete objects after X days based on retention requirements
  • Apply policies to specific prefixes for fine-grained control

Step 4: Monitor and optimize

  • Track export costs and S3 storage growth
  • Adjust export frequency based on actual recovery needs
  • Delete unnecessary exports
  • Compress older exports if not already compressed

Export formats and restore process

DynamoDB exports support multiple formats:5

DynamoDB JSON:

  • Native format with full type fidelity
  • Larger file sizes
  • Easy to re-import

Amazon Ion:

  • Binary format, more compact
  • Efficient storage and transfer
  • Requires Ion tools to read

For restores:

  1. Recent data (< 35 days): Use PITR to restore directly from DynamoDB
  2. Older data: Import from S3 export back to DynamoDB using the native import feature
  3. Import is free of WCU charges - no write capacity consumed during import

This means you can maintain a lean backup strategy: keep live PITR for recent recovery and cost-effective S3 exports for historical backups.

Important considerations

PITR is required for exports:

  • Must enable PITR ($0.20/GB-month) to use export functionality
  • Even if you don’t plan to use the 35-day recovery window, PITR is needed for exports
  • Factor this cost into your calculations

Export costs add up with frequency:

  • Each export costs $0.10/GB
  • Daily exports of 500GB = $50/day = $1,500/month just in export fees
  • Match export frequency to actual backup needs, not perceived needs
  • Weekly or monthly exports are often sufficient with PITR covering gaps

S3 storage considerations:

  • Exports can be large—plan S3 storage capacity
  • Use S3 Intelligent-Tiering if access patterns are unpredictable
  • Cross-region exports incur data transfer charges
  • Exports don’t consume read capacity but count toward service quotas

Restoration from S3:

  • Importing from S3 is slower than PITR restores
  • Plan for recovery time objectives (RTO) when designing strategy
  • Test your restore process regularly
  • Consider keeping recent exports in S3 Standard for faster access

Best practices

  1. Use PITR as your primary backup - Fast, automated, comprehensive protection for recent data
  2. Export weekly or monthly for long-term retention - Balance cost and recovery granularity
  3. Delete DynamoDB backups after exporting to S3 - Avoid paying for duplicate storage
  4. Leverage S3 Lifecycle policies - Automatically move old backups to cheaper tiers
  5. Name exports consistently - Use date-based naming for easy management
  6. Monitor backup costs - Track both DynamoDB and S3 costs to optimize strategy
  7. Test restores regularly - Verify both PITR and S3 import processes work
  8. Document your retention policy - Ensure team understands backup strategy and recovery procedures

Resources

Footnotes

  1. DynamoDB Backup and Restore

  2. DynamoDB Pricing - Continuous Backups

  3. DynamoDB Pricing - On-Demand Backups

  4. Understanding DynamoDB backup billing

  5. Exporting DynamoDB data to S3 2 3