Este post foi escrito por Kurt Tometich, arquiteto sênior de soluções, e Giedrius Praspaliauskas, arquiteto sênior de soluções em Serverless.
As arquiteturas orientadas a eventos enfrentam desafios com a validação de eventos devido a domínios exclusivos, formatos de eventos, frequências e níveis de governança variados. Os eventos estão em constante evolução, exigindo uma abordagem equilibrada entre velocidade e governança. Este blog descreve abordagens para validação de eventos para consumidores e produtores, com foco em soluções automatizadas para validação de eventos de produtores usando o Amazon EventBridge e o Amazon API Gateway.
Validação de eventos para consumidores e produtores
Em um sistema orientado a eventos, os eventos devem ser validados por produtores e consumidores para manter a integridade dos dados. O trabalho dos produtores é criar e enviar eventos válidos antes de serem encaminhados aos consumidores. Não fazer isso pode levar a inconsistências de dados, erros posteriores no processamento e custos desnecessários. Como consumidor, mesmo que os eventos venham de uma fonte confiável, a validação ainda deve ser aplicada. Os produtores podem alterar o formato dos dados ao longo do tempo, os dados podem ficar corrompidos ou as interfaces entre o produtor e o consumidor podem alterá-los.
Uma forma comum de gerenciar e rotear eventos é por meio de um barramento de eventos. O EventBridge é um barramento de eventos Serverless que pode realizar a descoberta, o controle de versões e o consumo de esquemas de eventos. Quando a descoberta do esquema é ativada em um barramento de eventos, novas versões do esquema são geradas quando a estrutura do evento muda. Esses esquemas podem ser usados para realizar a validação de eventos.
O registro do EventBridge Schema armazena esquemas nos formatos OpenAPI ou JSONSchema. Os esquemas podem ser adicionados ao registro automaticamente por meio da descoberta do esquema ou da carga manual do seu esquema para o registro por meio do console da AWS ou de forma programática. A descoberta de esquemas automatiza o processo de encontrar esquemas e adicioná-los ao seu registro. Os esquemas para eventos da AWS são adicionados automaticamente ao registro.
Depois que um esquema é adicionado ao registro, você pode gerar uma associação de código para o esquema. Isso permite que você represente o evento como um objeto fortemente tipado em seu código. As vinculações de código estão disponíveis para as linguagens de programação Golang, Java, Python ou TypeScript. Se as vinculações específicas da linguagem preferencial não estiverem disponíveis, os esquemas podem ser baixados e validados usando bibliotecas de validação de esquemas de terceiros. Por exemplo, Ajv para JavaScript ou a biblioteca jsonschema para Python.
Se estiver usando vinculações de código, você pode baixá-las usando o console, a API ou dentro de um IDE compatível usando o AWS Toolkit. As vinculações de código podem ser usadas como outros artefatos de código. Se uma função do AWS Lambda for usada como consumidor, adicione a vinculação de código como uma dependência de camada. As vinculações não são sincronizadas automaticamente com nenhum repositório de artefatos, como o AWS CodeArtifact. O código da função Lambda nessa solução pode ser estendido para automatizar as cargas de vinculação para seu repositório de artefatos.
O diagrama a seguir mostra uma arquitetura comum de eventos de produtor (à esquerda) e consumidor (à direita) na AWS. Os produtores enviam eventos por meio do API Gateway ou diretamente para um barramento de eventos do EventBridge. É comum usar o API Gateway como porta de entrada para fornecer autorização, validação e pré-processamento de eventos recebidos. Os eventos que vão diretamente para o EventBridge também podem vir de integrações de parceiros de SaaS (Salesforce, Jira, ServiceNow etc.) ou de um aplicativo executado em uma subnet privada usando a rede privada da AWS para se conectar ao EventBridge. Para esses eventos, você pode usar bibliotecas de terceiros para validar eventos antes que eles cheguem ao EventBridge.
Arquitetura comum para validação de eventos para produtores e consumidores
Passos do fluxo de trabalho:
- Os produtores enviam eventos por meio do API Gateway ou diretamente para o EventBridge. O API Gateway fornece validação de solicitações, analisa e envia eventos para o EventBridge se eles passarem pela validação. Eventos inválidos que não correspondam ao esquema no API Gateway serão rejeitados antes de chegarem ao EventBridge. Os eventos que vão diretamente para o EventBridge são validados usando bibliotecas de validação de esquema de terceiros (por exemplo, Ajv para JavaScript e biblioteca jsonschema para Python).
- Com a descoberta de esquema ativada em um barramento de eventos personalizado, esse barramento receberá o evento de um aplicativo e gerará uma nova versão do esquema no registro. Novas versões do esquema são criadas somente quando a estrutura do evento é alterada. Quando novas versões do esquema são criadas, um evento criado pela versão do esquema é automaticamente emitido no barramento de eventos padrão do EventBridge. O barramento padrão recebe automaticamente os eventos da AWS. As regras do EventBridge podem ser configuradas para corresponder a todas as alterações na versão do esquema ou filtrando o nome, o tipo e outros campos do esquema disponíveis no evento.
- Os consumidores definem as regras do EventBridge para reagir aos eventos de alteração da versão do esquema. Os consumidores baixam o esquema ou as associações de código do EventBridge e realizam a validação e a análise.
- Os produtores definem as regras do EventBridge para reagir aos eventos de alteração da versão do esquema. O novo esquema é recuperado do registro e usado no desenvolvimento local com bibliotecas de validação de esquemas de terceiros, ou um modelo no API Gateway é atualizado diretamente com o novo esquema. Essa etapa não existe como um recurso nativo do EventBridge. A solução mais adiante neste post demonstrará como automatizar essa etapa.
Para escalar essa arquitetura para várias fontes de eventos e endpoints de API, você pode criar modelos diferentes no API Gateway para cada esquema de evento. Um modelo no API Gateway é um esquema de dados que define a estrutura e o formato dos dados para cargas de solicitação e resposta. Esses modelos são então aplicados a diferentes recursos e métodos definidos em suas APIs. As soluções abaixo demonstrarão como os esquemas de eventos podem ser sincronizados automaticamente com os modelos no API Gateway.
Passo a passo da solução
As soluções a seguir usam o API Gateway para realizar a validação da solicitação e a descoberta do esquema do EventBridge para gerar automaticamente versões de esquema atualizadas. Ambos podem ser estendidos ou modificados para se adequarem a casos de uso exclusivos. Essas soluções se baseiam na arquitetura geral de validação de produtores e consumidores abordada anteriormente, incorporando soluções automatizadas para baixar, processar e aplicar novos esquemas ao API Gateway. Consulte o arquivo README.md no repositório AWS Samples no repositório Github para pré-requisitos, instruções de implantação e testes.
Atualizador de esquema orientado pelo Lambda
A arquitetura a seguir usa a descoberta do esquema do EventBridge para gerar novas versões do esquema, baixar, processar e publicar o esquema em um modelo de API Gateway para validação da solicitação. A função de atualização de esquema do Lambda será acionada quando houver alterações na versão do esquema. O gatilho da função pode ser ativado ou desativado atualizando a regra no console do EventBridge.
Essa solução é ideal para atualizações rápidas com processamento mínimo. Se testes e validações complexos forem necessários antes de atualizar um novo esquema, consulte a solução de atualização de esquema orientada por CI/CD abordada posteriormente neste blog. A regra nessa solução é acionada quando uma nova versão do esquema é adicionada ao registro. Para filtrar ainda mais, a regra pode ser modificada ou um processamento adicional pode ser aplicado à função Lambda. Isso fornece flexibilidade para lidar com vários domínios ou tipos de eventos.
Arquitetura para o Lambda Driven Schema Updater
Passos do fluxo de trabalho:
- Os produtores enviam eventos para o endpoint do API Gateway ou diretamente para o EventBridge.
- O API Gateway realiza a validação da solicitação no corpo, modifica o formato do evento e envia para o EventBridge. Se o evento não corresponder ao esquema, o API Gateway rejeitará a solicitação.
- Um barramento de eventos personalizado receberá o evento e uma regra opcional baseada na fonte pode registrar todos os eventos para rastreamento e solução de problemas.
- Com a descoberta de esquemas ativada no barramento de eventos personalizado, novas estruturas de eventos geram versões de esquema que são armazenadas no registro. Se uma nova versão do esquema for gerada, os consumidores poderão baixar as associações de esquema e código mais recentes do registro.
- A regra de criação da versão do esquema invocará a função Lambda.
- A função baixará, processará e atualizará o modelo do API Gateway com o novo esquema. Uma nova versão do esquema só é gerada se a estrutura do evento mudar.
Atualizador de esquema orientado por CI/CD
A abordagem alternativa usa um pipeline de CI/CD para controlar as mudanças no esquema. Em vez de a função Lambda aplicar diretamente o novo esquema ao modelo do API Gateway, ela baixa, processa e armazena o esquema em um repositório. O pipeline de CI/CD faz referência ao esquema armazenado, realizando testes e verificações adicionais antes que o esquema seja promovido e aplicado. Isso fornece mais controle sobre o processo de atualização do esquema, embora introduza alguma complexidade adicional. O diagrama a seguir descreve o processo de atualização orientado por CI/CD. A solução pode ser adaptada a outros repositórios de artefatos e sistemas de CI/CD.
Arquitetura para atualizador de esquema orientado por CI/CD
Passos do fluxo de trabalho:
- Os produtores enviam eventos para o endpoint do API Gateway ou diretamente para o EventBridge.
- O API Gateway realizará a validação da solicitação em relação ao corpo, modificará o formato do evento e enviará para o EventBridge.
- Um barramento de eventos personalizado receberá o evento e uma regra opcional baseada na fonte (origem) e pode registrar todos os eventos para rastreamento e solução de problemas.
- Com a descoberta ativada no barramento de eventos personalizado, as versões do esquema são produzidas e armazenadas no registro.
- A regra de criação da versão do esquema invocará a função Lambda.
- A função baixará, processará e armazenará o novo esquema em um repositório de sua escolha (ou seja, S3, Git, Artifact Repository).
- O pipeline de CI/CD atualiza o modelo no API Gateway e executa todos os testes necessários.
- O consumidor baixa o esquema e as vinculações de código dos repositórios apropriados.
Conclusão
A validação de eventos pode ser desafiadora, mas aproveitar a descoberta de esquemas e a validação de solicitações minimiza a lógica e a sobrecarga personalizadas. O EventBridge pode descobrir novos esquemas a partir de eventos, enquanto o API Gateway valida as solicitações recebidas. Essa abordagem simplifica a validação, melhora a qualidade dos dados e reduz a carga de manutenção da validação manual.
Para obter mais informações sobre arquiteturas orientadas por eventos, você pode ver recursos adicionais em AWS Samples e Serverless Land.
Este blog é uma tradução do conteúdo original em inglês (link aqui).
Biografia do autores
Biografia do tradutor
Daniel Abib é Arquiteto de Soluções Sênior e Especialista em Amazon Bedrock na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e especialização em Machine Learning. Ele trabalha apoiando Startups, ajudando-os em sua jornada para a nuvem. |
Biografia do Revisor
Rodrigo Peres é Arquiteto de Soluções na AWS, com mais de 20 anos de experiência trabalhando com arquitetura de soluções, desenvolvimento de sistemas e modernização de sistemas legados |