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.
Anpassen von Workflows mit Amazon Cognito Events
Wenn Amazon Cognito Sync für Sie neu ist, verwenden Sie zuerst AWS AppSync
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 Events 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 Ihnen eine Lambda-Funktion zugeordnet ist, Sie diese jedoch UpdateRecords
mit AWS Kontoanmeldedaten (Entwickleranmeldedaten) aufrufen, wird Ihre Lambda-Funktion nicht aufgerufen.
Eine Funktion erstellen 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
Öffnen Sie die Lambda-Konsole.
Klicken Sie auf Create a Lambda function.
Suchen Sie auf dem Bildschirm „Blueprint auswählen“ nach "“ und wählen Sie es auscognito-sync-trigger.
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 über die Lambda-Konsole (siehe Verwenden ressourcenbasierter Richtlinien für AWS Lambda) oder mithilfe des Lambda-Vorgangs hinzufügen. 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 Bedingungaws: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>
" } } } ] }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. Wählen Sie unter Rolle eine IAM Rolle aus, die Ihrem Code die Zugriffsberechtigung erteilt. AWS Lambda Informationen zum Ändern von Rollen finden Sie in der IAM Konsole. Lassen Sie die erweiterten Einstellungen unverändert. Klicken Sie auf Weiter.
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:
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.
Klicken Sie in der oberen rechten Ecke der Seite Dashboard auf Manage Federated Identities. Die Seite Manage Federated Identities wird angezeigt.
Führen Sie einen Bildlauf nach unten durch und klicken Sie auf "Cognito Events", um es zu erweitern.
Wählen Sie im Dropdown-Menü „Sync-Auslöser“ die Lambda-Funktion aus, die Sie beim Eintreten eines Sync-Ereignisses auslösen möchten.
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 Eingaben für Ihre Lambda-Funktion im folgenden JSON Format bereit.
{ "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 währenddessen Ihre Lambda-Funktion aufruft UpdateRecords, muss die Funktion innerhalb von 5 Sekunden antworten. 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 aufreplace
festgelegt ist. In den gelöschten Datensätzen ist dasop
-Feld aufremove
festgelegt.Sie können jeden Datensatz ändern, selbst wenn der Benutzer der App den Datensatz nicht aktualisiert.
Alle Felder außer dem 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
aufreplace
.Zum Entfernen eines Datensatzes setzen Sie
op
aufremove
oder setzen den Wert auf Null.Um einen Datensatz hinzuzufügen, fügen Sie dem Array einen neuen Datensatz hinzu. datasetRecords
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); };