Skip to content

Israel-SoaresPorto/lambda-challenge

Repository files navigation

Laboratório: Processamento Automático de Arquivos com AWS Lambda

Este laboratório demonstra a construção de uma solução serverless na AWS que processa automaticamente arquivos de texto enviados ao Amazon S3, realizando contagem de palavras e enviando notificações por e-mail através do Amazon SNS.

Objetivos

  • Configurar permissões IAM para funções Lambda
  • Criar um bucket S3 para armazenamento de arquivos de teste
  • Desenvolver uma função Lambda em Python para processamento de arquivos
  • Configurar um tópico SNS para envio de notificações
  • Implementar gatilhos S3 para execução automática da função
  • Testar o fluxo completo de upload e processamento

Arquitetura

A solução segue uma arquitetura orientada a eventos, onde o Amazon S3 atua como fonte de eventos que disparam a execução da função Lambda. O resultado do processamento é então publicado no Amazon SNS, que distribui notificações por e-mail.

Arquitetura do Laboratório

Componentes:

  • Amazon S3: Armazena os arquivos de texto e dispara eventos quando novos objetos são criados
  • AWS Lambda: Processa o arquivo, realiza a contagem de palavras e publica o resultado
  • Amazon SNS: Distribui notificações por e-mail com o resultado do processamento
  • IAM Role: Fornece permissões necessárias para a função Lambda acessar S3 e SNS

1. Configuração de Permissões IAM

1.1 Perfil de Execução Lambda

O laboratório utiliza um perfil IAM pré-configurado chamado LambdaAccessRole que concede as permissões necessárias para a função Lambda interagir com outros serviços AWS.

Perfil IAM

Políticas gerenciadas anexadas:

  • AmazonS3FullAccess: Permite leitura e escrita no S3
  • AmazonSNSFullAccess: Permite publicação de mensagens no SNS
  • AWSLambdaBasicExecutionRole: Fornece permissões para logs no CloudWatch

Este perfil é fundamental para o modelo de segurança least privilege, garantindo que a função Lambda tenha apenas as permissões necessárias para executar suas tarefas.

2. Criação do Bucket S3

2.1 Configuração do Bucket de Teste

O bucket S3 serve como ponto de entrada para o processamento. Quando um arquivo de texto é enviado para este bucket, ele automaticamente dispara a execução da função Lambda.

Criar Bucket S3

Configurações aplicadas:

  • Nome do bucket: lambda-challenge-bucket-69837
  • Região: us-west-2 (Oregon)
  • Tipo: Propósito geral
  • Namespace: Global

O bucket foi configurado com as opções padrão, mantendo o versionamento desabilitado e bloqueio público de acesso ativado por segurança.

3. Criação da Função Lambda

3.1 Configuração Inicial

A função Lambda foi criada a partir do zero (author from scratch), utilizando Python 3.14 como runtime.

Criar Função Lambda - Parte 1

Informações básicas:

  • Nome da função: file-word-count
  • Runtime: Python 3.14
  • Arquitetura: x86_64

3.2 Configuração de Permissões

O perfil LambdaAccessRole foi associado à função durante a criação, fornecendo as credenciais necessárias para acesso aos serviços.

Criar Função Lambda - Parte 2

A opção "Usar outro perfil" foi selecionada para utilizar o perfil IAM pré-configurado no laboratório.

3.3 Implementação da Lógica de Processamento

O código da função Lambda implementa a lógica de processamento de arquivos de texto com as seguintes etapas:

Código da Função

Funcionalidades implementadas:

  1. Captura do evento S3: Extrai informações do bucket e chave do objeto
  2. Download do arquivo: Obtém o conteúdo do arquivo de texto do S3
  3. Contagem de palavras: Processa o texto e conta o número total de palavras
  4. Publicação no SNS: Envia notificação com o resultado da contagem

O código utiliza as bibliotecas boto3 (AWS SDK para Python) e json para manipulação de dados.

3.4 Variáveis de Ambiente

A função utiliza variáveis de ambiente para configuração dinâmica, permitindo alterar o tópico SNS sem modificar o código.

Variáveis de Ambiente

Variável configurada:

  • Chave: SNS_TOPIC_ARN
  • Valor: arn:aws:sns:us-west-2:145772190089:fileWordCountTopic

Esta abordagem segue as melhores práticas de desenvolvimento cloud-native, separando configuração de código.

4. Configuração do Amazon SNS

4.1 Criação do Tópico

O Amazon SNS (Simple Notification Service) foi configurado para distribuir as notificações de processamento.

Criar Tópico SNS

Configurações do tópico:

  • Tipo: Padrão (Standard)
  • Nome: fileWordCountTopic
  • Nome de exibição: FWCTopic

