Safe Copy Dynamodb Table
This module will allow you to copy data from one table to another using very simple API, Support cross zone copying and AWS config for each table ( source & destination ) and it can create the destination table using source table schema
Installation
npm i copy-dynamodb-table
Usage :
var copy = require('copy-dynamodb-table').copy
copy({
source: {
tableName: 'source_table_name',
},
destination: {
tableName: 'destination_table_name',
},
log: true,
create : true,
schemaOnly : false,
continuousBackups: true,
transform: function(item , index){ return item }
},
function (err, result) {
if (err) {
console.log(err)
}
console.log(result)
})
Adding AWS Config :
var copy = require('copy-dynamodb-table').copy
var globalAWSConfig = {
accessKeyId: 'AKID',
secretAccessKey: 'SECRET',
region: 'eu-west-1'
}
copy({
config: globalAWSConfig,
source: {
tableName: 'source_table_name',
},
destination: {
tableName: 'destination_table_name',
},
log: true,
create : true
},
function (err, result) {
if (err) {
console.log(err)
}
console.log(result)
})
AWS Config for each table ( cross region ) :
var copy = require('copy-dynamodb-table').copy
var globalAWSConfig = {
accessKeyId: 'AKID',
secretAccessKey: 'SECRET',
region: 'eu-west-1'
}
var sourceAWSConfig = {
accessKeyId: 'AKID',
secretAccessKey: 'SECRET',
region: 'eu-west-1'
}
var destinationAWSConfig = {
accessKeyId: 'AKID',
secretAccessKey: 'SECRET',
region: 'us-west-2'
}
copy({
config: globalAWSConfig,
source: {
tableName: 'source_table_name',
config: sourceAWSConfig
},
destination: {
tableName: 'destination_table_name',
config: destinationAWSConfig
},
log: true,
create : true
},
function (err, result) {
if (err) {
console.log(err)
}
console.log(result)
})
Note :
- If
source.config
or destination.config
value is undefined
, the module will use the globalAWSConfig
. - If
globalAWSConfig
value is undefined
the module will extact AWS
config from environment variables. - Increase Write capacity for your dynamodb table temporarily until the copying is finished so you can get the highest copying speed
Promise version :
Use this if you want to copy using promises, or async / await .
function promiseCopy(data) {
return new Promise((resolve, reject) => {
copy(data, function (err, result) {
if (err) {
return reject(err)
}
resolve(result)
})
})
}
promiseCopy({
source: {
tableName: 'source_table_name',
},
destination: {
tableName: 'destination_table_name',
},
log: true,
create: true
}).then(function (results) {
}).catch(function (err) {
})
Use Case :
With source table read capacity units = 100 & destination table write capacity units = 1000 , I managed to copy ~100,000 items from source to destination within ~175 seconds , with avarage item size of 4 KB.
Contributors :
License :
ISC