Integração ao Amazon EventBridge - Amazon DynamoDB

Integração ao Amazon EventBridge

O Amazon DynamoDB oferece o DynamoDB Streams para captura de dados de alterações, permitindo a captura de alterações em nível de item nas tabelas do DynamoDB. O DynamoDB Streams pode invocar funções do Lambda para processar essas alterações, possibilitando a integração orientada por eventos a outros serviços e aplicações. O DynamoDB Streams também oferece suporte à filtragem, o que permite um processamento de eventos eficiente e direcionado.

O DynamoDB Streams oferece suporte a até dois consumidores simultâneos por fragmento e oferece suporte à filtragem por meio da filtragem de eventos do Lambda para que somente itens que correspondam a critérios específicos sejam processados. Alguns clientes podem ter requisitos para compatibilidade com mais de dois consumidores. Outros podem precisar enriquecer os eventos de alteração antes de serem processados ou usar filtragem e roteamento mais avançados.

A integração do DynamoDB com o EventBridge pode atender a esses requisitos.

O Amazon EventBridge é um serviço sem servidor que usa eventos para conectar os componentes da aplicação, facilitando a criação de aplicações escaláveis orientadas por eventos. O EventBridge oferece integração nativa com o Amazon DynamoDB por meio de pipes do EventBridge, permitindo um fluxo contínuo de dados do DynamoDB para um barramento do EventBridge. Esse barramento pode se espalhar para várias aplicações e serviços por meio de um conjunto de regras e destinos.

Como funciona

A integração entre o DynamoDB e os pipes do EventBridge usa o DynamoDB Streams para capturar uma sequência em ordem temporal de alterações em nível de item em uma tabela do DynamoDB. Cada registro capturado dessa forma contém os dados modificados na tabela.

Imagem mostrando como o DynamoDB Streams se integra a um barramento do Amazon EventBridge.

Um pipe do EventBridge consome eventos do DynamoDB Streams e os encaminha para um destino, como um barramento do EventBridge (um barramento de eventos é um roteador que recebe eventos e os entrega aos destinos). A entrega é baseada nas regras que correspondem ao conteúdo do evento. O pipe também pode incluir a capacidade de filtrar eventos específicos e realizar enriquecimentos nos dados do evento antes de enviá-los ao destino.

Embora o EventBridge ofereça suporte a vários tipos de destino, uma escolha comum ao implementar um design distribuído é usar uma função do Lambda como destino. O exemplo a seguir demonstra uma integração com uma função do Lambda como destino.

Criar uma integração por meio do console