O tipo "Padrão" foi escolhido por oferecer melhor esforço de ordenação de mensagens e suporte para múltiplos protocolos de assinatura, incluindo e-mail, SMS e Lambda.

4.2 Configuração de Assinatura

Uma assinatura por e-mail foi criada para receber as notificações de processamento.

Criar Assinatura SNS

Detalhes da assinatura:

  • ARN do tópico: arn:aws:sns:us-west-2:145772190089:fileWordCountTopic
  • Protocolo: E-mail
  • Endpoint: Endereço de e-mail do destinatário

Após a criação, é necessário confirmar a assinatura através do link enviado para o e-mail cadastrado.

5. Configuração do Gatilho S3

5.1 Adição do Trigger

O gatilho (trigger) conecta o bucket S3 à função Lambda, estabelecendo a arquitetura orientada a eventos.

Adicionar Gatilho S3

Configuração do gatilho:

  • Fonte: S3
  • Bucket: s3/lambda-challenge-bucket-69837
  • Tipo de evento: All object create events (todos os eventos de criação de objetos)
  • Região: us-west-2

Quando um arquivo é carregado no bucket, o S3 automaticamente invoca a função Lambda, passando metadados do evento através do parâmetro event.

5.2 Arquitetura de Invocação

O Lambda adiciona automaticamente as permissões necessárias para que o S3 possa invocar a função, estabelecendo uma política de recursos (resource-based policy) na função.

6. Testes e Validação

6.1 Teste Inicial da Função

Antes de testar com arquivos reais, a função foi validada através do console Lambda usando eventos de teste simulados.

Criar Evento de Teste - Parte 1

Configuração do teste:

  • Nome do evento: fwc-test
  • Tipo de invocação: Síncrono
  • Template: Evento S3 personalizado

6.2 Payload do Evento de Teste

O evento JSON simula a estrutura de um evento real do S3, contendo informações sobre o bucket e o objeto.

Criar Evento de Teste - Parte 2

O JSON inclui:

  • Versão e fonte do evento
  • Região AWS
  • Identificadores de requisição
  • Informações do bucket S3
  • Chave do objeto (lambda_test.txt)

6.3 Resultado do Teste

A execução do teste foi bem-sucedida, confirmando que a lógica da função está funcionando corretamente.

Teste Bem-Sucedido

Métricas de execução:

  • Status: 200 (Executando função: bem-sucedida)
  • Tempo de execução: 672 ms
  • Memória configurada: 128 MB
  • Memória máxima usada: 96 MB
  • Duração de inicialização: 516.38 ms

Os logs mostram que a notificação foi enviada com sucesso para o SNS, contendo o resultado da contagem de palavras (55 palavras no arquivo lambda_test.txt).

6.4 Upload de Arquivo para Teste Real

Com a função validada, o próximo passo foi realizar um teste com upload real de arquivo no S3.

Upload de Arquivo

O arquivo (jornada_voyager.txt com 1.4 KB), foi carregado no bucket, disparando a execução da função Lambda.

6.5 Notificação por E-mail

Após o upload, a função Lambda foi automaticamente invocada pelo evento S3, processou o arquivo e publicou o resultado no SNS.

E-mail de Resultado

Conteúdo da notificação:

  • Assunto: Resultado: Contagem de palavras do arquivo jornada_voyager.txt
  • Remetente: FWCTopic (tópico SNS)
  • Mensagem:
    • "O arquivo 'jornada_voyager.txt' acabou de ser processado."
    • "Total de palavras encontradas: 222"

Conclusões e Aprendizados

Conceitos-Chave Aplicados

  • Arquitetura Serverless: A solução elimina a necessidade de gerenciar servidores, permitindo foco total na lógica de negócio. O AWS Lambda escala automaticamente conforme a demanda.

  • Event-Driven Architecture: O uso de eventos do S3 como gatilho cria um sistema reativo e desacoplado, onde cada componente opera de forma independente.

  • Integração de Serviços AWS: A combinação de S3, Lambda e SNS demonstra como diferentes serviços podem ser orquestrados para criar soluções completas sem infraestrutura complexa.

  • Segurança com IAM: O uso de roles e políticas específicas garante que cada componente tenha apenas as permissões necessárias, seguindo o princípio de least privilege.

  • Configuração via Variáveis de Ambiente: Separar configuração de código permite maior flexibilidade e reutilização da função Lambda em diferentes ambientes.

Referências usadas para o laboratório

About

Solução serverless orientada a eventos que processa arquivos de texto enviados ao Amazon S3. Utiliza uma função Lambda em Python para contar as palavras do documento e publica o resultado por e-mail via Amazon SNS.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages