Criando e Consumindo Webhooks de Pássaros
Pássaro
27 de jan. de 2022
1 min read

Principais Conclusões
Os webhooks em tempo real da Bird permitem que os remetentes recebam dados de eventos instantaneamente—sem polling, sem trabalhos cron e sem dores de cabeça com limites de taxa.
Os webhooks eliminam a complexidade de gerenciar janelas de tempo, evitando eventos perdidos e lidando com registros duplicados.
Ideal para automação downstream: atualização de listas, início de jornadas, enriquecimento de painéis de controle ou sincronização de sistemas internos.
O tutorial orienta os remetentes na construção de um pipeline de ingestão completo na AWS: armazenamento S3, processamento Lambda e um balanceador de carga de aplicação.
O S3 serve como a camada central de armazenamento para cargas úteis de webhook, com cada lote escrito como um arquivo JSON plano.
Funções Lambda lidam tanto com a ingestão (armazenando lotes brutos) quanto com a transformação (convertendo JSON para CSV).
A Bird agrupa eventos—cada lote de webhook inclui um
x-messagesystems-batch-idexclusivo, permitindo verificações de reprodução e desduplicação.A Lambda do consumidor deve permanecer eficiente, pois a Bird tenta novamente os lotes se o endpoint não responder em ~10 segundos.
O AWS ALB é recomendado (vs. API Gateway) por simplicidade, custo-benefício e manuseio direto de solicitações HTTP POST.
O DNS (Route 53 ou provedor externo) é configurado para mapear um nome de host amigável ao endpoint do ALB.
Após a configuração, a Bird envia dados de eventos diretamente e de forma confiável para seu pipeline da AWS para processamento assíncrono.
O guia também aborda as melhores práticas: permissões IAM de menor privilégio, restrições de armazenamento temporário, evitando gatilhos recursivos e organizando fluxos de trabalho multi-lambda.
Destaques de Perguntas e Respostas
Qual é o principal objetivo dos webhooks de eventos em tempo real do Bird?
Para enviar dados de eventos diretamente para o endpoint de um remetente em tempo real, permitindo a automação imediata sem chamadas de API limitadas por taxa ou sondagem.
Por que os webhooks são melhores do que puxar dados via API para grandes remetentes?
Como as chamadas de API requerem gerenciamento de janela de tempo, correm o risco de lacunas ou duplicatas de dados e podem atingir limites de taxa—os webhooks eliminam tudo isso ao enviar dados continuamente.
Quais serviços da AWS são utilizados no pipeline de ingestão de webhook recomendado?
Amazon S3 (armazenamento), AWS Lambda (processamento), um Application Load Balancer (ouvinte HTTP) e, opcionalmente, Route 53 (DNS).
Como o Bird processa dados de eventos em lote?
O Bird envia múltiplos eventos juntos em um payload, cada um atribuído a um ID de lote exclusivo (x-messagesystems-batch-id) para rastreamento, tentativas e deduplicação.
O que aciona a função Lambda do consumidor?
O ALB encaminha solicitações POST de webhook recebidas diretamente para o Lambda, que extrai a carga útil e a grava no S3.
Por que armazenar o lote bruto do webhook no S3 antes de processá-lo?
Para garantir uma ingestão rápida (<10 segundos) para que a conexão não expire, e para descarregar o processamento mais pesado para um pipeline assíncrono separado.
O que a segunda função Lambda faz?
Ele é acionado por novos objetos S3, valida o JSON, converte em CSV e grava a saída processada em um bucket S3 separado.
Por que usar um bucket S3 separado para arquivos CSV processados?
Para evitar gatilhos recursivos (gravar um novo arquivo processado de volta no mesmo bucket acionaria o Lambda sem fim).
Quais permissões as funções Lambda exigem?
O Lambda consumidor precisa de permissões PutObject do S3; o Lambda de processamento precisa de GetObject para o bucket de origem e PutObject para o bucket de destino.
Por que um ALB da AWS é recomendado em vez do API Gateway?
ALBs são mais baratos, mais simples e ideais para encaminhamento direto de POST HTTPS; o API Gateway pode alterar o formato da carga útil e aumentar a complexidade.
Como os remetentes configuram o webhook no Bird?
Ao fornecer o endpoint HTTPS (o registro DNS para o ALB), selecionar uma subconta, escolher eventos e salvar a configuração do webhook.
Quais opções a jusante existem para armazenar ou analisar os dados processados?
Carregue em bancos de dados (PostgreSQL, DynamoDB, RDS), alimente sistemas ETL ou consulte diretamente com ferramentas como Athena.
Os webhooks de evento em tempo real do Bird são uma ferramenta incrivelmente valiosa para os remetentes terem dados automaticamente enviados para seus sistemas. Isso pode impulsionar a automação downstream, como atualizar listas de e-mail, acionar jornadas de e-mail automatizadas ou preencher painéis internos. Embora os mesmos dados de evento possam ser acessados através da interface do usuário do Bird usando Busca de Eventos, ou programaticamente aproveitando a API de Eventos do Bird, as limitações impostas ao número de registros retornados em uma única solicitação ou limites de taxa impostos ao endpoint da API podem tornar ambos os métodos restritivos para remetentes grandes e sofisticados.
Webhooks de evento em tempo real permitem que um remetente configure um endpoint para onde o Bird transmite os dados, e os dados podem ser consumidos sem a necessidade de agendar trabalhos cron que extraem os dados. Também há compromissos logísticos ao extrair os dados em vez de ter os dados enviados para você, como ter que identificar qual período de tempo e parâmetros usar para cada solicitação da API. Se os períodos de tempo não estiverem perfeitamente alinhados, você corre o risco de perder dados, e se os períodos se sobrepuserem, você precisará lidar com registros de dados duplicados. Com webhooks em tempo real, os dados de evento são simplesmente enviados para o seu endpoint conforme se tornam disponíveis dentro do Bird.
Embora os benefícios de receber dados de evento em tempo real para impulsionar processos de automação downstream possam ser compreendidos imediatamente por muitos remetentes, o processo real de implementação e consumo de webhooks pode ser intimidador. Isso pode ser especialmente verdadeiro se você não estiver familiarizado com os componentes técnicos de criar um endpoint e manipular os dados programaticamente. Existem serviços disponíveis que consumirão os dados do webhook do Bird e farão ETL para o seu banco de dados automaticamente – um exemplo seria StitchData, sobre o qual já blogamos no passado. No entanto, se você deseja mais controle sobre o processo, pode facilmente construir os componentes você mesmo. O seguinte é um guia simples para ajudar os remetentes a se sentirem confortáveis ao criar um webhook de eventos do Bird e consumir os dados usando a infraestrutura dentro da AWS.
Os webhooks de evento em tempo real do Bird são uma ferramenta incrivelmente valiosa para os remetentes terem dados automaticamente enviados para seus sistemas. Isso pode impulsionar a automação downstream, como atualizar listas de e-mail, acionar jornadas de e-mail automatizadas ou preencher painéis internos. Embora os mesmos dados de evento possam ser acessados através da interface do usuário do Bird usando Busca de Eventos, ou programaticamente aproveitando a API de Eventos do Bird, as limitações impostas ao número de registros retornados em uma única solicitação ou limites de taxa impostos ao endpoint da API podem tornar ambos os métodos restritivos para remetentes grandes e sofisticados.
Webhooks de evento em tempo real permitem que um remetente configure um endpoint para onde o Bird transmite os dados, e os dados podem ser consumidos sem a necessidade de agendar trabalhos cron que extraem os dados. Também há compromissos logísticos ao extrair os dados em vez de ter os dados enviados para você, como ter que identificar qual período de tempo e parâmetros usar para cada solicitação da API. Se os períodos de tempo não estiverem perfeitamente alinhados, você corre o risco de perder dados, e se os períodos se sobrepuserem, você precisará lidar com registros de dados duplicados. Com webhooks em tempo real, os dados de evento são simplesmente enviados para o seu endpoint conforme se tornam disponíveis dentro do Bird.
Embora os benefícios de receber dados de evento em tempo real para impulsionar processos de automação downstream possam ser compreendidos imediatamente por muitos remetentes, o processo real de implementação e consumo de webhooks pode ser intimidador. Isso pode ser especialmente verdadeiro se você não estiver familiarizado com os componentes técnicos de criar um endpoint e manipular os dados programaticamente. Existem serviços disponíveis que consumirão os dados do webhook do Bird e farão ETL para o seu banco de dados automaticamente – um exemplo seria StitchData, sobre o qual já blogamos no passado. No entanto, se você deseja mais controle sobre o processo, pode facilmente construir os componentes você mesmo. O seguinte é um guia simples para ajudar os remetentes a se sentirem confortáveis ao criar um webhook de eventos do Bird e consumir os dados usando a infraestrutura dentro da AWS.
Os webhooks de evento em tempo real do Bird são uma ferramenta incrivelmente valiosa para os remetentes terem dados automaticamente enviados para seus sistemas. Isso pode impulsionar a automação downstream, como atualizar listas de e-mail, acionar jornadas de e-mail automatizadas ou preencher painéis internos. Embora os mesmos dados de evento possam ser acessados através da interface do usuário do Bird usando Busca de Eventos, ou programaticamente aproveitando a API de Eventos do Bird, as limitações impostas ao número de registros retornados em uma única solicitação ou limites de taxa impostos ao endpoint da API podem tornar ambos os métodos restritivos para remetentes grandes e sofisticados.
Webhooks de evento em tempo real permitem que um remetente configure um endpoint para onde o Bird transmite os dados, e os dados podem ser consumidos sem a necessidade de agendar trabalhos cron que extraem os dados. Também há compromissos logísticos ao extrair os dados em vez de ter os dados enviados para você, como ter que identificar qual período de tempo e parâmetros usar para cada solicitação da API. Se os períodos de tempo não estiverem perfeitamente alinhados, você corre o risco de perder dados, e se os períodos se sobrepuserem, você precisará lidar com registros de dados duplicados. Com webhooks em tempo real, os dados de evento são simplesmente enviados para o seu endpoint conforme se tornam disponíveis dentro do Bird.
Embora os benefícios de receber dados de evento em tempo real para impulsionar processos de automação downstream possam ser compreendidos imediatamente por muitos remetentes, o processo real de implementação e consumo de webhooks pode ser intimidador. Isso pode ser especialmente verdadeiro se você não estiver familiarizado com os componentes técnicos de criar um endpoint e manipular os dados programaticamente. Existem serviços disponíveis que consumirão os dados do webhook do Bird e farão ETL para o seu banco de dados automaticamente – um exemplo seria StitchData, sobre o qual já blogamos no passado. No entanto, se você deseja mais controle sobre o processo, pode facilmente construir os componentes você mesmo. O seguinte é um guia simples para ajudar os remetentes a se sentirem confortáveis ao criar um webhook de eventos do Bird e consumir os dados usando a infraestrutura dentro da AWS.
Configurando o Endpoint de Destino do Webhook
Quando um evento do Bird é criado, queremos que os dados desse evento sejam transmitidos em tempo real para um endpoint na AWS para que possamos consumir e usar esses dados programaticamente. Os dados serão enviados do Bird para um endpoint alvo, que irá encaminhar a carga útil para uma função lambda que processará e armazenará os dados em um bucket S3. Um diagrama de alto nível do fluxo de dados descrito pode ser visto abaixo:

