Loading repository data…
Loading repository data…
Tiao553 / repository
Este repositório apresenta um projeto AWS para um Tech-Challenge de dados. Inclui a criação de um pipeline de ingestão (S3), processamento (Lambda/Glue), armazenamento (S3) e consumo (Athena). Utiliza Terraform para infraestrutura como código e scripts Python para automação.
Este projeto faz parte do Tech Challenge Fase 2 e tem como objetivo construir um pipeline de dados para extrair, processar e analisar dados do pregão da B3 utilizando serviços da AWS, como o S3, Glue, Lambda e Athena.
Este README detalha as etapas necessárias para configurar e executar o pipeline, bem como os entregáveis esperados.
A arquitetura do pipeline segue o diagrama abaixo:
Raw no Amazon S3 em formato Parquet e particionados por data.Refined em formato Parquet, particionados por data e abreviação da ação.Os seguintes requisitos devem ser atendidos:
Raw em formato Parquet.Refined em formato Parquet, particionados por data e abreviação da ação.Antes de iniciar, certifique-se de ter:
sudo apt update && sudo apt upgrade -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
sudo apt update && sudo apt upgrade -y
curl -fsSL "https://releases.hashicorp.com/terraform/X.Y.Z/terraform_X.Y.Z_linux_amd64.zip" -o terraform.zip
unzip terraform.zip
sudo mv terraform /usr/local/bin/
terraform --version
Configure suas credenciais AWS:
aws configure
us-east-1)terraform init
terraform apply
Esta etapa é responsável por extrair dados da B3 utilizando a API disponível executar a limpeza dos dados e fazer o upload para o bucket Raw no S3. O processo foi construindo utilizando a linguagem Python e as bibliotecas: boto3, pandas, selenium, pydantic.
boto3pandasseleniumpydanticInstale as dependências com:
pip install boto3 pandas selenium pydantic
Configuração do WebDriver: Utiliza o ChromeDriver gerenciado automaticamente com a biblioteca webdriver_manager.
Extração dos Dados: Realiza o download de arquivos parquet diretamente do site da B3.
Processamento Inicial: Limpeza de dados para remover linhas mescladas e padronizar o conteúdo.
Validação com Pydantic: Garante a integridade dos dados utilizando modelos de validação.
Validação com Pydantic: Garante a integridade dos dados utilizando modelos de validação.
Raw.Raw: Armazena os dados brutos enviados pelo scraping.Refined: Armazena os dados processados e otimizados para consulta.Ao desenvolver uma solução para executar uma função AWS Lambda, nos deparamos com uma limitação do tamanho das layers. O limite máximo permitido para layers descompactadas é de 250 MB, e nossas dependências ultrapassaram esse limite.
Diante dessa restrição, analisamos diferentes opções para contornar o problema e garantir que a função pudesse ser executada conforme o esperado. Abaixo estão as opções avaliadas e a decisão final adotada.
Dividir as dependências em mais de uma layer, mantendo cada layer dentro do limite de 250 MB.
Criar uma imagem Docker contendo o código e as dependências necessárias. O AWS Lambda suporta imagens de até 10 GB, o que resolveria o problema de limitação de tamanho.
Configurar a função Lambda para instalar as dependências necessárias durante a execução.
Optamos por instalar as dependências durante a execução da função Lambda (Opção 3). Embora essa abordagem tenha o contrapeso de um maior tempo de execução inicial, foi considerada a solução mais simples de implementar, dado que o SLA da função é diário e não exige resposta em tempo real.
Simplicidade: A solução elimina a necessidade de criar e gerenciar layers ou imagens Docker.
Flexibilidade: Permite adicionar ou atualizar dependências sem necessidade de alterar layers ou imagens.
Adequado ao SLA: O impacto no tempo de execução inicial é irrelevante dado que a função é executada apenas uma vez por dia.
Adicionar um script para instalar as dependências no runtime.
Configurar a função Lambda para acessar o repositório ou local de instalação (como o PyPI).
Verificar o desempenho e ajustar conforme necessário para garantir que o tempo de execução esteja dentro dos limites aceitáveis.
A abordagem adotada será continuamente monitorada para identificar possíveis gargalos de desempenho. Caso o SLA ou requisitos mudem no futuro, a solução poderá ser revisada e adaptada para atender às novas demandas.
Essa decisão reflete o equilíbrio entre simplicidade, funcionalidade e os requisitos atuais do projeto'