Edited at

【AWS】DynamoDBにDataPipeline以外でのデータインポート

More than 3 years have passed since last update.

今までDynamoDBに対してデータを取り込む際、

データ件数が少なくてもDataPipelineを毎回使っていました。

ですが、DataPipelineも何度も使うとお金がかかってくるので

他に一括でデータを入れる方法がないか考えました。


事前準備


AWS CLIのインストール

コマンドラインからAWSを操作するためのAWS CLIをインストールします。

今回はEC2から行うため、Amazon Linux上から行います。

動作環境としてPythonが必要なため、インストールします。


python_install

$ sudo yum install python-setuptools

$ sudo easy_install pip

インストールしたpipからawscliをインストールします。


awscli_install

$ sudo pip install awscli


インストール後、aws --versionでバージョン確認ができればOKです。


AWS CLIの基本設定

CLIからアクセスするための、IAMユーザを作成し

アクセスキーと、シークレットアクセスキーを取得します。

その後、以下のコマンドでCLIのコンフィグを設定します。


CLI

$ aws configure

AWS Access Key ID [None]: ****************MYZA
AWS Secret Access Key [None]:****************Vz+l
Default region name [None]: ap-northeast-1
Default output format [None]: text

Default regionはデフォルトで利用するリージョンをせってします。

Default output formatはCLIの実行結果を出力する際の、ファイル形式を設定します。

今回はtextにしますが、json、tableも設定可能です。

設定したconfigはホームディレクトリの.awsディレクトリに保管されます。


CLI操作

awsのコマンドからJSON形式で登録が出来る


CLI

aws dynamodb put-item --table-name <テーブル名> --item '<JSON>' --return-consumed-capacity TOTAL


JSONの形式はDataPipelineで使用したものでOK


実行した感想

今のところ、1回のコマンドで1行分のJSONしか読み込み方がわからなかったので

とりあえず、行数分コマンドをExcelで生成して一気に流してみました。

100件とかその程度のデータなら、コマンドのほうがよっぽど早い

DataPipeline使うにしても行数分のJSONデータは作らないといけないので、

データの準備は変わらないし件数が少ない場合はDataPipelineよりコマンドかな。

DataPipelineだとインスタンスの起動時間とかで結構時間もかかる。

ただ、1000件以上のデータだとちょっと時間がかかる。。。

ひょっとしたらこっちはDataPipelineのが早いかもしれない。

ユニットは書き込みに15振ってあるけど、3ぐらいしか使えてないし、

もっとコマンドに付け足しで効率よくユニット使えれば早くなるかもです。


まとめ

今日やりたかった事は、データ件数が少なくてもDataPipelineを

使っていることに対するコスト削減なのでとりあえず完了です。

ユニットをもうすこし効率よく使えないかは今後の課題にします。