Componente | Responsabilidade |
|---|---|
Webhooks do Bird | Emitir lotes de eventos em tempo real como requisições HTTP POST |
Balanceador de Carga de Aplicação | Receber tráfego externo de webhook e encaminhar requisições |
Lambda (Consumidor) | Permanecer lotes de webhook brutos no S3 de forma eficiente |
Amazon S3 | Armazenar cargas úteis de eventos em lotes como arquivos JSON planos |
Lambda (Processador) | Transformar ou carregar dados armazenados de forma assíncrona |
Para implementar esse fluxo de trabalho, vamos realmente construí-los na ordem inversa, começando pela criação de um bucket S3 onde iremos armazenar nossos dados de eventos e então trabalhar para trás – adicionando cada componente que alimenta o que construímos.
Quando um evento do Bird é criado, queremos que os dados desse evento sejam transmitidos em tempo real para um endpoint na AWS para que possamos consumir e usar esses dados programaticamente. Os dados serão enviados do Bird para um endpoint alvo, que irá encaminhar a carga útil para uma função lambda que processará e armazenará os dados em um bucket S3. Um diagrama de alto nível do fluxo de dados descrito pode ser visto abaixo:

Componente | Responsabilidade |
|---|---|
Webhooks do Bird | Emitir lotes de eventos em tempo real como requisições HTTP POST |
Balanceador de Carga de Aplicação | Receber tráfego externo de webhook e encaminhar requisições |
Lambda (Consumidor) | Permanecer lotes de webhook brutos no S3 de forma eficiente |
Amazon S3 | Armazenar cargas úteis de eventos em lotes como arquivos JSON planos |
Lambda (Processador) | Transformar ou carregar dados armazenados de forma assíncrona |
Para implementar esse fluxo de trabalho, vamos realmente construí-los na ordem inversa, começando pela criação de um bucket S3 onde iremos armazenar nossos dados de eventos e então trabalhar para trás – adicionando cada componente que alimenta o que construímos.
Quando um evento do Bird é criado, queremos que os dados desse evento sejam transmitidos em tempo real para um endpoint na AWS para que possamos consumir e usar esses dados programaticamente. Os dados serão enviados do Bird para um endpoint alvo, que irá encaminhar a carga útil para uma função lambda que processará e armazenará os dados em um bucket S3. Um diagrama de alto nível do fluxo de dados descrito pode ser visto abaixo:

