2016-05-03 14 views
4

Ich habe ein Problem bei der Verwendung von API Gateway als Proxy für DynamoDB.AWS API-Gateway speichert JSON in DynamoDB

Grundsätzlich funktioniert es gut, wenn ich die Struktur der Daten kenne, die ich speichern möchte, aber ich kann es nicht schaffen, es ungeachtet der Nutzlaststruktur dynamisch zu machen.

Es gibt viele Websites, auf denen erläutert wird, wie API Gateway als Proxy für DynamoDB verwendet wird. Keiner, den ich gefunden habe, erklärt, wie man ein JSON-Objekt speichert.

Grundsätzlich ich dieses JSON meiner API-Endpunkt senden:

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

Wenn ich die folgende Vorlage Karte verwenden, die Daten in der Datenbank richtig

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

Allerdings setzen wird, weiß ich nicht Ich kenne die Struktur von "Daten". Deshalb möchte ich, dass das Mapping dynamisch ist, oder sogar noch besser. Ich möchte überhaupt kein Mapping vermeiden.

Ich schaffte es dynamisch zu machen, aber alle meine Einträge sind jetzt vom Typ String:

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

Ist es möglich, dynamisch den Typ zu bekommen? Ich bin mir nicht sicher, wie die API-Gateway-Zuordnung noch funktioniert.

Vielen Dank für Ihre Hilfe.

Seb

Antwort

1

Sie werden nicht irgendeine Art von Mapping zu vermeiden, wenn in DynamoDB einlegen. Ich würde empfehlen, eine Lambda-Funktion anstelle eines Dienstproxys zu verwenden, um Ihnen mehr Kontrolle und Flexibilität bei der Zuordnung der Daten zu Ihrem Dynamodb-Schema zu geben.

+0

In der Tat mit Lambda war ich in der Lage, den Artikel ohne Mapping setzen mit Put statt Putitem wenn ich mich gut erinnere. Allerdings möchte ich Lambda nur wegen eines Mapping-Problems vermeiden, zumal wir eine große Anzahl von Einträgen bearbeiten wollen und wir vermeiden möchten, dass so viele Lambda-Prozesse ausgelöst werden – Seb

Verwandte Themen