Siga as etapas abaixo para criar uma integração por meio do AWS Management Console.

  1. Habilite o DynamoDB Streams na tabela de origem seguindo as etapas na seção Habilitar um fluxo do Guia do desenvolvedor do DynamoDB. Se o DynamoDB Streams já estiver habilitado na tabela de origem, verifique se há menos de dois consumidores no momento. Os consumidores podem ser funções do Lambda, tabelas globais do DynamoDB, integrações ETL zero do Amazon DynamoDB com o Amazon OpenSearch Service ou aplicações que leem diretamente de fluxos, como por meio do adaptador do DynamoDB Streams Kinesis.

  2. Crie um barramento de eventos do EventBridge seguindo as etapas na seção Creating an Amazon EventBridge event bus do Guia do usuário do EventBridge.

    1. Ao criar o barramento de eventos, habilite a opção Descoberta de esquemas.

  3. Crie um pipe do EventBridge seguindo as etapas na seção Creating an Amazon EventBridge pipe do Guia do usuário do EventBridge.

    1. Ao configurar a origem, selecione DynamoDB no campo Origem e selecione o nome do fluxo da tabela de origem no campo DynamoDB Streams.

    2. Ao configurar o destino, selecione Barramento de eventos do EventBridge no campo Serviço de destino e selecione o barramento de eventos criado na etapa 2 no campo Barramento de eventos como destino.

  4. Grave um item de exemplo na tabela de origem do DynamoDB para acionar um evento. Isso permitirá que o EventBridge faça a inferência do esquema com base no item de exemplo. Esse esquema pode ser usado para criar regras para eventos de roteamento. Por exemplo, se você estiver implementando um padrão de design que envolve sobrecarga de atributos, talvez queira acionar regras diferentes, dependendo do valor da sua chave de classificação. Detalhes sobre como gravar um item no DynamoDB podem ser encontrados na seção Trabalhar com itens e atributos do Guia do desenvolvedor do DynamoDB.

  5. Crie um exemplo de função do Lambda em Python para ser usada como destino, seguindo as etapas na seção Criar funções do Lambda com Python do Guia do desenvolvedor do Lambda. Ao criar sua função, você pode usar o exemplo de código abaixo para demonstrar a integração. Quando invocado, ele imprimirá a NewImage e a OldImage recebidas com o evento, que podem ser visualizadas no CloudWatch Logs.

    import json def lambda_handler(event, context): dynamodb = event.get('detail', {}).get('dynamodb', {}) new_image = dynamodb.get('NewImage') old_image = dynamodb.get('OldImage') if new_image: print("NewImage:", json.dumps(new_image, indent=2)) if old_image: print("OldImage:", json.dumps(old_image, indent=2)) return {'statusCode': 200, 'body': json.dumps(event)}
  6. Crie uma regra do EventBridge que roteará eventos para a nova função do Lambda, seguindo as etapas na seção Create a rule that reacts to events do Guia do usuário do EventBridge.

    1. Ao definir os detalhes da regra, selecione o nome do barramento de eventos que você criou na etapa 2 em Barramento de eventos.

    2. Ao criar o padrão de eventos, siga o guia para Existing schema. Aqui, você pode selecionar o registro discovered-schemas e o esquema descoberto para o seu evento. Isso permite que você configure um padrão de eventos específico para seu caso de uso que encaminha somente mensagens que correspondem a atributos específicos. Por exemplo, se quisesse estabelecer correspondência somente com itens do DynamoDB em que o SK começa com “user#”, você usaria uma configuração como essa.

      Imagem mostrando uma regra do EventBridge em que somente itens do DynamoDB que têm uma chave de classificação que começa com “user#” são exibidos.
    3. Clique em Gerar padrão de eventos em JSON depois de terminar de criar um padrão em relação ao seu esquema. Em vez disso, se você quiser estabelecer correspondência com todos os eventos que aparecem no DynamoDB Streams, use o JSON a seguir para o padrão de eventos.

      { "source": ["aws.dynamodb"] }
    4. Ao selecionar destinos, siga o guia para serviço da AWS. No campo Selecionar um destino, escolha “Função do Lambda”. No campo Função, selecione a função do Lambda criada na etapa 5.

  7. Agora você pode interromper a descoberta de esquemas em seu barramento de eventos seguindo as etapas na seção Starting or stopping schema discovery on event buses do Guia do usuário do EventBridge.

  8. Grave um segundo item de exemplo na tabela de origem do DynamoDB para acionar um evento. Valide se o evento foi processado com sucesso em cada etapa.

    1. Veja a métrica PutEventsApproximateSuccessCount do CloudWatch para o barramento de eventos, seguindo a seção Monitoring Amazon EventBridge do Guia do usuário do EventBridge.

    2. Veja os logs da sua função do Lambda seguindo a seção Monitoramento e solução de problemas de funções do Lambda do Guia do desenvolvedor do Lambda. Se a função do Lambda usar o exemplo de código fornecido, você deverá ver a NewImage e a OldImage do DynamoDB Streams impressa no grupo de logs do CloudWatch Logs.

    3. Veja a métrica Error count and success rate (%) (Contagem de erros e taxa de sucesso [%]) da função do Lambda seguindo a seção Monitoramento e solução de problemas de funções do Lambda do Guia do desenvolvedor do Lambda.

Próximas etapas

Este exemplo fornece uma integração básica com uma única função do Lambda como destino. Para entender melhor as configurações mais complexas, como criação de várias regras, criação de vários destinos, integração com outros serviços e enriquecimento de eventos, consulte o Guia do usuário do EventBridge completo: Getting started with EventBridge.

nota

Esteja ciente de todas as cotas do EventBridge que possam ser relevantes para sua aplicação. Enquanto a capacidade do DynamoDB Streams escala com a tabela, as cotas do EventBridge são separadas. As cotas comuns a serem observadas em uma aplicação grande são o Limite de controle de utilização de invocações em transações por segundo e o Limite de controle de utilização de PutEvents em transações por segundo. Essas cotas especificam o número de invocações que podem ser enviadas aos destinos e o número de eventos que podem ser colocados no barramento por segundo.