O blog da AWS
Modernização de aplicativos com o AWS AppSync Events
Por Ricardo Marques, Senior AppMod & Serverless Specialist na na HAQM Web Services (AWS)
No mundo digital acelerado de hoje, as organizações estão enfrentando desafios para modernizar seus aplicativos. Um problema comum é a mudança suave da comunicação síncrona para a assíncrona sem alterações substanciais no cliente ou no frontend. Ao modernizar aplicativos, geralmente é necessário passar de um modelo de comunicação síncrona para um assíncrono. No entanto, essa transição pode ser complexa, especialmente quando o cliente ou o frontend se comunicam de forma síncrona. Adaptar o código atual para comunicação assíncrona exige tempo e recursos significativos.
O AWS AppSync Events ajuda a enfrentar esse desafio, permitindo que você crie APIs orientadas por eventos que podem fazer a ponte entre modelos de comunicação síncrona e assíncrona. Com o AppSync Events, você pode modernizar sua arquitetura de backend para aproveitar os padrões assíncronos e, ao mesmo tempo, manter a compatibilidade com os clientes síncronos existentes.
Visão geral
A solução inclui uma API que converte solicitações síncronas do cliente em solicitações assíncronas de backend usando o AppSync Events.
Para demonstrar a integração entre a API e o backend, estou simulando o processamento do backend usando um fluxo de trabalho assíncrono do AWS Step Functions. Esse fluxo de trabalho recebe um evento de nome e sobrenome, espera 10 segundos e publica um evento com nome completo no canal de eventos do AppSync. Para receber notificações de eventos, a API se inscreve no canal AppSync. Ao mesmo tempo, o backend lida com eventos de forma assíncrona.

