Skip to main content

dynamodump

Build Status CodeQL Status Docker Status Linting Status Test Status PyPI version PyPI pyversions Code Style

Simple backup and restore script for Amazon DynamoDB using AWS SDK for Python (boto3) to work similarly to mysqldump.

Suitable for DynamoDB usages of smaller data volume which do not warrant the usage of AWS Data Pipeline for backup/restores/empty.

dynamodump supports local DynamoDB instances as well (tested with DynamoDB Local).

Table of Contents

Installation

pip install dynamodump

Usage

usage: dynamodump.py [-h] [-a {zip,tar}] [-b BUCKET] [-m {backup,restore,empty}] [-r REGION] [--host HOST] [--port PORT] [--accessKey ACCESSKEY] [--secretKey SECRETKEY] [-p PROFILE] [-s SRCTABLE] [-d DESTTABLE]
                     [--prefixSeparator PREFIXSEPARATOR] [--noSeparator] [--readCapacity READCAPACITY] [-t TAG] [--writeCapacity WRITECAPACITY] [--schemaOnly] [--dataOnly] [--noConfirm] [--skipThroughputUpdate]
                     [--dumpPath DUMPPATH] [--billingMode {PROVISIONED,PAY_PER_REQUEST}] [--log LOG] [--limit LIMIT] [-f FILTEROPTION]

Simple DynamoDB backup/restore/empty.

options:
  -h, --help            show this help message and exit
  -a {zip,tar}, --archive {zip,tar}
                        Type of compressed archive to create. If unset, don't create archive
  -b BUCKET, --bucket BUCKET
                        S3 bucket in which to store or retrieve backups. [must already exist]
  -m {backup,restore,empty}, --mode {backup,restore,empty}
                        Operation to perform
  -r REGION, --region REGION
                        AWS region to use, e.g. 'us-west-1'. Can use any region for local testing
  --host HOST           Host of local DynamoDB. This parameter initialises dynamodump for local DynamoDB testing [required only for local]
  --port PORT           Port of local DynamoDB [required only for local]
  --accessKey ACCESSKEY
                        Access key of local DynamoDB [required only for local]
  --secretKey SECRETKEY
                        Secret key of local DynamoDB [required only for local]
  -p PROFILE, --profile PROFILE
                        AWS credentials file profile to use. Allows you to use a profile instead accessKey, secretKey authentication
  -s SRCTABLE, --srcTable SRCTABLE
                        Source DynamoDB table name to backup or restore from, use 'tablename*' for wildcard prefix selection or '*' for all tables. Mutually exclusive with --tag
  -d DESTTABLE, --destTable DESTTABLE
                        Destination DynamoDB table name to backup or restore to, use 'tablename*' for wildcard prefix selection (defaults to use '-' separator) [optional, defaults to source]
  --prefixSeparator PREFIXSEPARATOR
                        Specify a different prefix separator, e.g. '.' [optional]
  --noSeparator         Overrides the use of a prefix separator for backup wildcard searches [optional]
  --readCapacity READCAPACITY
                        Change the temp read capacity of the DynamoDB table to backup from [optional]
  -t TAG, --tag TAG     Tag to use for identifying tables to back up. Mutually exclusive with srcTable. Provided as KEY=VALUE
  --writeCapacity WRITECAPACITY
                        Change the temp write capacity of the DynamoDB table to restore to [defaults to 25, optional]
  --schemaOnly          Backup or restore the schema only. Do not backup/restore data. Can be used with both backup and restore modes. Cannot be used with the --dataOnly [optional]
  --dataOnly            Restore data only. Do not delete/recreate schema [optional for restore]
  --noConfirm           Don't ask for confirmation before deleting existing schemas.
  --skipThroughputUpdate
                        Skip updating throughput values across tables [optional]
  --dumpPath DUMPPATH   Directory to place and search for DynamoDB table backups (defaults to use 'dump') [optional]
  --billingMode {PROVISIONED,PAY_PER_REQUEST}
                        Set billing mode between PROVISIONED|PAY_PER_REQUEST (defaults to use 'PROVISIONED') [optional]
  --log LOG             Logging level - DEBUG|INFO|WARNING|ERROR|CRITICAL [optional]
  --limit LIMIT         Limit option for backup, will stop the back up process after number of backed up items reaches the limit [optional]
  -f FILTEROPTION, --filterOption FILTEROPTION
                        Filter option for backup, JSON file of which keys are ['FilterExpression', 'ExpressionAttributeNames', 'ExpressionAttributeValues']

