Amazon-Cognito-Ereignisse - Amazon Cognito

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon-Cognito-Ereignisse

Wenn Amazon Cognito Sync für Sie neu ist, verwenden Sie zuerst AWS AppSync. Wie Amazon Cognito Sync ist AWS AppSync ein Service zum Synchronisieren von Anwendungsdaten zwischen verschiedenen Geräten.

Es ermöglicht Benutzerdaten wie App-Einstellungen oder Spielstatus synchronisiert werden. Darüber hinaus erweitert es diese Möglichkeiten, indem mehrere Benutzer gemeinsam genutzte Daten synchronisieren und diese in Echtzeit zusammen nutzen können.

Mit Amazon-Cognito-Ereignissen können Sie eine AWS Lambda-Funktion als Reaktion auf wichtige Ereignisse in Amazon Cognito ausführen. Amazon Cognito löst das Sync-Auslöser-Ereignis aus, wenn ein Datensatz synchronisiert wird. Sie können das Sync Trigger-Ereignis verwenden, um eine Aktion auszuführen, wenn ein Benutzer Daten aktualisiert. Die Funktion kann die Daten bewerten und optional manipulieren, bevor sie in der Cloud gespeichert und auf den anderen Geräten des Benutzers synchronisiert werden. Dies ist nützlich zum Validieren der Daten, die vom Gerät kommen, bevor sie mit den anderen Geräten des Benutzers synchronisiert werden, oder zum Aktualisieren anderer Werte im Datensatz basierend auf eingehenden Daten, wie z. B. die Ausstellung einer Auszeichnung, wenn ein Spieler eine neue Ebene erreicht.

Die nachfolgenden Schritte führen Sie durch die Einrichtung einer Lambda-Funktion, die bei jeder Synchronisierung eines Amazon-Cognito-Datensatzes ausgeführt wird.

Anmerkung

Bei der Verwendung von Amazon-Cognito-Ereignissen können Sie nur die Anmeldeinformationen verwenden, die Sie von der Amazon-Cognito-Identität erhalten haben. Wenn Sie über eine zugewiesene Lambda-Funktion verfügen, jedoch UpdateRecords mit AWS-Konto-Anmeldeinformationen (Entwickler-Anmeldeinformationen) aufrufen, wird Ihre Lambda-Funktion nicht aufgerufen.

Erstellen einer Funktion in AWS Lambda

Um Lambda in Amazon Cognito zu integrieren, müssen Sie zunächst eine Funktion in Lambda erstellen. Hierzu gehen Sie wie folgt vor:

Auswählen der Lambda-Funktion in Amazon Cognito
  1. Öffnen Sie die Lambda-Konsole.

  2. Klicken Sie auf Create a Lambda function.

  3. Auf dem Bildschirm "Blueprint auswählen" suchen und wählen Sie "Cognito-Sync-Trigger".

  4. Auf dem Bildschirm "Ereignisquellen konfigurieren" lassen Sie den Ereignisquellentyp auf "Cognito-Sync-Trigger" eingestellt, und wählen Sie den Identitätspool aus. Klicken Sie auf Weiter.

    Anmerkung

    Wenn Sie einen Amazon-Cognito-Sync-Trigger außerhalb der Konsole konfigurieren, müssen Sie ressourcenbasierte Berechtigungen für Lambda hinzufügen, damit Amazon Cognito die Funktion aufrufen kann. Sie können diese Berechtigung von der Lambda-Konsole aus hinzufügen (siehe Verwenden ressourcenbasierter Richtlinien für AWS Lambda oder über die Lambda-Funktion AddPermission.

    Beispiel für ressourcenbasierte Lambda-Richtlinie

    Die folgende ressourcenbasierte AWS Lambda-Richtlinie gewährt Amazon Cognito eine eingeschränkte Möglichkeit, eine Lambda-Funktion aufzurufen. Amazon Cognito kann diese Rolle nur aufrufen, wenn es dies im Namen des Identitätspools mit der Bedingung aws:SourceArn und im Namen des Kontos mit der Bedingung aws:SourceAccount durchführt.

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-cognito-my-function", "Effect": "Allow", "Principal": { "Service": "cognito-sync.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "<your Lambda function ARN>", "Condition": { "StringEquals": { "AWS:SourceAccount": "<your account number>" }, "ArnLike": { "AWS:SourceArn": "<your identity pool ARN>" } } } ] }
  5. Auf dem Bildschirm "Funktion konfigurieren" geben Sie einen Namen und eine Beschreibung für Ihre Funktion ein. Lassen Sie "Runtime" auf "Node.js" eingestellt. Lassen Sie den Code für unser Beispiel unverändert. Das Standardbeispiel nimmt keine Änderungen an den synchronisierten Daten vor. Es protokolliert lediglich die Tatsache, dass das Amazon-Cognito-Sync-Auslöser-Ereignis aufgetreten ist. Lassen Sie den Handler-Namen "index.handler" unverändert. Für „Rolle“ wählen Sie eine IAM-Rolle, die Ihnen Code-Berechtigung für den Zugriff auf gewährt AWS Lambda. Angaben zum Ändern von Rollen finden Sie auf der IAM-Konsole. Lassen Sie die erweiterten Einstellungen unverändert. Klicken Sie auf Weiter.

  6. Auf dem Bildschirm "Prüfen" überprüfen Sie die Details und klicken Sie auf "Funktion erstellen". Auf der nächsten Seite wird Ihre neue Lambda-Funktion angezeigt.

