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
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
Apri la console Lambda.
Fai clic su Create a Lambda function (Crea una funzione Lambda).
Nella schermata Seleziona progetto, cerca e seleziona "cognito-sync-trigger.»
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 condizioneaws: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>
" } } } ] }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).
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:
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à.
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.
Scorri verso il basso e fai clic su Cognito Events (Eventi di Cognito) per espandere l'operazione;
Nel menu a discesa del trigger di sincronizzazione, seleziona la funzione Lambda che desideri attivare quando si verifica un evento di sincronizzazione.
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 comereplace
. I record eliminati hanno il campoop
impostato comeremove
.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
sureplace
.Per eliminare un record o impostare il campo
op
suremove
, 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); };