今回は、DynamoDBへのデータインポートについてご紹介したいと思います。
DynamoDBとはNoSQLのDBでRDSのようなRDB(リレーショナルデータベース)とは異なります。
RDSとDynamoDBの違いについては以下の記事で詳しくご紹介しておりますので、そちらをご覧ください。

で、今回はそのDynamoDBにデータをインポートする方法のご紹介です。
DynamoDBへのインポートについて、AWSで公開されている方法としては
Data Pipeline等を使う方法があるのですが、もう少しサクッと行う方法はないか?
CSVファイルを使って簡単にDynamoDBへ読み込ませる方法は無いか?
そう思いまして、調査した結果をまとめたいと思います。
DynamoDBへデータをインポートする方法
上記でも述べたように、DynamoDBへデータをインポートする方法としてAWS Data Pipelineを利用した方法が一般的です。
概要としては以下の通りです。
・S3バケットにインポートデータを格納する
・AWS Data Pipelineを利用してS3バケットのデータをDynamoDBへインポートする
但しこの方法、Data Pipelineを利用したことが無い場合、
ちょっとハードルが高いですよね?
もっと簡単にCSVファイルからインポートできるのが理想だと思います。
CSVファイルからDynamoDBへインポートする方法
というわけで前置きが長くなりましたが、今回はとあるツールを使った方法をご紹介します。
このツールは、CSVファイルに書かれているレコードを一件一件aws cliを利用したコマンドへ変換し、そのコマンドを一つのシェルファイルにまとめ、そのシェルを実行することで自動的にDynamoDBへデータを入れてくれるツールです。
<ツール使用の大まかな流れ>
- CSVファイルのヘッダーをフォーマット修正する
- ツールを使ってCSVファイルからシェルを作成する
- シェルを実行する
これでDynamoDBへデータインポート完了です。
ツール使用の準備
さて、このツールを利用するには以下の準備が必要となります。
Python3のインストール
こちらからPython3をダウンロードし、インストールします
Pandasのインストール
Python3をインストールすると、pipコマンドが利用できますので、以下のコマンドにてPandasをインストールします
1 |
pip install pandas |
aws cliをインストール
Macの場合は以下のコマンドでインストール可能です
1 |
brew install aws-cli |
アクセスキーとシークレットアクセスキーの登録
インポート対象のDynamoDBテーブルを保有しているAWSアカウントのアクセスキーとシークレットアクセスキーを端末に登録していない場合、登録します。
以下のような感じになります。
※[アクセスキー]と[シークレットアクセスキー]は適宜変更してください。
1 2 3 4 5 6 |
aws configure AWS Access Key ID [None]: [アクセスキー] AWS Secret Access Key [None]: [シークレットアクセスキー] Default region name [None]: ap-northeast-1 Default output format [None]: json |
これで環境の準備は完了です。
ツールの使用方法
それでは本格的にツールの使用についてご説明させていただきます。
⑴CSVファイルのヘッダーを変更する
まずDynamoDBのテーブル構成に合わせてインポート対象のCSVファイルのヘッダーを変更します。
例えば以下のようなテーブル構成だった場合、
インポート対象のCSVファイルは以下のようなルールに則って修正します。
・列タイトルはテーブルの属性名と一緒にする
・文字列なら(S)、数値なら(N)
(2)ツールのソースをクローンしてくる
こちらをお使いください。
(3)コマンドを実行する
実行ファイルのディレクトリ内へ行き、以下のコマンドを実行します。
1 |
python create_insert_command.py [csvファイル名] [インポート先テーブル名] |
注意すべきは、CSVファイルをcreate_insert_command.pyファイルと同じディレクトリ内に入れ、第一引数にファイル名(.csvを抜く)、第二引数にインポート先となるDynamoDBのテーブル名とすることです。
例えば、CSVファイル名が「importdata.csv」、テーブル名が「testtable」だったら
1 |
python create_insert_command.py importdata testtable |
(4)出力されたシェルファイルを実行する
同フォルダ内にシェルファイルが出力されますので、以下のようなコマンドでそのファイルを実行します。
例えばシェルファイル名が「testtable_import_20200321101539.sh」の場合、以下のようなコマンドとなります。
1 |
sh ./testtable_import_20200321101539.sh |
大量のデータですと時間がかかりますが、100件程度でしたら数分でインポートが完了致します。
まとめ
DynamoDBは今やAWSの人気サービスの一つとなり、非常に多くの方が利用されています。
今回は手軽にできるDynamoDBのCSVインポート方法をご紹介させていただきました。
件数が多くなると、多少時間はかかると思いますが、そこまでデータ量が多くなく、
とりあえず簡単にインポートしたいという時にお使いください。
以上、ひでさんでした!