Componente | Responsabilidade |
|---|---|
Webhooks do Bird | Emitir lotes de eventos em tempo real como requisições HTTP POST |
Balanceador de Carga de Aplicação | Receber tráfego externo de webhook e encaminhar requisições |
Lambda (Consumidor) | Permanecer lotes de webhook brutos no S3 de forma eficiente |
Amazon S3 | Armazenar cargas úteis de eventos em lotes como arquivos JSON planos |
Lambda (Processador) | Transformar ou carregar dados armazenados de forma assíncrona |
Para implementar esse fluxo de trabalho, vamos realmente construí-los na ordem inversa, começando pela criação de um bucket S3 onde iremos armazenar nossos dados de eventos e então trabalhar para trás – adicionando cada componente que alimenta o que construímos.
Crie um Bucket S3 para Armazenar os Dados do Webhook
Antes de criar nosso balanceador de carga para aceitar os dados, ou nossa função lambda para armazenar os dados, precisamos primeiro criar nosso bucket S3 onde os dados serão armazenados. Embora o S3 forneça um excelente armazenamento para dados de webhook, organizações que também utilizam bancos de dados PostgreSQL para processamento de eventos devem implementar procedimentos adequados de backup e restauração para proteger seus dados estruturados juntamente com sua estratégia de armazenamento S3. Para fazer isso, navegue até o serviço S3 dentro da AWS e pressione “Criar Bucket.” Você será solicitado a atribuir um nome ao seu bucket e definir a região - certifique-se de usar a mesma região que seu ALB e função lambda. Quando seu bucket S3 for criado, ele estará vazio - se você quiser organizar os dados dentro de uma pasta, pode criar o diretório pretendido agora ou o diretório será criado quando sua função lambda armazenar o arquivo. Neste exemplo, nós nomeamos nosso bucket S3 de “bird-webhooks” e criamos uma pasta chamada “B Dados de Evento” para armazenar nossos dados de evento - você verá esses nomes referenciados em nossa função lambda abaixo.
Antes de criar nosso balanceador de carga para aceitar os dados, ou nossa função lambda para armazenar os dados, precisamos primeiro criar nosso bucket S3 onde os dados serão armazenados. Embora o S3 forneça um excelente armazenamento para dados de webhook, organizações que também utilizam bancos de dados PostgreSQL para processamento de eventos devem implementar procedimentos adequados de backup e restauração para proteger seus dados estruturados juntamente com sua estratégia de armazenamento S3. Para fazer isso, navegue até o serviço S3 dentro da AWS e pressione “Criar Bucket.” Você será solicitado a atribuir um nome ao seu bucket e definir a região - certifique-se de usar a mesma região que seu ALB e função lambda. Quando seu bucket S3 for criado, ele estará vazio - se você quiser organizar os dados dentro de uma pasta, pode criar o diretório pretendido agora ou o diretório será criado quando sua função lambda armazenar o arquivo. Neste exemplo, nós nomeamos nosso bucket S3 de “bird-webhooks” e criamos uma pasta chamada “B Dados de Evento” para armazenar nossos dados de evento - você verá esses nomes referenciados em nossa função lambda abaixo.
Antes de criar nosso balanceador de carga para aceitar os dados, ou nossa função lambda para armazenar os dados, precisamos primeiro criar nosso bucket S3 onde os dados serão armazenados. Embora o S3 forneça um excelente armazenamento para dados de webhook, organizações que também utilizam bancos de dados PostgreSQL para processamento de eventos devem implementar procedimentos adequados de backup e restauração para proteger seus dados estruturados juntamente com sua estratégia de armazenamento S3. Para fazer isso, navegue até o serviço S3 dentro da AWS e pressione “Criar Bucket.” Você será solicitado a atribuir um nome ao seu bucket e definir a região - certifique-se de usar a mesma região que seu ALB e função lambda. Quando seu bucket S3 for criado, ele estará vazio - se você quiser organizar os dados dentro de uma pasta, pode criar o diretório pretendido agora ou o diretório será criado quando sua função lambda armazenar o arquivo. Neste exemplo, nós nomeamos nosso bucket S3 de “bird-webhooks” e criamos uma pasta chamada “B Dados de Evento” para armazenar nossos dados de evento - você verá esses nomes referenciados em nossa função lambda abaixo.
Crie uma Função Lambda para Consumir os Dados
O processamento real e o armazenamento dos dados serão realizados por uma função lambda que é invocada pelo nosso balanceador de carga da aplicação (ALB).
O primeiro passo é criar sua função lambda navegando até o serviço Lambda na AWS e clicando em “Criar Função.” Você será solicitado a atribuir um nome à sua função lambda e selecionar em qual linguagem de programação deseja escrever sua função. Para este exemplo, usamos Python como a linguagem de execução.
Agora precisamos desenvolver nossa função lambda. Por um momento, vamos supor que nosso balanceador de carga da aplicação foi configurado e está encaminhando o payload do webhook para a nossa função lambda – a lambda receberá um payload incluindo todos os cabeçalhos e o corpo. O payload é passado para nossa função lambda usando o objeto “event” como um dicionário. Você pode fazer referência aos cabeçalhos e ao corpo do payload de forma independente acessando os objetos “headers” e “body” dentro do payload. Neste exemplo, vamos simplesmente ler o cabeçalho “x-messagesystems-batch-id”, onde o ID do lote é um valor único criado pela Bird para o lote do webhook, e usá-lo como o nome do arquivo ao armazenar o corpo como um arquivo plano no S3; no entanto, você pode querer adicionar funcionalidades adicionais, como verificações de autenticação ou tratamento de erros, conforme necessário.
Ao armazenar o payload em um arquivo plano no S3, precisaremos definir o nome do bucket S3, a localização e o nome do arquivo onde os dados do payload serão armazenados. Em nossa função lambda de exemplo, fazemos isso dentro da função “store_batch”. Neste exemplo, vamos armazenar todo o lote como um único arquivo, o que ajuda a garantir que os dados sejam coletados e armazenados antes que a conexão HTTP entre a Bird e seu endpoint expire. Embora você possa ajustar as configurações de tempo limite da conexão em seu balanceador de carga, não há garantias de que a conexão não ficará sem resposta do lado da transmissão (neste caso, a Bird) ou de que a conexão não será encerrada antes que sua função lambda termine de executar. É uma boa prática manter sua função consumidora o mais eficiente possível e reservar atividades de processamento de dados para processos posteriores sempre que possível – como converter o payload em formato JSON em um arquivo CSV, ou carregar os dados do evento em um banco de dados.
É importante notar que você pode precisar atualizar as permissões para sua função lambda. Seu papel de execução precisará de permissões PutObject e GetObject para o S3. É uma boa prática aplicar o princípio do menor privilégio, então recomendo definir essas permissões apenas para o bucket S3 onde os payloads do webhook serão armazenados.
Um exemplo de nossa função lambda consumidora pode ser encontrado aqui.
Como uma nota rápida sobre o ID do lote: a Bird irá agrupar eventos em um único payload, onde cada lote pode conter de 1 a 350 ou mais registros de eventos. O lote receberá um ID único, que pode ser usado para visualizar o status do lote aproveitando a API de Webhooks de Eventos ou dentro da sua conta da Bird, clicando em um fluxo de webhook e selecionando “Status do Lote.” No caso de um payload de webhook não puder ser entregue, como durante um tempo limite de conexão, a Bird irá automaticamente tentar novamente o lote usando o mesmo ID do lote. Isso pode acontecer quando sua função lambda está sendo executada próximo ao tempo máximo de ida e volta de 10 segundos e é um motivo para otimizar a função consumidora para reduzir o tempo de execução.
Para lidar com todas as atividades de processamento de dados, recomendo criar uma função lambda separada que execute sempre que um novo arquivo for criado no bucket S3 – assim, o processamento dos dados é realizado de forma assíncrona à transmissão dos dados, e não há risco de perda de dados devido a uma conexão encerrada. Eu discuto a função lambda de processamento em uma seção posterior.
O processamento real e o armazenamento dos dados serão realizados por uma função lambda que é invocada pelo nosso balanceador de carga da aplicação (ALB).
O primeiro passo é criar sua função lambda navegando até o serviço Lambda na AWS e clicando em “Criar Função.” Você será solicitado a atribuir um nome à sua função lambda e selecionar em qual linguagem de programação deseja escrever sua função. Para este exemplo, usamos Python como a linguagem de execução.
Agora precisamos desenvolver nossa função lambda. Por um momento, vamos supor que nosso balanceador de carga da aplicação foi configurado e está encaminhando o payload do webhook para a nossa função lambda – a lambda receberá um payload incluindo todos os cabeçalhos e o corpo. O payload é passado para nossa função lambda usando o objeto “event” como um dicionário. Você pode fazer referência aos cabeçalhos e ao corpo do payload de forma independente acessando os objetos “headers” e “body” dentro do payload. Neste exemplo, vamos simplesmente ler o cabeçalho “x-messagesystems-batch-id”, onde o ID do lote é um valor único criado pela Bird para o lote do webhook, e usá-lo como o nome do arquivo ao armazenar o corpo como um arquivo plano no S3; no entanto, você pode querer adicionar funcionalidades adicionais, como verificações de autenticação ou tratamento de erros, conforme necessário.
Ao armazenar o payload em um arquivo plano no S3, precisaremos definir o nome do bucket S3, a localização e o nome do arquivo onde os dados do payload serão armazenados. Em nossa função lambda de exemplo, fazemos isso dentro da função “store_batch”. Neste exemplo, vamos armazenar todo o lote como um único arquivo, o que ajuda a garantir que os dados sejam coletados e armazenados antes que a conexão HTTP entre a Bird e seu endpoint expire. Embora você possa ajustar as configurações de tempo limite da conexão em seu balanceador de carga, não há garantias de que a conexão não ficará sem resposta do lado da transmissão (neste caso, a Bird) ou de que a conexão não será encerrada antes que sua função lambda termine de executar. É uma boa prática manter sua função consumidora o mais eficiente possível e reservar atividades de processamento de dados para processos posteriores sempre que possível – como converter o payload em formato JSON em um arquivo CSV, ou carregar os dados do evento em um banco de dados.
É importante notar que você pode precisar atualizar as permissões para sua função lambda. Seu papel de execução precisará de permissões PutObject e GetObject para o S3. É uma boa prática aplicar o princípio do menor privilégio, então recomendo definir essas permissões apenas para o bucket S3 onde os payloads do webhook serão armazenados.
Um exemplo de nossa função lambda consumidora pode ser encontrado aqui.
Como uma nota rápida sobre o ID do lote: a Bird irá agrupar eventos em um único payload, onde cada lote pode conter de 1 a 350 ou mais registros de eventos. O lote receberá um ID único, que pode ser usado para visualizar o status do lote aproveitando a API de Webhooks de Eventos ou dentro da sua conta da Bird, clicando em um fluxo de webhook e selecionando “Status do Lote.” No caso de um payload de webhook não puder ser entregue, como durante um tempo limite de conexão, a Bird irá automaticamente tentar novamente o lote usando o mesmo ID do lote. Isso pode acontecer quando sua função lambda está sendo executada próximo ao tempo máximo de ida e volta de 10 segundos e é um motivo para otimizar a função consumidora para reduzir o tempo de execução.
Para lidar com todas as atividades de processamento de dados, recomendo criar uma função lambda separada que execute sempre que um novo arquivo for criado no bucket S3 – assim, o processamento dos dados é realizado de forma assíncrona à transmissão dos dados, e não há risco de perda de dados devido a uma conexão encerrada. Eu discuto a função lambda de processamento em uma seção posterior.
O processamento real e o armazenamento dos dados serão realizados por uma função lambda que é invocada pelo nosso balanceador de carga da aplicação (ALB).
O primeiro passo é criar sua função lambda navegando até o serviço Lambda na AWS e clicando em “Criar Função.” Você será solicitado a atribuir um nome à sua função lambda e selecionar em qual linguagem de programação deseja escrever sua função. Para este exemplo, usamos Python como a linguagem de execução.
Agora precisamos desenvolver nossa função lambda. Por um momento, vamos supor que nosso balanceador de carga da aplicação foi configurado e está encaminhando o payload do webhook para a nossa função lambda – a lambda receberá um payload incluindo todos os cabeçalhos e o corpo. O payload é passado para nossa função lambda usando o objeto “event” como um dicionário. Você pode fazer referência aos cabeçalhos e ao corpo do payload de forma independente acessando os objetos “headers” e “body” dentro do payload. Neste exemplo, vamos simplesmente ler o cabeçalho “x-messagesystems-batch-id”, onde o ID do lote é um valor único criado pela Bird para o lote do webhook, e usá-lo como o nome do arquivo ao armazenar o corpo como um arquivo plano no S3; no entanto, você pode querer adicionar funcionalidades adicionais, como verificações de autenticação ou tratamento de erros, conforme necessário.
Ao armazenar o payload em um arquivo plano no S3, precisaremos definir o nome do bucket S3, a localização e o nome do arquivo onde os dados do payload serão armazenados. Em nossa função lambda de exemplo, fazemos isso dentro da função “store_batch”. Neste exemplo, vamos armazenar todo o lote como um único arquivo, o que ajuda a garantir que os dados sejam coletados e armazenados antes que a conexão HTTP entre a Bird e seu endpoint expire. Embora você possa ajustar as configurações de tempo limite da conexão em seu balanceador de carga, não há garantias de que a conexão não ficará sem resposta do lado da transmissão (neste caso, a Bird) ou de que a conexão não será encerrada antes que sua função lambda termine de executar. É uma boa prática manter sua função consumidora o mais eficiente possível e reservar atividades de processamento de dados para processos posteriores sempre que possível – como converter o payload em formato JSON em um arquivo CSV, ou carregar os dados do evento em um banco de dados.
É importante notar que você pode precisar atualizar as permissões para sua função lambda. Seu papel de execução precisará de permissões PutObject e GetObject para o S3. É uma boa prática aplicar o princípio do menor privilégio, então recomendo definir essas permissões apenas para o bucket S3 onde os payloads do webhook serão armazenados.
Um exemplo de nossa função lambda consumidora pode ser encontrado aqui.
Como uma nota rápida sobre o ID do lote: a Bird irá agrupar eventos em um único payload, onde cada lote pode conter de 1 a 350 ou mais registros de eventos. O lote receberá um ID único, que pode ser usado para visualizar o status do lote aproveitando a API de Webhooks de Eventos ou dentro da sua conta da Bird, clicando em um fluxo de webhook e selecionando “Status do Lote.” No caso de um payload de webhook não puder ser entregue, como durante um tempo limite de conexão, a Bird irá automaticamente tentar novamente o lote usando o mesmo ID do lote. Isso pode acontecer quando sua função lambda está sendo executada próximo ao tempo máximo de ida e volta de 10 segundos e é um motivo para otimizar a função consumidora para reduzir o tempo de execução.
Para lidar com todas as atividades de processamento de dados, recomendo criar uma função lambda separada que execute sempre que um novo arquivo for criado no bucket S3 – assim, o processamento dos dados é realizado de forma assíncrona à transmissão dos dados, e não há risco de perda de dados devido a uma conexão encerrada. Eu discuto a função lambda de processamento em uma seção posterior.
Crie um Balanceador de Carga para Aplicações
Para receber um payload de webhook, precisamos fornecer um endpoint para onde enviar os payloads. Fazemos isso criando um balanceador de carga de aplicativo dentro da AWS, navegando até EC2 > Balanceadores de Carga e clicando em “Criar Balanceador de Carga.” Você será solicitado a escolher qual tipo de balanceador de carga deseja criar – para isto, queremos criar um balanceador de carga de aplicativo. Precisamos usar um balanceador de carga de aplicativo (ALB) para construir nosso consumidor porque os webhooks de eventos serão enviados como uma solicitação HTTP, e os ALBs são usados para roteamento de solicitações HTTP dentro da AWS. Poderíamos implementar um Gateway HTTP como uma alternativa; no entanto, usamos um ALB para este projeto porque é mais leve e econômico do que um Gateway HTTP. É importante notar que se você optar por usar um Gateway HTTP, o formato do evento pode ser diferente do que com um ALB, e, portanto, sua função lambda precisará lidar com o objeto de solicitação de acordo.
Uma vez que seu ALB tenha sido criado, você será solicitado a atribuir um nome ao seu ALB e configurar o esquema e as configurações de acesso/securança – já que planejamos receber dados de evento de uma fonte externa (Bird), queremos que nosso ALB seja voltado para a internet. Sob “Listeners and routing,” o ALB deve escutar HTTPS na porta 443, e queremos criar um grupo de destino que aponte para nossa função lambda para que nosso ALB encaminhe as solicitações de entrada para a função lambda de consumo que criamos acima. Você também precisa garantir que o grupo de segurança tenha permissão para aceitar tráfego pela porta 443.
Para receber um payload de webhook, precisamos fornecer um endpoint para onde enviar os payloads. Fazemos isso criando um balanceador de carga de aplicativo dentro da AWS, navegando até EC2 > Balanceadores de Carga e clicando em “Criar Balanceador de Carga.” Você será solicitado a escolher qual tipo de balanceador de carga deseja criar – para isto, queremos criar um balanceador de carga de aplicativo. Precisamos usar um balanceador de carga de aplicativo (ALB) para construir nosso consumidor porque os webhooks de eventos serão enviados como uma solicitação HTTP, e os ALBs são usados para roteamento de solicitações HTTP dentro da AWS. Poderíamos implementar um Gateway HTTP como uma alternativa; no entanto, usamos um ALB para este projeto porque é mais leve e econômico do que um Gateway HTTP. É importante notar que se você optar por usar um Gateway HTTP, o formato do evento pode ser diferente do que com um ALB, e, portanto, sua função lambda precisará lidar com o objeto de solicitação de acordo.
Uma vez que seu ALB tenha sido criado, você será solicitado a atribuir um nome ao seu ALB e configurar o esquema e as configurações de acesso/securança – já que planejamos receber dados de evento de uma fonte externa (Bird), queremos que nosso ALB seja voltado para a internet. Sob “Listeners and routing,” o ALB deve escutar HTTPS na porta 443, e queremos criar um grupo de destino que aponte para nossa função lambda para que nosso ALB encaminhe as solicitações de entrada para a função lambda de consumo que criamos acima. Você também precisa garantir que o grupo de segurança tenha permissão para aceitar tráfego pela porta 443.
Para receber um payload de webhook, precisamos fornecer um endpoint para onde enviar os payloads. Fazemos isso criando um balanceador de carga de aplicativo dentro da AWS, navegando até EC2 > Balanceadores de Carga e clicando em “Criar Balanceador de Carga.” Você será solicitado a escolher qual tipo de balanceador de carga deseja criar – para isto, queremos criar um balanceador de carga de aplicativo. Precisamos usar um balanceador de carga de aplicativo (ALB) para construir nosso consumidor porque os webhooks de eventos serão enviados como uma solicitação HTTP, e os ALBs são usados para roteamento de solicitações HTTP dentro da AWS. Poderíamos implementar um Gateway HTTP como uma alternativa; no entanto, usamos um ALB para este projeto porque é mais leve e econômico do que um Gateway HTTP. É importante notar que se você optar por usar um Gateway HTTP, o formato do evento pode ser diferente do que com um ALB, e, portanto, sua função lambda precisará lidar com o objeto de solicitação de acordo.
Uma vez que seu ALB tenha sido criado, você será solicitado a atribuir um nome ao seu ALB e configurar o esquema e as configurações de acesso/securança – já que planejamos receber dados de evento de uma fonte externa (Bird), queremos que nosso ALB seja voltado para a internet. Sob “Listeners and routing,” o ALB deve escutar HTTPS na porta 443, e queremos criar um grupo de destino que aponte para nossa função lambda para que nosso ALB encaminhe as solicitações de entrada para a função lambda de consumo que criamos acima. Você também precisa garantir que o grupo de segurança tenha permissão para aceitar tráfego pela porta 443.
Crie um Registro DNS para o Balanceador de Carga
Para facilitar o uso do nosso ALB como um endpoint, criaremos um registro A no DNS que aponte para o nosso ALB. Para isso, podemos usar o serviço AWS Route 53 (ou seu provedor de DNS atual) e criar um registro A para o nome de host que você deseja usar para seu endpoint (por exemplo, spevents.<seu_dominio>). Ao trabalhar com DNS em grande escala na AWS, esteja ciente de que existem limites de DNS não documentados que podem afetar aplicações de alto volume, especialmente aquelas que lidam com grandes quantidades de tráfego de saída como sistemas de entrega de email. O registro A deve ser configurado para apontar para o ALB que criamos. Se você estiver usando o Route 53 para gerenciar os registros DNS, pode referenciar diretamente a instância ALB habilitando "Alias" e selecionando o ALB; caso contrário, se você estiver usando um provedor de DNS externo, deve apontar o registro A para o endereço IP público da instância ALB.
Eu recomendo usar uma ferramenta como o Postman para testar se tudo foi configurado corretamente antes de habilitar seu webhook do Bird. Você pode fazer uma solicitação POST para seu endpoint e confirmar que uma resposta foi recebida. Se sua solicitação POST não retornar uma resposta, pode ser necessário verificar novamente se seu ALB está ouvindo na porta correta.
Para facilitar o uso do nosso ALB como um endpoint, criaremos um registro A no DNS que aponte para o nosso ALB. Para isso, podemos usar o serviço AWS Route 53 (ou seu provedor de DNS atual) e criar um registro A para o nome de host que você deseja usar para seu endpoint (por exemplo, spevents.<seu_dominio>). Ao trabalhar com DNS em grande escala na AWS, esteja ciente de que existem limites de DNS não documentados que podem afetar aplicações de alto volume, especialmente aquelas que lidam com grandes quantidades de tráfego de saída como sistemas de entrega de email. O registro A deve ser configurado para apontar para o ALB que criamos. Se você estiver usando o Route 53 para gerenciar os registros DNS, pode referenciar diretamente a instância ALB habilitando "Alias" e selecionando o ALB; caso contrário, se você estiver usando um provedor de DNS externo, deve apontar o registro A para o endereço IP público da instância ALB.
Eu recomendo usar uma ferramenta como o Postman para testar se tudo foi configurado corretamente antes de habilitar seu webhook do Bird. Você pode fazer uma solicitação POST para seu endpoint e confirmar que uma resposta foi recebida. Se sua solicitação POST não retornar uma resposta, pode ser necessário verificar novamente se seu ALB está ouvindo na porta correta.
Para facilitar o uso do nosso ALB como um endpoint, criaremos um registro A no DNS que aponte para o nosso ALB. Para isso, podemos usar o serviço AWS Route 53 (ou seu provedor de DNS atual) e criar um registro A para o nome de host que você deseja usar para seu endpoint (por exemplo, spevents.<seu_dominio>). Ao trabalhar com DNS em grande escala na AWS, esteja ciente de que existem limites de DNS não documentados que podem afetar aplicações de alto volume, especialmente aquelas que lidam com grandes quantidades de tráfego de saída como sistemas de entrega de email. O registro A deve ser configurado para apontar para o ALB que criamos. Se você estiver usando o Route 53 para gerenciar os registros DNS, pode referenciar diretamente a instância ALB habilitando "Alias" e selecionando o ALB; caso contrário, se você estiver usando um provedor de DNS externo, deve apontar o registro A para o endereço IP público da instância ALB.
Eu recomendo usar uma ferramenta como o Postman para testar se tudo foi configurado corretamente antes de habilitar seu webhook do Bird. Você pode fazer uma solicitação POST para seu endpoint e confirmar que uma resposta foi recebida. Se sua solicitação POST não retornar uma resposta, pode ser necessário verificar novamente se seu ALB está ouvindo na porta correta.
Crie um Webhook de Pássaro
Agora estamos prontos para criar o webhook no Bird e usar o nome de host definido pelo registro A acima como nosso endpoint de destino. Para criar o webhook, navegue até a seção de Webhooks dentro da sua conta do Bird e clique em “Criar Webhook.” Você será solicitado a atribuir um nome ao seu webhook e fornecer uma URL de destino - o destino deve ser o nome de host do registro A que você criou anteriormente. Observe que a URL de destino pode exigir que “HTTPS://” seja incluído na URL.
Uma vez concluído, verifique se a subconta e os eventos corretos estão selecionados e pressione “Criar Webhook” para salvar sua configuração. Os dados do evento para todos os tipos de eventos selecionados agora serão transmitidos para nossa URL de destino e consumidos pelo nosso ALB para processamento posterior.
Agora estamos prontos para criar o webhook no Bird e usar o nome de host definido pelo registro A acima como nosso endpoint de destino. Para criar o webhook, navegue até a seção de Webhooks dentro da sua conta do Bird e clique em “Criar Webhook.” Você será solicitado a atribuir um nome ao seu webhook e fornecer uma URL de destino - o destino deve ser o nome de host do registro A que você criou anteriormente. Observe que a URL de destino pode exigir que “HTTPS://” seja incluído na URL.
Uma vez concluído, verifique se a subconta e os eventos corretos estão selecionados e pressione “Criar Webhook” para salvar sua configuração. Os dados do evento para todos os tipos de eventos selecionados agora serão transmitidos para nossa URL de destino e consumidos pelo nosso ALB para processamento posterior.
Agora estamos prontos para criar o webhook no Bird e usar o nome de host definido pelo registro A acima como nosso endpoint de destino. Para criar o webhook, navegue até a seção de Webhooks dentro da sua conta do Bird e clique em “Criar Webhook.” Você será solicitado a atribuir um nome ao seu webhook e fornecer uma URL de destino - o destino deve ser o nome de host do registro A que você criou anteriormente. Observe que a URL de destino pode exigir que “HTTPS://” seja incluído na URL.
Uma vez concluído, verifique se a subconta e os eventos corretos estão selecionados e pressione “Criar Webhook” para salvar sua configuração. Os dados do evento para todos os tipos de eventos selecionados agora serão transmitidos para nossa URL de destino e consumidos pelo nosso ALB para processamento posterior.
Processando Dados de Evento de Webhook
Dependendo do propósito pretendido para armazenar os dados do evento Bird, suas necessidades podem ser atendidas simplesmente armazenando a carga útil JSON como um arquivo plano. Você também pode ter um processo ETL a montante já estabelecido que é capaz de consumir e carregar dados em um formato JSON. Em ambos os casos, você pode ser capaz de usar o arquivo plano criado pela nossa função lambda de processamento que criamos acima como está.
Alternativamente, você pode precisar transformar os dados – como converter de um formato JSON para CSV – ou carregar os dados diretamente em um banco de dados. Neste exemplo, criaremos uma função lambda simples que converterá os dados do webhook do formato JSON original para um arquivo CSV que poderia ser carregado em um banco de dados.
Dependendo do propósito pretendido para armazenar os dados do evento Bird, suas necessidades podem ser atendidas simplesmente armazenando a carga útil JSON como um arquivo plano. Você também pode ter um processo ETL a montante já estabelecido que é capaz de consumir e carregar dados em um formato JSON. Em ambos os casos, você pode ser capaz de usar o arquivo plano criado pela nossa função lambda de processamento que criamos acima como está.
Alternativamente, você pode precisar transformar os dados – como converter de um formato JSON para CSV – ou carregar os dados diretamente em um banco de dados. Neste exemplo, criaremos uma função lambda simples que converterá os dados do webhook do formato JSON original para um arquivo CSV que poderia ser carregado em um banco de dados.
Dependendo do propósito pretendido para armazenar os dados do evento Bird, suas necessidades podem ser atendidas simplesmente armazenando a carga útil JSON como um arquivo plano. Você também pode ter um processo ETL a montante já estabelecido que é capaz de consumir e carregar dados em um formato JSON. Em ambos os casos, você pode ser capaz de usar o arquivo plano criado pela nossa função lambda de processamento que criamos acima como está.
Alternativamente, você pode precisar transformar os dados – como converter de um formato JSON para CSV – ou carregar os dados diretamente em um banco de dados. Neste exemplo, criaremos uma função lambda simples que converterá os dados do webhook do formato JSON original para um arquivo CSV que poderia ser carregado em um banco de dados.
Crie uma Lambda para Processar os Dados
Assim como a função lambda para consumir os dados do webhook, precisamos criar uma nova função lambda navegando até o serviço Lambda dentro da AWS e pressionando “Criar Função”. Esta nova função lambda será acionada quando um novo arquivo for criado em nosso bucket S3 – ela lerá os dados e os converterá em um novo arquivo csv.
A função lambda aceita as informações do arquivo como um evento. No exemplo da função lambda, você verá que primeiro temos uma série de verificações de validação para garantir que os dados estejam completos e formatados conforme esperado. Em seguida, convertemos a carga útil JSON em um arquivo CSV usando a biblioteca “csv” e escrevendo em um arquivo temporário. As funções Lambda só são capazes de escrever arquivos locais no diretório “/tmp”, então criamos um arquivo csv temporário e o nomeamos com a convenção <batch_id>.csv. A razão pela qual usamos o batch_id aqui é simplesmente para garantir que quaisquer processos paralelos que estão sendo executados como resultado do recebimento de várias cargas úteis de webhooks não interfiram uns com os outros, já que cada lote de webhook terá um batch_id exclusivo.
Depois que os dados foram totalmente convertidos para CSV, lemos os dados CSV como um fluxo de bytes, deletamos o arquivo temporário e salvamos os dados CSV como um novo arquivo no S3. É importante notar que um bucket S3 diferente é necessário para a saída, caso contrário, corremos o risco de criar um loop recursivo que pode resultar em aumento no uso da lambda e custos elevados. Precisamos identificar em qual bucket S3 e localização queremos que nosso arquivo CSV seja armazenado dentro de nossa função lambda. Siga o mesmo procedimento descrito acima para criar um novo bucket S3 para armazenar nosso arquivo CSV.
Note que o diretório tmp é limitado a 512 MB de espaço, por isso é importante que o arquivo temporário seja excluído posteriormente para garantir espaço suficiente para futuras execuções. A razão pela qual usamos um arquivo temporário, em vez de escrever diretamente no S3, é para simplificar a conexão ao S3 tendo uma única solicitação.
Assim como na função lambda de consumo, você pode precisar atualizar as permissões para sua função lambda de processo. Esta função lambda requer que a função de execução tenha permissões GetObject para o bucket S3 de entrada, e tanto PutObject quanto GetObject para o bucket S3 de saída.
Um exemplo de nossa função lambda de processamento pode ser encontrado aqui.
Assim como a função lambda para consumir os dados do webhook, precisamos criar uma nova função lambda navegando até o serviço Lambda dentro da AWS e pressionando “Criar Função”. Esta nova função lambda será acionada quando um novo arquivo for criado em nosso bucket S3 – ela lerá os dados e os converterá em um novo arquivo csv.
A função lambda aceita as informações do arquivo como um evento. No exemplo da função lambda, você verá que primeiro temos uma série de verificações de validação para garantir que os dados estejam completos e formatados conforme esperado. Em seguida, convertemos a carga útil JSON em um arquivo CSV usando a biblioteca “csv” e escrevendo em um arquivo temporário. As funções Lambda só são capazes de escrever arquivos locais no diretório “/tmp”, então criamos um arquivo csv temporário e o nomeamos com a convenção <batch_id>.csv. A razão pela qual usamos o batch_id aqui é simplesmente para garantir que quaisquer processos paralelos que estão sendo executados como resultado do recebimento de várias cargas úteis de webhooks não interfiram uns com os outros, já que cada lote de webhook terá um batch_id exclusivo.
Depois que os dados foram totalmente convertidos para CSV, lemos os dados CSV como um fluxo de bytes, deletamos o arquivo temporário e salvamos os dados CSV como um novo arquivo no S3. É importante notar que um bucket S3 diferente é necessário para a saída, caso contrário, corremos o risco de criar um loop recursivo que pode resultar em aumento no uso da lambda e custos elevados. Precisamos identificar em qual bucket S3 e localização queremos que nosso arquivo CSV seja armazenado dentro de nossa função lambda. Siga o mesmo procedimento descrito acima para criar um novo bucket S3 para armazenar nosso arquivo CSV.
Note que o diretório tmp é limitado a 512 MB de espaço, por isso é importante que o arquivo temporário seja excluído posteriormente para garantir espaço suficiente para futuras execuções. A razão pela qual usamos um arquivo temporário, em vez de escrever diretamente no S3, é para simplificar a conexão ao S3 tendo uma única solicitação.
Assim como na função lambda de consumo, você pode precisar atualizar as permissões para sua função lambda de processo. Esta função lambda requer que a função de execução tenha permissões GetObject para o bucket S3 de entrada, e tanto PutObject quanto GetObject para o bucket S3 de saída.
Um exemplo de nossa função lambda de processamento pode ser encontrado aqui.
Assim como a função lambda para consumir os dados do webhook, precisamos criar uma nova função lambda navegando até o serviço Lambda dentro da AWS e pressionando “Criar Função”. Esta nova função lambda será acionada quando um novo arquivo for criado em nosso bucket S3 – ela lerá os dados e os converterá em um novo arquivo csv.
A função lambda aceita as informações do arquivo como um evento. No exemplo da função lambda, você verá que primeiro temos uma série de verificações de validação para garantir que os dados estejam completos e formatados conforme esperado. Em seguida, convertemos a carga útil JSON em um arquivo CSV usando a biblioteca “csv” e escrevendo em um arquivo temporário. As funções Lambda só são capazes de escrever arquivos locais no diretório “/tmp”, então criamos um arquivo csv temporário e o nomeamos com a convenção <batch_id>.csv. A razão pela qual usamos o batch_id aqui é simplesmente para garantir que quaisquer processos paralelos que estão sendo executados como resultado do recebimento de várias cargas úteis de webhooks não interfiram uns com os outros, já que cada lote de webhook terá um batch_id exclusivo.
Depois que os dados foram totalmente convertidos para CSV, lemos os dados CSV como um fluxo de bytes, deletamos o arquivo temporário e salvamos os dados CSV como um novo arquivo no S3. É importante notar que um bucket S3 diferente é necessário para a saída, caso contrário, corremos o risco de criar um loop recursivo que pode resultar em aumento no uso da lambda e custos elevados. Precisamos identificar em qual bucket S3 e localização queremos que nosso arquivo CSV seja armazenado dentro de nossa função lambda. Siga o mesmo procedimento descrito acima para criar um novo bucket S3 para armazenar nosso arquivo CSV.
Note que o diretório tmp é limitado a 512 MB de espaço, por isso é importante que o arquivo temporário seja excluído posteriormente para garantir espaço suficiente para futuras execuções. A razão pela qual usamos um arquivo temporário, em vez de escrever diretamente no S3, é para simplificar a conexão ao S3 tendo uma única solicitação.
Assim como na função lambda de consumo, você pode precisar atualizar as permissões para sua função lambda de processo. Esta função lambda requer que a função de execução tenha permissões GetObject para o bucket S3 de entrada, e tanto PutObject quanto GetObject para o bucket S3 de saída.
Um exemplo de nossa função lambda de processamento pode ser encontrado aqui.
Configure uma Lambda para Executar Quando Novos Dados Forem Armazenados no S3
Agora que nossa função lambda para converter o arquivo do formato JSON para CSV foi criada, precisamos configurá-la para ser acionada quando um novo arquivo for criado em nosso bucket S3. Para fazer isso, precisamos adicionar um acionador à nossa função lambda, abrindo nossa função lambda e clicando em “Adicionar Acionador” no topo da página. Selecione “S3” e forneça o nome do bucket S3 onde os payloads brutos do webhook estão armazenados. Você também tem a opção de especificar um prefixo e/ou sufixo de arquivo para filtrar. Depois que as configurações forem configuradas, você pode adicionar o acionador clicando em “Adicionar” na parte inferior da página. Agora sua função lambda de processamento será executada sempre que um novo arquivo for adicionado ao seu bucket S3.
Agora que nossa função lambda para converter o arquivo do formato JSON para CSV foi criada, precisamos configurá-la para ser acionada quando um novo arquivo for criado em nosso bucket S3. Para fazer isso, precisamos adicionar um acionador à nossa função lambda, abrindo nossa função lambda e clicando em “Adicionar Acionador” no topo da página. Selecione “S3” e forneça o nome do bucket S3 onde os payloads brutos do webhook estão armazenados. Você também tem a opção de especificar um prefixo e/ou sufixo de arquivo para filtrar. Depois que as configurações forem configuradas, você pode adicionar o acionador clicando em “Adicionar” na parte inferior da página. Agora sua função lambda de processamento será executada sempre que um novo arquivo for adicionado ao seu bucket S3.
Agora que nossa função lambda para converter o arquivo do formato JSON para CSV foi criada, precisamos configurá-la para ser acionada quando um novo arquivo for criado em nosso bucket S3. Para fazer isso, precisamos adicionar um acionador à nossa função lambda, abrindo nossa função lambda e clicando em “Adicionar Acionador” no topo da página. Selecione “S3” e forneça o nome do bucket S3 onde os payloads brutos do webhook estão armazenados. Você também tem a opção de especificar um prefixo e/ou sufixo de arquivo para filtrar. Depois que as configurações forem configuradas, você pode adicionar o acionador clicando em “Adicionar” na parte inferior da página. Agora sua função lambda de processamento será executada sempre que um novo arquivo for adicionado ao seu bucket S3.
Carregando os dados em um banco de dados
Neste exemplo, não abordarei em detalhes como carregar os dados em um banco de dados, mas se você tem acompanhado este exemplo, você tem algumas opções:
Carregar os dados diretamente no seu banco de dados dentro da sua função lambda de processamento
Consumir seu arquivo CSV usando um processo ETL estabelecido
Se você está utilizando um serviço de banco de dados da AWS, como RDS ou DynamoDB, ou se você tem seu próprio banco de dados PostgreSQL (ou similar), você pode se conectar ao seu serviço de banco de dados diretamente da sua função lambda de processo. Por exemplo, da mesma forma que chamamos o serviço S3 usando “boto3” em nossa função lambda, você também poderia usar “boto3” para chamar o RDS ou o DynamoDB. O serviço AWS Athena também pode ser usado para ler os arquivos de dados diretamente dos arquivos planos e acessar os dados usando uma linguagem de consulta semelhante ao SQL. Recomendo consultar a documentação respectiva do serviço que você está utilizando para mais informações sobre como realizar isso da melhor maneira em seu ambiente.
Da mesma forma, existem muitos serviços disponíveis que podem ajudar a consumir arquivos CSV e carregar os dados em um banco de dados. Você pode já ter um processo ETL estabelecido que pode aproveitar.
Esperamos que você tenha achado este guia útil - boa sorte!
Neste exemplo, não abordarei em detalhes como carregar os dados em um banco de dados, mas se você tem acompanhado este exemplo, você tem algumas opções:
Carregar os dados diretamente no seu banco de dados dentro da sua função lambda de processamento
Consumir seu arquivo CSV usando um processo ETL estabelecido
Se você está utilizando um serviço de banco de dados da AWS, como RDS ou DynamoDB, ou se você tem seu próprio banco de dados PostgreSQL (ou similar), você pode se conectar ao seu serviço de banco de dados diretamente da sua função lambda de processo. Por exemplo, da mesma forma que chamamos o serviço S3 usando “boto3” em nossa função lambda, você também poderia usar “boto3” para chamar o RDS ou o DynamoDB. O serviço AWS Athena também pode ser usado para ler os arquivos de dados diretamente dos arquivos planos e acessar os dados usando uma linguagem de consulta semelhante ao SQL. Recomendo consultar a documentação respectiva do serviço que você está utilizando para mais informações sobre como realizar isso da melhor maneira em seu ambiente.
Da mesma forma, existem muitos serviços disponíveis que podem ajudar a consumir arquivos CSV e carregar os dados em um banco de dados. Você pode já ter um processo ETL estabelecido que pode aproveitar.
Esperamos que você tenha achado este guia útil - boa sorte!
Neste exemplo, não abordarei em detalhes como carregar os dados em um banco de dados, mas se você tem acompanhado este exemplo, você tem algumas opções:
Carregar os dados diretamente no seu banco de dados dentro da sua função lambda de processamento
Consumir seu arquivo CSV usando um processo ETL estabelecido
Se você está utilizando um serviço de banco de dados da AWS, como RDS ou DynamoDB, ou se você tem seu próprio banco de dados PostgreSQL (ou similar), você pode se conectar ao seu serviço de banco de dados diretamente da sua função lambda de processo. Por exemplo, da mesma forma que chamamos o serviço S3 usando “boto3” em nossa função lambda, você também poderia usar “boto3” para chamar o RDS ou o DynamoDB. O serviço AWS Athena também pode ser usado para ler os arquivos de dados diretamente dos arquivos planos e acessar os dados usando uma linguagem de consulta semelhante ao SQL. Recomendo consultar a documentação respectiva do serviço que você está utilizando para mais informações sobre como realizar isso da melhor maneira em seu ambiente.
Da mesma forma, existem muitos serviços disponíveis que podem ajudar a consumir arquivos CSV e carregar os dados em um banco de dados. Você pode já ter um processo ETL estabelecido que pode aproveitar.
Esperamos que você tenha achado este guia útil - boa sorte!



