Com o objetivo de aprimorar minhas habilidades em construção de ETL de dados e explorar novas ferramentas e tecnologias de desenvolvimento na área de dados, embarquei em um projeto que utiliza os dados do CENIPA (Centro de Investigação e Prevenção de Acidentes Aeronáuticos). Esses dados contêm informações sobre:
- Ocorrências Aeronáuticas.
- Tipos de ocorrências aeronáuticas
- Aeronaves envolvidas nas ocorrências aeronáuticas
- Fatores contribuintes das ocorrências aeronáuticas
- Recomendações de Segurança emitidas nas investigações de acidentes
Com base nesses dados, todo o projeto foi desenvolvido utilizando a plataforma cloud AWS como infraestrutura principal. Ao longo do processo, foram aproveitadas as seguintes ferramentas da AWS:
- Lambda Function - Para processamento serveless.
- Step Function - Para orquestração.
- RDS (MySQL) - Para processamento analítico
- Glue Connection - Para armazenar credencias de acessos ao DB.
- S3 - Para armazenamento dos dados
- DynamoDb - Para armazenamento de logs.
- ECR - Para versionamento das lambdas.
No desenvolvimento da Lambda Function, optei pela a linguagem de programação Python onde utilizei as seguintes bibliotecas para a implementação da função:
- Polars - Para manipulação de dados.
- Aws Wrangler - Para interação com serviços AWS.
- Connectorx - Para leitura de tabelas em banco de dados.
A escolha de utilizacao das bibliotecas foram feitas com base na exploração de novos tecnologias, buscando aprimorar diversos aspectos do projeto tais como:
- Performance ao ler grandes arquivos de dados.
- Melhor interação com os servicos da AWS.
- Maior velocidade em leitura de dados diretamenta de tabelas vindo do banco de dados.
Para a parte de infraestrutura deste projeto, foi utilizado a ferramenta Terraform para contrução e gerenciamento dos serviços AWS. Com o terraform é possivel implementar uma infraestrutura como codigo, facilitando definir toda a infraestrutura necessaria de forma declarativa.
Desta forma utlizando o terraform é possivel proporcionar uma automatizacao e flexibilidade na utilização de servições AWS.
O projeto faz a utilização do Github Actions para realizar o deploy de forma automatizada dos serviçõs Lambda Function e Step Function.
Para visualizar a arquitetura do projeto, apresento o seguinte diagrama:
A primeira etapa á ser realizada é a criação do usuario no ambiente AWS. Para registrar-se de forma gratuita acesse este link e crie uma conta.
Após a criação da sua conta na AWS, será necessário realizar a criação da Secret no GitHub. Para facilitar esse processo, siga atentamente as orientações presentes na documentação sobre Segredos Criptografados. Estes segredos devem ser nomeados da seguinte forma:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
Ao finalizar a criação da secret, basta executar o seguinte pipeline para realizar o deploy do projeto:
Ao executar o workflow, é preciso definir o tipo de ação a ser realizado pelo pipeline:
- build - Realiza o deploy do projeto dentro do ambiente AWS.
- destroy - Remove o projeto do ambiente AWS, deletando todos os serviços e recursos.
- update - Atualiza o código da Lambda Function.
Após selecionar a ação desejada, simplesmente clique em Run workflow e aguarde até que o pipeline complete a execução.
Após a conclusão do pipeline, proceda efetuando o login no console da AWS e acesse o serviço Step Functions.
Em seguida vá em State Machines, e execute a seguinte state machine cenipa-etl-orchestration.
Para executar basta clicar no nome cenipa-etl-orchestration e ir em Start Execution.
Em seguida em Start Execution novamente.
Após a conclusão do processo ETL, para visualizar os dados de forma analítica, acesse o Streamlit Cloud através deste link.
O Streamlit Cloud é uma ferramenta de código aberto que permite hospedar gratuitamente os painéis desenvolvidos com o framework Streamlit.
Aqui está uma imagem ilustrativa do painel: