何がしたい
DynamoDBに登録するデータがリスト形式で手元にあるとき、そのリストを読み込んでDynamoDBにPUTリクエストを送りたかったからスクリプトを書いたのでメモ
重い処理でもなんでもなかったからAWS Lambdaで動かしています
注意
単発使用のためのもので面倒だったのでCSVファイルも一緒にZIP化しています。
使用モジュール
- aws-sdk
- comma-separated-values
実装
index.js
'use strict';
var fs = require('fs');
var CSV = require("comma-separated-values");
var aws = require('aws-sdk');
var docClient = new aws.DynamoDB.DocumentClient({region: '### region ###'});
exports.handler = function (event, context) {
fs.readFile('./list.csv', 'utf8', function (err, data) {
var csv = new CSV(data, {header: true}).parse();
var len = csv.length;
var lim = 0;
for (var cnt = 0; cnt < len; cnt++) {
var item = {
column_1: String(csv[cnt].column_1),
column_2: String(csv[cnt].column_2),
column_3: String(csv[cnt].column_3)
};
var params = {
TableName: 'items',
Item: item
};
docClient.put(params, function (err, data) {
lim++;
if (err) {
console.log('[ERROR]',err);
if (len === lim){
context.succeed();
}
} else {
console.log('[INFO]',data);
if(len === lim){
context.succeed();
}
}
});
}
});
};
使用するリスト
list.csv
column_1,column_2,column_3
hoge,fuga,fugaga
こんな感じのヘッダー付きCSVを想定
さいごに
何回か使うならデータ格納先はS3にして、引っ張ってくるのが良いと思う。