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.
- 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
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.
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
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.
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.
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.
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.
A função Lambda foi criada a partir do zero (author from scratch), utilizando Python 3.14 como runtime.
Informações básicas:
- Nome da função:
file-word-count - Runtime: Python 3.14
- Arquitetura: x86_64
O perfil LambdaAccessRole foi associado à função durante a criação, fornecendo as credenciais necessárias para acesso aos serviços.
A opção "Usar outro perfil" foi selecionada para utilizar o perfil IAM pré-configurado no laboratório.
O código da função Lambda implementa a lógica de processamento de arquivos de texto com as seguintes etapas:
Funcionalidades implementadas:
- Captura do evento S3: Extrai informações do bucket e chave do objeto
- Download do arquivo: Obtém o conteúdo do arquivo de texto do S3
- Contagem de palavras: Processa o texto e conta o número total de palavras
- 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.
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á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.
O Amazon SNS (Simple Notification Service) foi configurado para distribuir as notificações de processamento.
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.
Uma assinatura por e-mail foi criada para receber as notificações de processamento.
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.
O gatilho (trigger) conecta o bucket S3 à função Lambda, estabelecendo a arquitetura orientada a eventos.
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.
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.
Antes de testar com arquivos reais, a função foi validada através do console Lambda usando eventos de teste simulados.
Configuração do teste:
- Nome do evento:
fwc-test - Tipo de invocação: Síncrono
- Template: Evento S3 personalizado
O evento JSON simula a estrutura de um evento real do S3, contendo informações sobre o bucket e o objeto.
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)
A execução do teste foi bem-sucedida, confirmando que a lógica da função está funcionando corretamente.
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).
Com a função validada, o próximo passo foi realizar um teste com upload real de arquivo no S3.
O arquivo (jornada_voyager.txt com 1.4 KB), foi carregado no bucket, disparando a execução da função Lambda.
Após o upload, a função Lambda foi automaticamente invocada pelo evento S3, processou o arquivo e publicou o resultado no SNS.
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"
-
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.














