2016-05-24 11 views
3

Ich versuche, einen Datensatz in DynamoDB einzufügen, der den Trigger "Vor Anmeldung" des Cognito-Benutzerpools auslöst.AWS Lambda-Fehler bei Cognito-Benutzerpool-Trigger

Lambda-Funktion ist recht einfach zu Testzwecken, aber es gibt immer ein Fehler im Client-Anwendung auf AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool.signUp Aufruf

Use Case 1

Lambda Körper:

console.log('Received event:', JSON.stringify(event, null, 2)); 

Ergebnis:

InvalidLambdaResponseException: Invalid lambda function output : Invalid JSON 

Anwendungsfall 2

Lambda Körper:

callback("null", "success"); 

Ergebnis:

InvalidLambdaResponseException: Invalid lambda function output : Invalid JSON 

Anwendungsfall 3

Lambda Körper:

new AWS.DynamoDB.DocumentClient().put(params, callback); 

Ergebnis:

InvalidLambdaResponseException: Invalid cognito sign in version. Version should be 1 

So, irgendwelche Ideen, was könnte falsch sein?

Könnte der letzte Fehler mit dem Beta-Status des Cognito-Benutzerpools zusammenhängen?

P.S. Ich werde bei Bedarf weitere Details zur Verfügung stellen. Danke im Voraus.

Antwort

5

Sie tun dies in node.js und der Fehler zeigt an, dass Sie die Quelle des erwarteten Dienstereignisses nicht zurückgeben.

Sie sollten context.done() aufrufen, wenn Ihre Lambda-Funktion die Ausführung beendet. In jeder der Triggerquellen, die vom Cognito User Pool-Dienst generiert werden, können Sie nur den "Antwort" -Teil der Quelle bearbeiten. Beispiel: Flag "autoConfirmUser" in der Triggerquelle "PreSignUp".

Schauen Sie sich die Beispiele in unserem developer guide an, um mehr Details dazu zu erfahren.

+0

Ja, genau.Ich erinnere mich, dass ich irgendwo gelesen habe, dass ich mit "Kontext" umgehen muss, aber nach tausend Seiten mit verschiedenen Dokumentationen ist es schon irgendwie ein Durcheinander im Kopf :) Vielen Dank für Ihre Hilfe! – Stanislau

+0

@Stanislau - Ich bin mit dem genauen Problem konfrontiert, während ich versuche, Benutzerdaten zu dynamodb auf dem Nachbestätigungstrigger im Benutzerpool einzufügen. Können Sie mir bitte sagen, wie Sie das lösen? –

+1

@Asa - Also, wie Chetan in seiner Antwort erwähnte, macht 'context.done()' die Aufgabe. In Ihrer Lambda-Funktion müssen Sie nur entweder 'context.done (null, event)' oder 'context.done (err)' aufrufen (zB 'exports.handler = (event, context) => {" Ihr Code here "; context.done (null, event)}}' – Stanislau

0

Try Rückkehr callback("null", event);

Dies sollte Ihr Problem lösen.

2

@ user3479125 Um dasselbe in Python zu tun, geben Sie einfach ein Ereignis wie es ist oder mit Änderungen in den Datensätzen zurück.

Dieser Code soll zwischen dem mobilen Gerät und Cognito laufen, damit er das Ereignis ändern kann und es zurückgeben sollte, damit das Sync-Ereignis erfolgreich beendet wird.

Einige weitere Erklärungen here

+0

Danke, Mykhail, große Hilfe – kal