Backup files are stored in a 'dump' subdirectory, and are restored from there as well by default.

Script (unattended) usage

As of v1.2.0, note that --noConfirm is required to perform data restores involving deletions without any confirmation.

Docker CLI usage

docker run --rm -it bchew/dynamodump -h

dynamodump container images are also published to Amazon ECR Public and GitHub Packages:

public.ecr.aws/bchew/dynamodump
ghcr.io/bchew/dynamodump

Links to the registries specified:

AWS example

Single table backup/restore:

dynamodump -m backup -r us-west-1 -s testTable

dynamodump -m restore -r us-west-1 -s testTable

Multiple table backup/restore (assumes prefix of 'production-' of table names, use --prefixSeparator to specify a different separator):

dynamodump -m backup -r us-west-1 -s production*

dynamodump -m restore -r us-west-1 -s production*

The above, but between different environments (e.g. production-_ tables to development-_ tables):

dynamodump -m backup -r us-west-1 -s production*

dynamodump -m restore -r us-west-1 -s production* -d development*

Backup all tables and restore only data (will not delete and recreate schema):

dynamodump -m backup -r us-west-1 -s "*"

dynamodump -m restore -r us-west-1 -s "*" --dataOnly

Dump all table schemas and create the schemas (e.g. creating blank tables in a different AWS account):

dynamodump -m backup -r us-west-1 -p source_credentials -s "*" --schemaOnly

dynamodump -m restore -r us-west-1 -p destination_credentials -s "*" --schemaOnly

Backup all tables based on AWS tag key=value

dynamodump -p profile -r us-east-1 -m backup -t KEY=VALUE

Backup all tables based on AWS tag, compress and store in specified S3 bucket.

dynamodump -p profile -r us-east-1 -m backup -a tar -b some_s3_bucket -t TAG_KEY=TAG_VALUE

dynamodump -p profile -r us-east-1 -m backup -a zip -b some_s3_bucket -t TAG_KEY=TAG_VALUE

Restore from S3 bucket to specified destination table

## source_table identifies archive file in S3 bucket from which backup data is restored
dynamodump -a tar -b some_s3_bucket -m restore -r us-east-1 -p profile -d destination_table -s source_table

Local example

The following assumes your local DynamoDB is running on localhost:8000 and is accessible via 'a' as access/secret keys. You must specify the host to get local behavior.

dynamodump -m backup -r local -s testTable --host localhost --port 8000 --accessKey a --secretKey a

dynamodump -m restore -r local -s testTable --host localhost --port 8000 --accessKey a --secretKey a

Multiple table backup/restore as stated in the AWS examples are also available for local.

Development

python3 -m venv env
source env/bin/activate

# install dev requirements
pip3 install -r requirements-dev.txt

# one-time install of pre-commit hooks
pre-commit install

Metadata

Release files for dynamodump 1.11.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dynamodump 1.11.1
File Size Uploaded
dynamodump-1.11.1.tar.gz 19.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dynamodump 1.11.1
File Interpreter ABI Platform
dynamodump-1.11.1-py3-none-any.whl Python 3 none any Details

Total release size: 36.4 kB

Release files / dynamodump-1.11.1.tar.gz

Download URL dynamodump-1.11.1.tar.gz
Size 19.4 kB
Tags Source
SHA-256 checksum
How to use checksums
61081b7ab012385e44c74c22681aeb8d0aa6ccd43467928f62c5b4fd114deec5
BLAKE2b-256 checksum
How to use checksums
53d3da33299bb6d9b8545607a6ee8628320e89fa6e31d635b4a16bfe848096e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / dynamodump-1.11.1-py3-none-any.whl

Download URL dynamodump-1.11.1-py3-none-any.whl
Size 17.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ff533f27a02cafddb0591e2c96a86af785c1079441b67f40925bc6a6aa9a991d
BLAKE2b-256 checksum
How to use checksums
b1f15c73ca058c876fded4fcbf85704fc7c403dc9f3ea50948ed95e29474c9ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

1.11.1 This release

2 release files

1.10.0

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page