Personalizzazione dei flussi di lavoro con Amazon Cognito Events - Amazon Cognito

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Personalizzazione dei flussi di lavoro con Amazon Cognito Events

Se non hai mai usato Amazon Cognito Sync, utilizza AWS AppSync. Come Amazon Cognito Sync, AWS AppSync è un servizio per la sincronizzazione dei dati delle applicazioni tra dispositivi.

Consente di sincronizzare i dati dell'utente come le preferenze dell'app o lo stato del gioco. Inoltre estende queste funzionalità consentendo a più utenti di sincronizzare e collaborare in tempo reale su dati condivisi.

Amazon Cognito Events ti consente di eseguire una AWS Lambda funzione in risposta a eventi importanti in Amazon Cognito. Amazon Cognito lancia l'evento trigger di sincronizzazione quando viene sincronizzato un set di dati. Puoi utilizzare l'evento del trigger di sincronizzazione per eseguire un'azione quando un utente aggiorna i dati. La funzione è in grado di valutare e, facoltativamente, modificare i dati prima che siano archiviati nel cloud e sincronizzati negli altri dispositivi dell'utente. Questa funzione è utile per convalidare i dati provenienti dal dispositivo prima che siano sincronizzati negli altri dispositivi dell'utente o per aggiornare altri valori nel set di dati in base ai dati in entrata, come l'attribuzione di un riconoscimento quando un giocatore raggiunge un nuovo livello.

Le fasi di seguito ti guideranno attraverso la configurazione di una funzione Lambda che viene eseguita ogni volta che il set di dati di Amazon Cognito viene sincronizzato.

Nota

Quando utilizzi gli eventi di Amazon Cognito, puoi usare solo le credenziali ottenute da identità Amazon Cognito. Se hai una funzione Lambda associata, ma chiami UpdateRecords con le credenziali AWS dell'account (credenziali dello sviluppatore), la tua funzione Lambda non verrà richiamata.

Creazione di una funzione in AWS Lambda

Per integrare Lambda con Amazon Cognito, per prima cosa hai bisogno di creare una funzione in Lambda. A tale scopo:

Selezione della funzione Lambda in Amazon Cognito
  1. Apri la console Lambda.

  2. Fai clic su Create a Lambda function (Crea una funzione Lambda).

  3. Nella schermata Seleziona progetto, cerca e seleziona "cognito-sync-trigger.»

  4. Nella schermata Configure event sources (Configura origini eventi), lascia il tipo di origine impostato su "Cognito Sync Triggering" ("Attivazione della Sincronizzazione di Cognito") e seleziona il tuo pool di identità. Fai clic su Next (Successivo).

    Nota

    Quando si configura un trigger Amazon Cognito Sync all'esterno della console, è necessario aggiungere autorizzazioni basate sulle risorse Lambda per consentire ad Amazon Cognito di richiamare la funzione. Puoi aggiungere questa autorizzazione dalla console Lambda (vedi Utilizzo delle politiche basate sulle risorse per AWS Lambda) o utilizzando l'operazione Lambda. AddPermission

    Esempio di policy basate su risorse Lambda

    La seguente policy AWS Lambda basata su risorse garantisce ad Amazon Cognito una capacità limitata di richiamare una funzione Lambda. Amazon Cognito può richiamare la funzione solo per conto del pool di identità nella aws:SourceArn condizione e dell'account nella condizione aws:SourceAccount.

    { "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. Nella schermata Configure function (Configura funzione), inserisci un nome e una descrizione per la funzione. Lascia il Runtime impostato su "Node.js". Lascia il codice invariato per l'esempio. L'esempio predefinito modifica i dati in fase di sincronizzazione. Registra solo il fatto che l'evento trigger di Amazon Cognito Sync si è verificato. Lascia il nome del gestore impostato su "index.handler." Per Ruolo, seleziona un IAM ruolo che concede al codice l'autorizzazione all'accesso. AWS Lambda Per modificare i ruoli, consulta la IAM console. Lascia invariate le impostazioni avanzate. Fai clic su Next (Successivo).

  6. Nella schermata Review (Revisione) rivedi i dettagli e fai clic su Create function (Crea funzione). La pagina successiva mostra la tua nuova funzione Lambda.

Ora che disponi di una funzione appropriata scritta in Lambda, devi scegliere quella funzione come gestore dell'evento del trigger di Amazon Cognito Sync. La seguente procedura ti guiderà attraverso il processo.

Dalla home page della console:

  1. Fai clic sul nome del pool di identità per cui desideri configurare Amazon Cognito Events. Viene visualizzata la pagina Dashboard (Pannello di controllo) per il tuo pool di identità.

  2. Nell'angolo in alto a destra della pagina Dashboard (Pannello di controllo), fai clic su Edit identity pool (Modifica pool di identità). Viene visualizzata la pagina di gestione delle identità federate.

  3. Scorri verso il basso e fai clic su Cognito Events (Eventi di Cognito) per espandere l'operazione;

  4. Nel menu a discesa del trigger di sincronizzazione, seleziona la funzione Lambda che desideri attivare quando si verifica un evento di sincronizzazione.

  5. Fai clic su Salva modifiche.

Ora, la tua funzione Lambda verrà eseguita ogni volta che un set di dati è sincronizzato. La sezione seguente spiega in che modo puoi leggere e modificare i dati nella tua funzione durante la loro fase di sincronizzazione.

Scrittura di una funzione Lambda per trigger di sincronizzazione

I trigger di sincronizzazione seguono il modello di programmazione usato dall'interfaccia del fornitore di servizi. Amazon Cognito fornisce input per la funzione Lambda nel seguente formato. JSON

{ "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 richiede il valore restituito della funzione nello stesso formato dell'input.

Quando scrivete funzioni per l'evento Sync Trigger, osserva quanto segue:

  • Quando Amazon Cognito chiama la tua funzione Lambda durante UpdateRecords, la funzione deve rispondere entro 5 secondi. In caso contrario, il servizio Amazon Cognito Sync genera un'eccezione LambdaSocketTimeoutException. Non puoi aumentare il valore di timeout.

  • Se ricevi un'eccezione LambdaThrottledException, ritenta l'operazione di sincronizzazione per aggiornare i record.

  • Amazon Cognito fornisce tutti i record presenti nel set di dati come input per la funzione.

  • I record che vengono aggiornati dall'utente dell'app hanno il campo op impostato come replace. I record eliminati hanno il campo op impostato come remove.

  • Puoi modificare tutti i record, anche se non sono stati aggiornati dall'utente dell'applicazione.

  • Tutti i campi tranne i datasetRecords sono di sola lettura. Non modificarli. Se si modificano questi campi, non è possibile aggiornare i record.

  • Per modificare il valore di un record, è sufficiente aggiornare il valore e impostare il campo op su replace.

  • Per eliminare un record o impostare il campo op su remove, imposta un valore nullo.

  • Per aggiungere un record, aggiungete un nuovo record all' datasetRecords array.

  • Amazon Cognito ignora qualsiasi record omesso nella risposta quando aggiorna il record.

Funzione Lambda di esempio

Ecco un esempio di funzione Lambda che mostra come accedere, modificare e rimuovere i dati.

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); };