As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Personalização de fluxos de trabalho com o Amazon Cognito Events
Se você for novo com o Amazon Cognito Sync, use o AWS AppSync
Ele permite que dados do usuário, como preferências de aplicações ou estado de jogos, sejam sincronizados. Ele também amplia essas capacidades ao permitir que vários usuários sincronizem e colaborem em tempo real com dados compartilhados.
O Amazon Cognito Events permite que você execute uma AWS Lambda função em resposta a eventos importantes no Amazon Cognito. O Amazon Cognito gera o evento Sync Trigger quando um conjunto de dados é sincronizado. Você pode usar o evento Sync Trigger para executar uma ação quando um usuário atualizar dados. A função pode avaliar e, opcionalmente, manipular os dados antes de serem armazenados na nuvem e sincronizados nos outros dispositivos do usuário. Isso será útil para validar os dados provenientes do dispositivo antes que eles sejam sincronizados com outros dispositivos do usuário ou para atualizar outros valores no conjunto de dados com base nos dados de entrada, como emitir um prêmio quando um jogador atinge um novo nível.
As etapas a seguir orientarão você durante a configuração de uma função Lambda executada toda vez que um conjunto de dados do Amazon Cognito for sincronizado.
nota
Ao usar eventos do Amazon Cognito, você só pode utilizar as credenciais obtidas no Amazon Cognito Identity. Se você tiver uma função Lambda associada, mas ligar UpdateRecords
com credenciais da AWS conta (credenciais de desenvolvedor), sua função Lambda não será invocada.
Criando uma função em AWS Lambda
Para integrar o Lambda ao Amazon Cognito, primeiro é necessário criar uma função no Lambda. Para fazer isso:
Selecionar a função Lambda no Amazon Cognito
Abra o console do lambda.
Clique em Create a Lambda function (Criar uma função Lambda).
Na tela Selecionar modelo, pesquise e selecione "”cognito-sync-trigger.
Na tela Configure event sources, deixe Event source type definido como "Cognito Sync Trigger" e selecione o grupo de identidades. Clique em Next.
nota
Ao configurar um acionador do Amazon Cognito Sync fora do console, você deve adicionar permissões baseadas em recursos do Lambda para permitir que o Amazon Cognito invoque a função. Você pode adicionar essa permissão no console Lambda (consulte Uso de políticas baseadas em recursos para AWS Lambda) ou usando a operação Lambda. AddPermission
Exemplo de política baseada em recursos do Lambda
A seguinte política baseada em recursos do AWS Lambda concede ao Amazon Cognito uma capacidade limitada de invocar uma função Lambda. O Amazon Cognito só pode invocar a função em nome do grupo de identidades na condição
aws:SourceArn
e da conta na condiçãoaws: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>
" } } } ] }Na tela Configure function, insira um nome e uma descrição para a função. Deixe Runtime definido como "Node.js". Deixe o código inalterado no nosso exemplo. O exemplo padrão não faz as alterações nos dados que estão sendo sincronizados. Ele só registra o fato de que o evento Sync Trigger do Amazon Cognito ocorreu. Deixe Handler name definido como "index.handler". Em Função, selecione uma IAM função que conceda permissão de acesso ao seu código AWS Lambda. Para modificar as funções, consulte o IAM console. Deixe a opção Advanced settings inalterada. Clique em Next.
Na tela Review, revise os detalhes e clique em Create function. A próxima página exibe a nova função Lambda.
Agora que você tem uma função apropriada gravada no Lambda, precisa escolher essa função como handler do evento Sync Trigger do Amazon Cognito. As etapas a seguir percorrerão esse processo.
Na página inicial do console:
Clique no nome do grupo de identidades para o qual você deseja configurar os eventos do Amazon Cognito. A página Dashboard (Painel) do grupo de identidades será exibida.
No canto superior direito da página Dashboard, clique em Manage Federated Identities. A página Manage Federated Identities (Gerenciar identidades federadas) é exibida.
Role a tela para baixo e clique em Cognito Events para expandi-lo.
No menu suspenso Sync Trigger, selecione a função Lambda que você quer acionar quando ocorre um evento Sync.
Clique em Salvar alterações
Agora, a função Lambda será executada todas as vezes que um conjunto de dados for sincronizado. A próxima seção abordará como ler e modificar os dados na função enquanto eles estão sendo sincronizados.
Como criar uma função Lambda para acionadores de sincronização
Os acionadores de sincronização seguem o padrão de programação que as interfaces do provedor de serviços usam. O Amazon Cognito fornece informações para sua função Lambda no seguinte 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" },.. } }
O Amazon Cognito espera o valor de retorno da função no mesmo formato da entrada.
Ao gravar funções para o evento Sync Trigger, observe o seguinte:
-
Quando o Amazon Cognito chama sua função Lambda durante UpdateRecords, a função deve responder em 5 segundos. Se isso não ocorrer, o serviço Amazon Cognito Sync lançará uma exceção
LambdaSocketTimeoutException
. Você não pode aumentar esse valor de tempo limite. -
Se você receber uma exceção
LambdaThrottledException
, tente a operação de sincronização novamente para atualizar os registros. O Amazon Cognito fornece todos os registros presentes no conjunto de dados como entrada para a função.
Os registros que o usuário da aplicação atualiza têm o campo
op
definido comoreplace
. Os registros excluídos têm o campoop
definido comoremove
.Você poderá modificar qualquer registro, mesmo se o usuário da aplicação não o atualizar.
Todos os campos, exceto o, datasetRecords são somente para leitura. Não os altere. Se você alterar esses campos, não poderá atualizar os registros.
Para modificar o valor de um registro, atualize o valor e defina
op
comoreplace
.Para remover um registro, defina
op
comoremove
ou defina o valor como null.Para adicionar um registro, adicione um novo registro à datasetRecords matriz.
O Amazon Cognito ignora qualquer registro omitido na resposta quando o Amazon Cognito o atualiza.
Amostra de função Lambda
O exemplo de função do Lambda a seguir mostra como acessar, modificar e remover os dados.
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); };