2016-05-03 9 views
4

APIゲートウェイをDynamoDBのプロキシとして使用する際に問題が発生しました。AWS APIゲートウェイはJSONをDynamoDBに格納します

基本的には、保存したいデータの構造を知っていればうまく動作しますが、ペイロードの構造に関係なくダイナミックにすることはできません。

APIゲートウェイをDynamoDBのプロキシとして使用する方法を説明するWebサイトが多数あります。 私が見つけたものはどれもJSONオブジェクトの保存方法を説明していません。

基本的に私は私のAPIエンドポイントにこのJSONを送信:

{ 
    "entryId":"abc", 
    "data":{ 
     "key1":"123", 
     "key2":123 
    } 
} 

私は次のテンプレートを使用してマッピングする場合は、データが正しく

{ 
    "TableName": "Events", 
    "Item": { 
     "entryId": { 
      "S": "abc" 
     }, 
     "data": { 
      "M": { 
       "key1": { 
       "S": "123" 
       }, 
       "key2": { 
       "N": "123" 
       } 
      } 
     } 
    } 
} 

私のデータベースに入れますが、私はしないでください"データ"の構造を知っているので、なぜマッピングを動的にするか、より良いものにしたいのですが、私はマッピングを全く避けたいと思います。

私はそれを動的にするために管理が、すべての私のエントリが今String型である:

 "data": { "M" : { 
     #foreach($key in $input.path('$.data').keySet()) 
     "$key" : {"S": "$input.path('$.data').get($key)"}#if($foreach.hasNext),#end 
     #end } 
       } 

が動的に型を取得することが可能ですか? API Gatewayのマッピングがまだどのように機能しているのかよくわかりません。

ありがとうございました。

セブ

答えて

1

あなたはDynamoDBのに挿入する際にマッピングのいくつかの並べ替えを避けるために予定されていません。私は、サービスプロキシの代わりにラムダ関数を使用して、Dynamoのスキーマにデータをマッピングする際の制御と柔軟性を高めることをお勧めします。

+0

実際にラムダを使用して、覚えていればputitemの代わりにputを使って項目を配置することができました。 しかし私は本当にマッピング問題のためだけにラムダを避けたいと思っています。特に、多数のエントリを扱いたいので、実行するラムダプロセスをたくさんトリガしたくないので – Seb

-1

CloudWatchログを有効にして、変換が予想された後にペイロードを検証できます。また、AWS API Gatewayコンソールのテスト起動機能を使用して、マッピングの仕組みを調べることもできます。

ここに、Amazon APIゲートウェイをDynamoDBのプロキシとして使用するためのブログがあります。 https://aws.amazon.com/blogs/compute/using-amazon-api-gateway-as-a-proxy-for-dynamodb/

関連する問題