0

Ich lerne die AWS-Dienste für einen Anwendungsfall. Nachdem ich die Dokumentation durchgelesen hatte, kam mir der einfache Fluss. Ich möchte Daten in die Kinesis-Streams aufnehmen, indem ich die Streams API und die KPL benutze. Ich verwende die putRecord-Beispielmethode, um Daten in die Streams aufzunehmen. Ich bin die Einnahme der diese JSON in den Stream -Kinesis Lambda DynamoDB

{"userid":1234,"username":"jDoe","firstname":"John","lastname":"Doe"} 

Sobald die Daten aufgenommen wird i die folgende Antwort in putRecordResult bekommen -

Put Result :{ShardId: shardId-000000000000,SequenceNumber: 49563097246355834103398973318638512162631666140828401666} 
Put Result :{ShardId: shardId-000000000000,SequenceNumber: 49563097246355834103398973318645765717549353915876638722} 
Put Result :{ShardId: shardId-000000000000,SequenceNumber: 49563097246355834103398973318649392495008197803400757250} 

Jetzt habe ich eine Lambda-Funktion schreiben, um diese Daten zu erhalten, und drücken Sie in eine DynamoDB-Tabelle. Hier ist meine Lambda-Funktion -

console.log('Loading function'); 
var AWS = require('aws-sdk'); 
var tableName = "sampleTable"; 
var doc = require('dynamodb-doc'); 
var db = new doc.DynamoDB(); 

exports.handler = (event, context, callback) => { 
    //console.log('Received event:', JSON.stringify(event, null, 2)); 
    event.Records.forEach((record) => { 
     // Kinesis data is base64 encoded so decode here 
     const payload = new Buffer(record.kinesis.data, 'base64').toString('ascii'); 
     console.log('Decoded payload:', payload); 
     var userid = event.userid; 
     var username = event.username; 
     var firstname = event.firstname; 
     console.log(userid + "," + username +","+ firstname); 

     var item = { 
      "userid" : userid, 
      "username" : username, 
      "firstname" : firstname 
     }; 

     var params = { 
      TableName : tableName, 
      Item : item 
     }; 
     console.log(params); 

     db.putItem(params, function(err, data){ 
      if(err) console.log(err); 
      else console.log(data); 
     }); 

    }); 
    callback(null, `Successfully processed ${event.Records.length} records.`); 
}; 

Irgendwie habe ich nicht in der Lage bin, die console.logs in der Lambda-Funktionen Ausführung zu sehen. Ich sehe auf der Streams-Seite, dass es putRecord in den Stream gegeben haben und auch bekommen, aber irgendwie kann ich nichts auf der Lambdafunction-Seite noch in der DynamoDB-Tabelle sehen.

Ich habe eine IAM-Richtlinie für den Java-Code für die Aufnahme der Daten in Kinesis, eine andere für die Lambda-Funktion, die Lambda-Kinesis-Ausführungsrolle ist und eine Richtlinie für die DynamoDB Daten in die Tabellen aufnehmen.

Gibt es ein Tutorial, das zeigt, wie es richtig gemacht wird? Ich habe das Gefühl, dass ich viele Punkte in diesem Prozess vermisse, zum Beispiel wie man all diese IAM-Richtlinien verbindet und synchronisiert, so dass die Daten, wenn sie in den Stream eingegeben werden, von Lambda verarbeitet werden und in Dynamo landen.

Alle Hinweise und Hilfe wird sehr geschätzt.

+1

Wird Ihre Lambda-Funktion überhaupt aufgerufen? Sie erwähnen das nicht, also frage ich mich, ob Sie das AWS Lambda Event aktiviert haben, das Daten von Kinesis an Ihre Funktion weitergibt: http://docs.aws.amazon.com/lambda/latest/dg/with-kinesis -beispiel-configure-event-source.html – devonlazarus

+0

Vielen Dank für den Kommentar. Ja, ich habe den Kinesis-Stream auf der Registerkarte "Event Sources" der Lambda-Funktion hinzugefügt und zeigt State-enabled und Details as an - Batchgröße: 100, Letztes Ergebnis: OK. Wenn ich Test Event mit Kinesis Sample Event Template und Test konfiguriere gibt es Fehler bei der Angabe von Item: {id: undefiniert, Benutzername: undefiniert, Vorname: undefiniert} – Dan

+0

Wenn du oben stehst, ist eine direkte Kopie des Codes, den du benutzt referenzieren Sie 'event.userid', aber Sie sollten' payload.userid' verwenden. Sie haben den Kinesis-Datensatz in die Variable 'Nutzlast' dekodiert. – devonlazarus

Antwort

1

Wenn der obige Code eine direkte Kopie des von Ihnen verwendeten Codes ist, verweisen Sie auf event.userid, aber Sie sollten payload.userid verwenden. Sie haben den Kinesis-Datensatz in die Payload-Variable decodiert.

0

Können Sie Lambda-Funktion verwenden

1.Erstellen IAM Rolle für beide Kinesis und DynamoDB

2.Now Erstellen Sie eine Lambda-Funktion aus blauem Druck von DynamoDB-Prozess-Stream

3.Select die Ausführung Rolle, die wir von IAM erstellt

Funktion 4.Click erstellen nun den folgenden Code

Go Codeabschnitt zu bearbeiten und schreiben