2016-10-28 1 views
1

Je suis actuellement en utilisant le modèle de mappage suivant pour transmettre des données envoyées à un point final API AWS Gateway to flux AWS Kinesis Firehose:AWS passerelle API et Kinesis Firehose Intégration: Ajout de données Additonal

{ 
    "DeliveryStreamName": "[STREAMNAME]", 
    "Record": { 
     "Data": "$util.base64Encode($input.body)" 
    } 
} 

Ce que je voudrais faire est: ajouter des informations à l'$input.body qui est codé comme le $context.identity.sourceIp du client qui fait la demande.

Comment puis-je faire cela lorsque la sortie transmise à Kinesis Firehose doit être codée en Base64? Idéalement, je voudrais que mes données qui sont affichées à Kinesis Firehose ressemblent à ceci:

{ 
    "x": 1, 
    "y": 2, 
    "z": 3, 
    ...,     // all the properties from the JSON-request by the client 
    "clientIp": "x.x.x.x" // property added by API-Gateway into client's object 
} 

Répondre

4

Après un peu plus creuser je réussi à obtenir ce qui suit pour travailler:

#set($inputRoot = $input.path('$')) 
#set($data = "{ 
    #foreach($key in $inputRoot.keySet()) 
    ""$key"": $input.json($key), 
    #end 
    ""clientIP"": ""$context.identity.sourceIp"", 
}") 
{ 
    "DeliveryStreamName": "[STREAMNAME]", 
    "Record": { 
     "Data": "$util.base64Encode($data)" 
    } 
} 

Je ne savais pas que vous pourriez faire un #foreach à l'intérieur d'un #set. Notez que vous devez également utiliser des guillemets doubles pour obtenir ce droit.