Sie haben nun eine geeignete Funktion in Lambda geschrieben. Nun müssen Sie diese Funktion als Handler für das Amazon-Cognito-Sync-Auslöser-Ereignis auswählen. In den nachfolgenden Schritten wird dieser Prozess beschrieben.

Auf der Startseite der Konsole:

  1. Klicken Sie auf den Namen des Identitätspools, für den Sie Amazon-Cognito-Ereignisse einrichten möchten. Die Seite "Dashboard" für Ihren Identitätspool wird angezeigt.

  2. Klicken Sie in der oberen rechten Ecke der Seite Dashboard auf Manage Federated Identities. Die Seite Manage Federated Identities wird angezeigt.

  3. Führen Sie einen Bildlauf nach unten durch und klicken Sie auf "Cognito Events", um es zu erweitern.

  4. Wählen Sie im Dropdown-Menü „Sync-Auslöser“ die Lambda-Funktion aus, die Sie beim Eintreten eines Sync-Ereignisses auslösen möchten.

  5. Klicken Sie auf Save Changes.

Ihre Lambda-Funktion wird jetzt jedes Mal ausgeführt, wenn ein Datensatz synchronisiert wird. Im nächsten Abschnitt wird erläutert, wie Sie die Daten in Ihrer Funktion lesen und ändern, während sie synchronisiert werden.

Schreiben einer Lambda-Funktion für Sync-Auslöser

Sync-Auslöser befolgen das Programmierungsmuster der Dienstanbieter-Schnittstellen. Amazon Cognito stellt Ihrer Lambda-Funktion die Eingabe im folgenden JSON-Format zur Verfügung.

{ "version": 2, "eventType": "SyncTrigger", "region": "us-east-1", "identityPoolId": "identityPoolId", "identityId": "identityId", "datasetName": "datasetName", "datasetRecords": { "SampleKey1": { "oldValue": "oldValue1", "newValue": "newValue1", "op": "replace" }, "SampleKey2": { "oldValue": "oldValue2", "newValue": "newValue2", "op": "replace" },.. } }

Amazon Cognito erwartet den Rückgabewert der Funktion im gleichen Format wie die Eingabe.

Beachten Sie beim Schreiben von Funktionen für das Sync-Auslöser-Ereignis Folgendes:

  • Wenn Amazon Cognito die Lambda-Funktion während UpdateRecords aufruft, muss die Funktion innerhalb von 5 Sekunden reagieren. Andernfalls generiert der Amazon-Cognito-Sync-Service eine LambdaSocketTimeoutException-Ausnahme. Sie können diesen Timeout-Wert nicht erhöhen.

  • Wenn Ihnen eine LambdaThrottledException-Ausnahme angezeigt wird, versuchen Sie den Synchronisierungsvorgang erneut, um die Datensätze zu aktualisieren.

  • Amazon Cognito stellt alle Datensätze im Datensatz als Eingabe für die Funktion zur Verfügung.

  • Zeichnet auf, dass in den Benutzeraktualisierungen in der App das op-Feld auf replace festgelegt ist. In den gelöschten Datensätzen ist das op-Feld auf remove festgelegt.

  • Sie können jeden Datensatz ändern, selbst wenn der Benutzer der App den Datensatz nicht aktualisiert.

  • Alle Felder mit Ausnahme von datasetRecords sind schreibgeschützt. Ändern Sie diese nicht. Wenn Sie diese Felder ändern, können Sie die Datensätze nicht aktualisieren.

  • Um den Wert eines Datensatzes zu ändern, aktualisieren Sie den Wert und setzen Sie op auf replace.

  • Zum Entfernen eines Datensatzes setzen Sie op auf remove oder setzen den Wert auf Null.

  • Um einen Datensatz hinzuzufügen, fügen einen neuen Datensatz zum datasetRecords-Array hinzu.

  • Amazon Cognito ignoriert jeden ausgelassenen Datensatz in der Antwort, wenn Amazon Cognito den Datensatz aktualisiert

Beispiel-Lambda-Funktion

Das folgende Beispiel einer Lambda-Funktion zeigt das Abrufen, Modifizieren und Entfernen von Daten.

console.log('Loading function'); exports.handler = function(event, context) { console.log(JSON.stringify(event, null, 2)); //Check for the event type if (event.eventType === 'SyncTrigger') { //Modify value for a key if('SampleKey1' in event.datasetRecords){ event.datasetRecords.SampleKey1.newValue = 'ModifyValue1'; event.datasetRecords.SampleKey1.op = 'replace'; } //Remove a key if('SampleKey2' in event.datasetRecords){ event.datasetRecords.SampleKey2.op = 'remove'; } //Add a key if(!('SampleKey3' in event.datasetRecords)){ event.datasetRecords.SampleKey3={'newValue':'ModifyValue3', 'op' : 'replace'}; } } context.done(null, event); };