2017-12-12 5 views
0

APIゲートウェイのボディマッピングテンプレートを使用してdynamodbに複数の行を挿入するにはどうすればよいですか?APIゲートウェイを使用してdynamodbに複数のレコードを挿入する

私のコードへの入力は「xyz 1、abc 2」で、挿入する2行分の情報があります。

「abc 2」という2番目のレコードのみが格納されていますが、両方のレコードをテーブルに挿入します。以下は、私はこれに新たなんだ

#set($rawAPIData = $input.path('$')) 
#set ($bulk = $rawAPIData.split(",")) 
{ 
"TableName": "tablename", 
#foreach($records in $bulk) 
#set ($s = $records.split(" ")) 
"Item": { 
    "col1": { 
      "S": "$s.get(0)" 
    }, 
    "col2": { 
      "S": "$s.get(1)" 
    } 

} 
#if($foreach.hasNext), #end 
#end 
} 

を書かれているコードがあり、提案は本当に

答えて

0

This AWS guideがDynamoDBのためのプロキシとしてAPIゲートウェイを使用する方法を示し役立つだろう。それはあなたが取ろうとしているアプローチに似ています。あなたのAPIを,に複数の入力を分割するのではなく、一度に1行に集中させる方が良いかもしれません。たとえば、ガイドに記載されているものと同様の要求を送信するために、テンプレートをいくらか簡略化します。

例リクエストボディ

{ 
    "col1": "xyz", 
    "col2": "1" 
} 

テンプレート(あなたのテンプレートコードから派生):

{ 
    "TableName": "tablename", 
    "Item": { 
     "col1": { 
      "S": "$input.path('$.col1')" 
      }, 
     "col2": { 
      "S": "$input.path('$.col2')" 
     } 
    } 
} 

しかし、あなたが複数のアイテム上で動作に固執したい場合は、BatchWriteItemドキュメンテーションは読む価値があります。例の後、私はこれはあなたの体のテンプレートであるべきだと思う:

#set($rawAPIData = $input.path('$')) 
#set ($bulk = $rawAPIData.split(",")) 
{ 
    "RequestItems": { 
    "tablename": [ 
     #foreach($records in $bulk) 
     #set ($s = $records.split(" ")) 
     { 
     "PutRequest": { 
      "Item": { 
      "col1": { 
       "S": "$s.get(0)" 
      }, 
      "col2": { 
       "S": "$s.get(1)" 
      } 
      } 
     } 
     } 
    #if($foreach.hasNext), 
    #end 
    ] 
    } 
#end 
} 
0

私は@Gerandと同様のアプローチを使用しますが、私は、ラムダを使用して、それを解決しました。ここに作業コードがあります:

'use strict'; 
    const AWS = require("aws-sdk"); 
    const dynamodb = new AWS.DynamoDB(); 

exports.handler = (event, context, callback) => { 

var data=event.data; 
var bulk = data.split(","); 
var toSave = []; 
for(var i = 0; i < bulk.length; i++) { 
    var s=bulk[i].split(" "); 
    var item = { 
     "col1": { 
      S: s[0] 
    }, 
    "col2": { 
      S: s[1] 
    } 
    }; 
    toSave.push(item); 
} 

var items = []; 
for(var i = 0; i < toSave.length; i++) { 
    items[i] = { 
     PutRequest: { Item: toSave[i] } 
    } 
} 
var params = { 
    RequestItems: { 
     'table_name': items 
    } 
}; 
dynamodb.batchWriteItem(params, function(err, data) { 
     console.log("Response from DynamoDB"); 
     if(err) console.log(err); 
     else console.log(data); 
    }); 
}; 
関連する問題