Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8883

DynamoDBのテーブルデータをNodejsでS3にBackupする

$
0
0

はじめに

DynamoDBに大量にあるテーブルのデータを一括でS3にバックアップしたい。。みたいな状況があったので、メモとして書いておきます。

ちなみにテーブルが少量であれば、Data Pipelineを使って簡単に出来ます!!
aws-sdkではData Pipelineの細かいオプションは設定出来なかったようなので、nodejsでData Pipelineを操作することはしていません。

環境

  • Nodejs v11.1.0
  • DynamoDB

事前準備

バックアップを行うためにS3に専用のバケットを作成しておいてください。
この記事ではbackupsというバケットを作成したという例で進めます。

プロジェクトを作成

適当ですが、dynamodb-backuperみたいなディレクトリを作成して進めていきます。

$ mkdir dynamodb-backuper

$ cd dynamodb-backuper

$ npm init

$ npm install aws-sdk dynamodb-backup-restore --save$ touch export.js restore.js

export.js

export.jsはその名通りDynamoDBから全テーブルのbackupを行うファイルです。

'use strict'constAWS=require('aws-sdk')constDynamoDB=newAWS.DynamoDB({region:'ap-northeast-1'})asyncfunctionmain(){lettables=awaitgetAllTableLists()tables.forEach((v)=>{exportToS3(v)})}// 実行main()// Get all table names from DynamoDBasyncfunctiongetAllTableLists(){letparams={}lettables=[]while(true){letresponse=awaitDynamoDB.listTables(params).promise()tables=tables.concat(response.TableNames)if(!response.LastEvaluatedTableName){break}else{params.ExclusiveStartTableName=response.LastEvaluatedTableName}}returntables}// Function to perform backupfunctionexportToS3(tableName){constBackup=require('dynamodb-backup-restore').Backupletconfig={S3Bucket:'backups',// 必須 - バケット名 S3Prefix:tableName,// 任意 - 保存するS3のサブフォルダ名S3Encryption:'AES256',// 任意 - 暗号化S3Region:'ap-northeast-1',// 必須 - リージョンDbTable:tableName// 必須 - エクスポートするテーブル名}letbackup=newBackup(config)backup.full()}

以下でエクスポートを実行出来ます。

$ node export.js

restore.js

restore.jsもそのままですが、export.jsでS3にエクスポートしたデータを今度はDynamoDBの指定のテーブルにインポートします。

リストアを行う前に事前にインポートするテーブルを作成しておく必要があります。
今回はnewTest1というテーブルを作ったとして進めます。
この時に注意が必要なのが、データ量によっては無料枠ではキャパシティーレベルが超えてしまうため、データサイズに応じてオンデマンドに変更してください。

以下のコードでは、execRestore関数の第一引数にS3にバックアップをとったtest1というサブフォルダを指定し、インポート用に作成したnewTest1というテーブル名を第二引数に設定します。

'use strict'functionexecRestore(bucketName,tableName){constRestore=require('dynamodb-backup-restore').Restoreletconfig={S3Bucket:'backups',// 必須S3Prefix:bucketName,// 任意S3Region:'ap-northeast-1',// 必須DbTable:tableName,// 必須DbRegion:'ap-northeast-1',// 必須}Restore(config)}// 実行execRestore('test1','newTest1')

以下でリストアを実行出来ます。

$ node restore.js

Viewing all articles
Browse latest Browse all 8883

Trending Articles