Figura 1: Representação de uma API integrando um frontend síncrono com um backend assíncrono usando o AWS AppSync Events.
Figura 1: Representação de uma API integrando um frontend síncrono com um backend assíncrono usando o AWS AppSync Events.
- O HAQM API Gateway faz uma solicitação síncrona ao AWS Lambda e aguarda a resposta.
- A função Lambda inicia a execução do fluxo de trabalho assíncrono.
- Depois de iniciar a execução do fluxo de trabalho, o Lambda se conecta ao AppSync e cria um canal para receber notificações assíncronas (os canais são efêmeros e ilimitados). Aqui, ele cria um canal por solicitação usando o ID de execução do fluxo de trabalho).
- O fluxo de trabalho é executado de forma assíncrona, chamando outros fluxos de trabalho.
- Após a conclusão do fluxo de trabalho principal, ele envia uma solicitação POST para a API de eventos do AppSync com o resultado do processamento. O POST é feito no canal que foi criado pela função Lambda usando o ID de execução do fluxo de trabalho.
- O AppSync recebe a solicitação POST e envia uma notificação ao assinante, que nesse caso é a função Lambda. Todo o processo deve ser concluído dentro do limite de tempo limite das funções do Lambda que você definiu.
- O Lambda envia a resposta para o API Gateway, que está aguardando a resposta síncrona.
Para entender melhor o Event API WebSocket Protocol usado nessa solução, consulte esta documentação do AppSync.
Você pode acessar o repositório do GitHub por meio deste link: AppSync_Sync_Async_Integration.
O repositório inclui um arquivo README abrangente que orienta você no processo de instalação e configuração da solução anterior.
Pré-requisitos
Para seguir este passo a passo, você precisa dos seguintes pré-requisitos:
- Uma conta da AWS
- Permissões necessárias da AWS para criar todos os recursos especificados
- Interface de linha de comando da AWS (AWS CLI) configurada com as credenciais apropriadas
- Terraform instalado (versão 0.12 ou posterior)
Com o código completo, incluindo o API Gateway e o Step Functions, no GitHub, esta postagem aborda apenas os componentes principais: a API AppSync Events e a função Lambda.
Passo a passo
As etapas a seguir orientam você nessa solução.
Criação de uma API de eventos do AppSync com autorização de chave de API
Uma API de eventos do AppSync permite chamadas usando chave de API, grupos de usuários do HAQM Cognito, autorizador Lambda, OIDC ou AWS Identity and Access Management (IAM). Essa solução usa a chave de API.
A infraestrutura como código (IaC) foi criada usando o Terraform. No entanto, no momento em que escrevi esta postagem, não havia o recurso da API Terraform AppSync Event disponível. Portanto, os recursos da API AppSync Event foram criados com o AWS CloudFormation, que é importado e implementado pelo Terraform.
No recurso aws:appsync:api, defina o nome da API e o método Auth:
Para que o Host DNS, o Realtime Endpoint e o Secret Manager criados referenciados pelo modelo do Terraform, imprima-os:
As principais informações necessárias da API de eventos do AppSync são:
- DNS do host: esse DNS é usado para enviar eventos para o canal da API por meio de solicitações HTTP Post.
- Endpoint em tempo real: esse endpoint é um endpoint do WebSocket em que a função Lambda se conecta para receber os eventos publicados no canal AppSync.
- Chave de API: essa chave é usada não apenas nas solicitações Post HTTP, mas também para se conectar e se inscrever no canal AppSync.
API Lambda Sync/Async
Nessa solução, a função Lambda executa duas tarefas:
- Inicie um fluxo de trabalho assíncrono
- Inscreva-se em um canal de eventos por meio do WebSocket
Para lidar com a conexão WebSocket, use a biblioteca websocket-client, que é uma poderosa biblioteca Python desenvolvida para trabalhar com WebSockets.
O isolamento da solicitação é mantido usando o mesmo UUID para o nome do fluxo de trabalho e o nome do canal do AppSync.
Primeiro, para inicializar a conexão WebSocket, os subprotocolos devem ser definidos:
- WEBSOCKET_PROTOCOL
- Cabeçalhos:
- Host: O DNS do host do AppSync (mesmo com uma conexão WebSocket, o host HTTP deve ser enviado)
- x-api-key: a chave de API criada para a API Event.
- Protocolo Sec-Websocket: WEBSOCKET_PROTOCOL
Depois que a conexão do WebSocket for estabelecida, uma primeira mensagem com o tipo CONNECTION_INIT_TYPE deverá ser enviada.
Para se inscrever no canal pelo qual nossa função é notificada quando o fluxo de trabalho do Step Functions termina, envie uma segunda mensagem com o tipo SUBSCRIBE_TYPE, um ID, o nome do canal e a autorização.
Para obter mais informações sobre os tipos de mensagem, leia esta documentação do AppSync.
Depois de receber a mensagem confirmando a assinatura, aguarde as mensagens com os dados do tipo. Sempre que uma mensagem desse tipo chegar, execute a lógica para identificar se o fluxo de trabalho foi executado com êxito e, em seguida, feche a conexão.
Conclusão
Neste post, você aprendeu a usar arquiteturas orientadas por eventos e os recursos do AWS AppSync Events para integrar padrões de comunicação síncrona e assíncrona em seus aplicativos. Isso permite que você modernize seus sistemas sem a necessidade de modificações extensivas em sua base de código de frontend existente. Explore as demonstrações e a documentação fornecidas no repositório do GitHub para obter uma compreensão mais profunda de como os Eventos do AppSync podem ser aplicados aos seus casos de uso específicos.
Para saber mais sobre arquiteturas sem servidor e padrões de invocação assíncrona, consulte Serverless Land.
Este conteúdo foi traduzido da postagem original do blog, que pode ser encontrada aqui.
Biografia do Autor
![]() |
Ricardo Marques é Senior AppMod & Serverless Specialist na AWS, com mais de 17 anos de experiência em desenvolvimento de software, arquiteturas de soluções escaláveis, cloud native, microsserviços, Serverless e segurança. Ele trabalha apoiando clientes de toda América Latina, ajudando-os em sua jornada para a nuvem. |
Biografia do tradutor
![]() |
Daniel Abib é Arquiteto de Soluções Sênior e Especialista em HAQM 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
![]() |
Luis Miguel, Com mais de uma década de experíência em tecnologia sempre buscando otimizações, resiliência e performance das aplicação. Atualmente, foco em observabilidade, auxiliando times a desenvolverem uma visão clara e acionável de suas aplicações. Meu objetivo é traduzir complexidade em clareza, permitindo que empresas tomem decisões mais assertivas sobre seus sistemas. |