今までDynamoDBに対してデータを取り込む際、
データ件数が少なくてもDataPipelineを毎回使っていました。
ですが、DataPipelineも何度も使うとお金がかかってくるので
他に一括でデータを入れる方法がないか考えました。
事前準備
AWS CLIのインストール
コマンドラインからAWSを操作するためのAWS CLIをインストールします。
今回はEC2から行うため、Amazon Linux上から行います。
動作環境としてPythonが必要なため、インストールします。
$ sudo yum install python-setuptools
$ sudo easy_install pip
インストールしたpipからawscliをインストールします。
$ sudo pip install awscli
インストール後、aws --version
でバージョン確認ができればOKです。
AWS CLIの基本設定
CLIからアクセスするための、IAMユーザを作成し
アクセスキーと、シークレットアクセスキーを取得します。
その後、以下のコマンドで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形式で登録が出来る
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を
使っていることに対するコスト削減なのでとりあえず完了です。
ユニットをもうすこし効率よく使えないかは今後の課題にします。