diff --git a/README.md b/README.md index 688b402..5a42683 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-
terraglue-logo +
terraglue-logo
@@ -14,93 +14,64 @@ ## Table of Contents - [Table of Contents](#table-of-contents) -- [Quickstart](#quickstart) - [O que é o terraglue?](#o-que-é-o-terraglue) - - [Motivadores e principais desafios](#motivadores-e-principais-desafios) - - [Quem pode utilizar o terraglue?](#quem-pode-utilizar-o-terraglue) + - [Público alvo](#público-alvo) - [Pré requisitos](#pré-requisitos) + - [Primeiros passos](#primeiros-passos) - [Arquitetura e organização do repositório](#arquitetura-e-organização-do-repositório) -- [Primeiros passos](#primeiros-passos) - - [Utilizando a solução](#utilizando-a-solução) - - [Infraestrutura provisionada](#infraestrutura-provisionada) - - [Aplicação Spark codificada](#aplicação-spark-codificada) - - [Cenários e exemplos de utilização](#cenários-e-exemplos-de-utilização) -- [Contribuindo](#contribuindo) +- [Está interessado e quer saber mais?](#está-interessado-e-quer-saber-mais) + - [A história por trás da criação](#a-história-por-trás-da-criação) + - [Uma jornada completa de consumo](#uma-jornada-completa-de-consumo) + - [Contribuindo](#contribuindo) + - [FAQ](#faq) - [Contatos](#contatos) - [Referências](#referências) ___ -## Quickstart - -> Se você está conhecendo o terraglue agora, sugerimos a leitura completa deste README.md antes de navegar para as documentações paralelas e complementares. Entretanto, se você já é um usuário assíduo do produto, os links abaixo poderão te direcionar de forma mais rápida e efetiva aos seus objetivos. Boa leitura! 🤓 - -- 👉 [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) *Você está aqui!* -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) - -___ - ## O que é o terraglue? -Imagine o seguinte cenário: você é alguém da área de dados com o desejo de aprender e explorar soluções envolvendo o processamento de dados na AWS, em especial o serviço [AWS Glue](https://aws.amazon.com/glue/) e todos os seus componentes relacionado. - -Nessa jornada, você procura por documentações, pesquisa em fóruns, assiste vídeos nas mais variadas plataformas mas, ainda sim, não sente a confiança necessária para entender e aplicar, de fato, todas as etapas de construção de um job de processamento de dados *end to end* na nuvem. Seria ótimo ter um ambiente próprio, totalmente configurado e de fácil implantação, não é mesmo? - -E assim, para sanar essa e outras dificuldades, nasce o **terraglue** como um projeto desenvolvido exclusivamente para facilitar e acelerar o aprendizado em serviços como AWS Glue, [Athena](https://aws.amazon.com/athena/) e [Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) em toda a dinâmica de obtenção, processamento e escrita de dados (ETL) na nuvem. Embarque nesta jornada e tenha em mãos um ferramental extremamente rico e de fácil utilização para se especializar no universo analítico da AWS. - -### Motivadores e principais desafios +O **terraglue** é um produto criado para facilitar a jornada de aprendizado, utilização e otimização de jobs do Glue na AWS. Em essência, é possível dividir suas funcionalidades em dois grandes grupos: -Uma vez apresentado o projeto, é importante destacar que o **terraglue** possui uma essência altamente dinâmica, isto é, suas funcionalidades abrem margem para uma série de possibilidades e ganhos. Para que se tenha uma ideia de todas as suas possíveis aplicações, os tópicos abaixo representam alguns obstáculos, dores e desafios reais que podem ser devidamente solucionados através do uso do produto. Clique e expanda os blocos para visualizar algumas *features* do projeto. +- 🛠️ **Infra:** com o terraglue, o usuário pode implantar toda a infraestrutura necessária para executar jobs do Glue em seu ambiente sandbox AWS, incluindo buckets s3, roles IAM e tabelas no Data Catalog. +- 🚀 **Aplicação:** além disso, um modelo de aplicação Spark é disponibilizado com uma série de classes e métodos prontos para uso e que abstraem muitas operações comuns usadas em jobs Glue. -
- 📌 "Nunca criei um job Glue na AWS e sinto que são muitos parâmetros a serem configurados. Assim fica difícil saber o impacto de cada configuração e a curva de aprendizado é gigantesca!" - > 💡 *Com o terraglue, os usuários poderão implantar jobs Glue na AWS de uma maneira fácil, prática e objetiva, sem se preocupar com todos os parâmetros de configuração exigidos. Em um curto espaço de tempo, os usuários terão a confiança necessária para entender toda a dinâmica e aplicar, por conta própria, modificações que atendam suas respectivas necessidades.* -
+### Público alvo -
- 📌 "Mesmo que eu consiga criar um job, quais dados de exemplo posso utilizar para meu processo de ETL?" +Você pretende começar a utilizar o Glue na AWS e não sabe por onde começar? Já utiliza o serviço e quer otimizar aquele seu job com milhares de linhas de código? Gostaria de usar funções e métodos prontos de transformação de dados com Spark? Tá quebrando a cabeça com testes unitários e precisa de um norte? - > 💡 *No projeto, diferentes arquivos da base de dados [Brazilian E-Commerce](https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce) são utilizados para servirem de exemplos de execução de um job responsável por simular um processo de especialização de dados. De forma alternativa, usuários mais experientes podem utilizar suas próprias bases de dados para simular jobs de acordo com os objetivos propostos.* -
+Se a resposta foi "sim" para alguma das perguntas acima ou se você quer simplesmente mergulhar em alvo novo, o **terraglue** é o produto ideal pra você! -
- 📌 "No final de tudo, eu consigo automatizar toda a infraestrutura necessária para implantar um job do Glue na AWS?" - - > 💡 *Ao ter em mãos as funcionalidades do terraglue, o usuário poderá implantar toda a infraestrutura necessária para a execução de um job de ETL responsável pela especialização de um conjunto de dados na AWS através de **um único comando** em qualquer ambiente que se tenha acesso. Essa é, sem dúvidas, uma das principais vantagens do projeto!* -
- -
- 📌 "GlueContext? DynamicFrame? Como todos esses elementos se encaixam na dinâmica de um job do Glue?" +### Pré requisitos - > 💡 *No script de aplicação do repositório, é possível encontrar toda a lógica de implementação de um job Glue com todas as documentações necessárias para um claro entendimento de como os elementos de contexto e sessão se relacionam em um processo de ETL.* -
+Utilizar o **terraglue** é rápido e intuitivo. Para isso, basta ter: -
- 📌 "Já construí jobs do Glue anteriormente seguindo uma lógica própria e tenho muita dificuldade em organizar meu código a medida que novas transformações são programadas." +- ☁️ [Conta AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) disponível para uso +- 🔑 [Acesso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html) à conta através das chaves `access_key_id` e `secret_access_key` +- ⛏ [Terraform](https://www.terraform.io/) instalado (versão >=1.0) - > 💡 *O exemplo de aplicação Spark fornecido como padrão no terraglue possui uma organização especificamente pensada na escalabilidade de código. As classes `GlueJobManager`, `GlueETLManager` e `GlueTransformationManager` auxiliam usuários com conhecimento prévio a organizarem jobs com um alto número de transformações sem abrir mão das boas práticas.* -
+### Primeiros passos -Ansioso para conhecer mais sobre o projeto? Ainda nesta documentação, toda sua arquitetura será apresentada e um completo tutorial de utilização será fornecido. Continue acompanhando este material ou, se preferir, preparei para você uma sequência de links que poderão ajudar na jornada de consumo: +A primeira etapa necessária para ter em mãos todas as funcionalidades do projeto é realizando o *clone* deste repositório através do comando: -### Quem pode utilizar o terraglue? +```bash +git clone https://github.com/ThiagoPanini/terraglue.git +``` -O terraglue pode ser utilizado por **toda e qualquer pessoa que tenha algum tipo de necessidade específica de aprender sobre jobs Glue na AWS**. +Após isso, basta navegar até o diretório recém clonado e executar os comandos Terraform para inicializar os módulos, planejar e realizar as implantações: -Sua construção tem como base o fornecimento de um ambiente dinâmico e totalmente reprodutível para implantação de um job Glue adaptável às necessidades dos usuários. +```bash +# Navegando até o diretório de infra +cd terraglue/infra -### Pré requisitos +# Inicializando os módulos e realizando a implantação +terraform init +terraform plan +terraform apply +``` -Você verá que utilizar o **terraglue** é extremamente fácil e suas exigências e pré requisitos são igualmente simples. Basta ter: - -- ☁️ [Conta AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) disponível para uso -- 🔑 [Acesso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html) à conta através das chaves `access_key_id` e `secret_access_key` -- ⛏ [Terraform](https://www.terraform.io/) instalado (versão >=1.0) +Pronto! Agora você tem aplicada à conta AWS todos os elementos necessários para começar sua jornada de aprendizado no Glue da melhor forma possível! Para maiores detalhes, preparei um [tutorial detalhado](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/GETTINGSTARTED.md) de primeiros passos na solução. Se quiser entender melhor toda a arquitetura por trás da iniciativa, não deixe de continuar nesta documentação. ___ @@ -109,7 +80,7 @@ ___ Agora que você já conhece um pouco mais sobre o projeto, é chegado o momento de apresentar toda a arquitetura que está por trás das funcionalidades introduzidas. No final do dia, o **terraglue** é um projeto de IaC (*Infrastructure as Code*) construído com o *runtime* [Terraform](https://www.terraform.io/) e dividido em módulos responsáveis por implantar diferentes serviços AWS que, juntos, formam toda a dinâmica de consumo do projeto. Assim, o usuário obtém o código fonte disponibilizado neste repositório e executa os comandos específicos do runtime de IaC utilizado para realizar as implantações necessárias no ambiente alvo.
-
terraglue-user-view +
terraglue-user-view

@@ -123,7 +94,7 @@ Em uma visão mais técnica, os serviços declarados nos módulos Terraform são Assim, ao cumprir os requisitos e as ações evidenciadas pela imagem de arquitetura acima, o usuário poderá ter em mãos seu próprio "ambiente AWS portátil" composto dos seguintes recursos:
-
terraglue-resources +
terraglue-resources

@@ -138,31 +109,94 @@ Considerando os insumos presentes, o repositório do **terraglue** está organiz ___ -## Primeiros passos -Para consolidar todas as etapas necessárias para extrair todo o valor do produto, esta seção comporta os detalhes iniciais de instalação e uso da solução, além de links para explicações técnicas a respeito da infraestrutura e da aplicação desenvolvida. +## Está interessado e quer saber mais? + +Após definir o que é o **terraglue** e fornecer uma visão macro sobre sua arquitetura de solução, é chegado o momento de fornecer alguns insumos e rotas fundamentais para materializar todo o valor intrínseco da iniciativa. + +### A história por trás da criação + +> **Note** +> Esta seção serve apenas para fins de curiosidade. Se você está minimamente interessado em conhecer um pouco mais sobre a história de concepção da solução, clique no dropdown e tenha uma boa leitura 🤓 + +
+ 🪄 Era uma vez um Engenheiro de Analytics... + + > ...que estava iniciando sua jornada de aprendizado no Glue. Ele não sabia por onde começar e, assim sendo, procurou alguns vídeos, leu algumas documentações e, enfim, se preparou para executar algo mais prático em seu ambiente pessoal. Em suas mãos, o tal Engenheiro tinha uma conta sandbox AWS e muita vontade de aprender. + + > No início, ele começou simulando algumas estruturas de armazenamento próximas ao que ele encontrava em seu ambiente de trabalho, como por exemplo, buckets s3 responsáveis por armazenar dados em diferentes camadas (SoR, SoT e Spec). Como sua conta de sandbox era efêmera e automaticamente excluída em um período de algumas horas, todos os dias o Engenheiro realizava o login em uma nova conta e criava manualmente os buckets para servirem de repositório para os arquivos. Falando nisso, a obtenção de dados públicos e a posterior ingestão no ambiente citado também fazia parte das tarefas manuais realizadas diariamente. + + > Realizar o upload dos arquivos não bastava pois, na dinâmica de uso do s3 como Data Lake, é preciso também catalogar os dados no Data Catalog da AWS, adicionando ainda mais esforço operacional na rotina do Engenheiro (e olha que nem chegamos no Glue ainda). + + > Em continuidade à preparação do ambiente, o Engenheiro se via agora perante a uma tarefa extremamente desafiadora: roles IAM. Quais permissões utilizar? Será preciso criar políticas específicas? O que o Glue precisa para funcionar? Depois de muito estudo, o Engenheiro conseguiu alcançar um conjunto de políticas definidas pontualmente para permitir que jobs do Glue sejam executados em seu ambiente. Agora, todos os dias, além da criação dos buckets, ingestão e catalogação dos arquivos, o Engenheiro também deveria criar políticas e pelo menos uma role IAM para poder iniciar sua jornada no Glue. + + > Por fim, após muito esforço operacional e muitas pedras quebradas, o Engenheiro conseguiu preparar todo seu ambiente para poder criar seu job do Glue e aprender a usá-lo com os dados públicos catalogados. Se os obstáculos até aqui não foram suficientes, o Engenheiro agora se via perante a um desafio de extrema complexidade envolvendo a dinâmica de criação de aplicações Spark dentro do Glue. GlueContext? DynamicFrame? SparkSession? O que significa tudo isso e como eu consigo simplesmente ler, transformar e catalogar meus dados? + + > Bom, neste momento a história do nosso protagonista começa a virar. Assim como em grandes filmes ou em renomados animes, é a partir deste ponto que o herói começa a nascer e todos os desafios começam a ser superados. Aos poucos, o Engenheiro percebe que os processos de preparação de ambiente arduamente replicados diariamente em seu ambiente poderiam, extraordinariamente, serem automatizados através de uma ferramenta de IaC. + + > E assim ele começa a desenvolver peças de código que criam buckets s3 de maneira automática sempre que ele entra em sua jornada diária de aprendizado. Além dos buckets, ele também codifica uma forma automática de fazer o upload e a catalogação de arquivos prontos para serem utilizados. As políticas e a role IAM também entram neste pacote e passam a ser criadas de maneira instantânea em seu novo projeto de automatização de infraestrutura. Por fim, a criação do job do Glue também é automatizada e, neste momento, o Engenheiro tem em suas mãos toda a infraestrutura necessária para usar o serviço Glue na AWS ao toque de um único comando. Entretanto, ainda faltava a cereja do bolo. + + > Uma vez automatizada a infra, o Engenheiro percebeu alguns padrões de código de aplicações Spark que poderiam facilitar a jornada de desenvolvimento dos usuários em jobs do Glue. Será mesmo que o usuário precisa instanciar um GlueContext no script principal de trabalho? Será que algum módulo adicional poderia abstrair esse passo? E assim, o Engenheiro começou a trabalhar em uma série de funcionalidades relevantes encapsuladas em um módulo adicional capaz de ser importado no script principal da aplicação, permitindo que os usuários se concentrem exclusivamente em seus respectivos métodos de transformação dos dados. + + > Com isso, agora não apenas toda uma infraestrutura seria provisionada, mas também todo um modelo de referência no desenvolvimento de aplicações Spark em jobs do Glue seria entregue ao usuário final. Estava pronto o MVP do terraglue. +
-### Utilizando a solução +...e viveram felizes para sempre sem *issues* no repositório! -Visando dispor de um lugar específico para detalhar o tutorial de utilização do projeto, todas as etapas estão devidamente exemplificadas no arquivo [GETTINGSTARTED.md](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) +___ -### Infraestrutura provisionada +### Uma jornada completa de consumo -Um dos pilares responsáveis por toda a automação da implantação dos recursos de infraestrutura do projeto é, sem dúvidas, a utilização do Terraform como ferramenta de IaC. Nesta dinâmica, o arquivo [INFRA.md](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) possui todos os detalhes necessários para proporcionar, ao usuário, um entendimento claro e direto sobre como a "mágica" acontece no ambiente AWS. +Se tudo ainda está meio abstrato até aqui, fique tranquilo! Existe um conjunto massivo de documentações altamente detalhadas para que todo o poder do **terraglue** possa ser extraído por parte de seus usuários. O conjunto de links abaixo promete guiar o leitor para todas as jornadas presentes na dinâmica de uso da solução. -### Aplicação Spark codificada -Além de todo o processo de automação da infraestrutura provisionada em um ambiente AWS, uma funcionalidade altamente relevante do **terraglue** envolve a entrega de uma aplicação Spark previamente codificada com toda a dinâmica de uso do Glue como serviço em meio ao desenvolvimento de jobs na nuvem. Se você não sabe por onde começar o desenvolvimento de um *job* ou mesmo se deseja otimizar a organização do seu código com as melhores práticas, não deixe de consumir o arquivo [APP.md](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) onde navegamos pelos detalhes técnicos dos módulos Python disponibilizados para facilitar o desenvolvimento de uma aplicação Spark dentro do Glue. +- 👉 [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) *Você está aqui!* +- [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md) +- [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) +- [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) +- [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md) + +___ -### Cenários e exemplos de utilização +### Contribuindo -Para ter em mãos cenários práticos de utilização do projeto, toda uma suíte de documentação foi disponibilizada no arquivo [EXAMPLES.md](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md). Se você chegou até aqui e agora pretende adaptar o uso do **terraglue** de acordo com suas próprias necessidades, a documentação de exemplos foi especialmente feita para você! +Todos são muito bem vindos a contribuírem com evoluções e novas funcionalidades deste projeto carinhosamente disponibilizado para a comunidade. Para maiores detalhes sobre esse processo, visite o arquivo [CONTRIBUTING.md](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/CONTRIBUTING.md) ___ -## Contribuindo +### FAQ + +
+ 📌 "Fiquei sabendo do terraglue por acaso. Como eu sei se ele pode me ajudar em algo?" + + > 💡 *Basicamente, o terraglue possui diferentes perfis de usuários candidatos que vão desde iniciantes até os mais experientes. Se você quer dar seus primeiros passos na AWS utilizando o Glue, aqui você poderá ter em mãos uma ferramenta capaz de proporcionar uma jornada end to end ao toque de um comando. Se você já tá imerso nessa jornada e tem dúvidas técnicas sobre aplicações Spark, testes unitários, módulos Python ou Terraform, aqui também é seu lugar!* +
-Todos são muito bem vindos a contribuírem com evoluções e novas funcionalidades deste projeto carinhosamente disponibilizado para a comunidade. Para maiores detalhes sobre esse processo, visite o arquivo [CONTRIBUTING.md](https://github.com/ThiagoPanini/terraglue/blob/main/CONTRIBUTING.md) +
+ 📌 "Quero ativar em minha conta AWS um toolkit para aprender como funciona a dinâmica de uso do Glue na prática. Qual caminho devo seguir?" + + > 💡 *Para alcançar esse objetivo, basta seguir os passos presentes na documentação [Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md). Nela, você encontrará todos os detalhes necessários para ter em suas mãos, ao toque de poucos comandos, toda uma infraestrutura pronta para contemplar sua jornada de uso do Glue na AWS.* +
+ +
+ 📌 "Não estou interessado na infraestrutura em si, mas sim no modelo de aplicação Spark e nas funções prontas para uso em meu job Glue. Onde coleto mais informações a respeito e como consigo utilizar esses blocos de código prontos em minha aplicação?" + + > 💡 *Para este cenário, a documentação [Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) poderá te guiar em todos os passos necessários para entender o modelo de aplicação Spark desenvolvido e como utilizá-lo em seus próprios projetos. Adicionalmente, a documentação [Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) pode ser um excelente complemento para analisar, etapa a etapa, todo o processo de obtenção e adaptação do modelo de aplicação Spark.* +
+ +
+ 📌 "Já tenho um job Glue rodando em produção, mas tenho dificuldade em dar manutenção no mesmo por conta da complexidade da aplicação e da quantidade de linhas de código. Como posso usar o terraglue para otimizar esse processo?" + + > 💡 *O terraglue conta com um módulo adicional Python presente em app/terraglue.py com INÚMERAS funcionalidades encapsuladas e prontas para uso. Você pode adpatar seu código para usar este módulo e utilizar classes e métodos criadas especialmente para facilitar a jornada de desenvolvimento de aplicações Spark com as melhores práticas de desenvolvimento de código. Com essa dinâmica, você pode se preocupar única e exclusivamente em programar as transformações de dados necessárias para seu processo de ETL. Para o restante, conte com os métodos prontos do módulo terraglue.py.* +
+ +
+ 📌 "Existem custos envolvidos para usar o terraglue?" + + > 💡 *Essa é uma pergunta muito interessante e importante. Não existem custos para usar o terraglue pois trata-se de uma solução open source e compartilhada com toda a comunidade. ENTRETANTO, é imprescindível citar que os recursos criados pelo terraglue em seus ambiente AWS eventualmente podem ocasionar custos. Portanto, é fundamental que os usuários do terraglue compreendam as possíveis taxas envolvidas com os serviços relacionados antes de utilizar a solução.* +
+ +___ ## Contatos diff --git a/docs/imgs/app/01-header-app.png b/docs/imgs/app/01-header-app.png new file mode 100644 index 0000000..995477b Binary files /dev/null and b/docs/imgs/app/01-header-app.png differ diff --git a/docs/imgs/docker-tests/01-header-tests.png b/docs/imgs/docker-tests/01-header-tests.png new file mode 100644 index 0000000..d9d9474 Binary files /dev/null and b/docs/imgs/docker-tests/01-header-tests.png differ diff --git a/docs/imgs/tests-docker-desktop-images.png b/docs/imgs/docker-tests/tests-docker-desktop-images.png similarity index 100% rename from docs/imgs/tests-docker-desktop-images.png rename to docs/imgs/docker-tests/tests-docker-desktop-images.png diff --git a/docs/imgs/tests-docker-desktop.png b/docs/imgs/docker-tests/tests-docker-desktop.png similarity index 100% rename from docs/imgs/tests-docker-desktop.png rename to docs/imgs/docker-tests/tests-docker-desktop.png diff --git a/docs/imgs/tests-docker-glue-pyspark.png b/docs/imgs/docker-tests/tests-docker-glue-pyspark.png similarity index 100% rename from docs/imgs/tests-docker-glue-pyspark.png rename to docs/imgs/docker-tests/tests-docker-glue-pyspark.png diff --git a/docs/imgs/tests-pytest-container.png b/docs/imgs/docker-tests/tests-pytest-container.png similarity index 100% rename from docs/imgs/tests-pytest-container.png rename to docs/imgs/docker-tests/tests-pytest-container.png diff --git a/docs/imgs/tests-pytest-etl-manager.png b/docs/imgs/docker-tests/tests-pytest-etl-manager.png similarity index 100% rename from docs/imgs/tests-pytest-etl-manager.png rename to docs/imgs/docker-tests/tests-pytest-etl-manager.png diff --git a/docs/imgs/tests-pytest-job-manager.png b/docs/imgs/docker-tests/tests-pytest-job-manager.png similarity index 100% rename from docs/imgs/tests-pytest-job-manager.png rename to docs/imgs/docker-tests/tests-pytest-job-manager.png diff --git a/docs/imgs/tests-pytest-user-input.png b/docs/imgs/docker-tests/tests-pytest-user-input.png similarity index 100% rename from docs/imgs/tests-pytest-user-input.png rename to docs/imgs/docker-tests/tests-pytest-user-input.png diff --git a/docs/imgs/tests-vscode-container-attached.png b/docs/imgs/docker-tests/tests-vscode-container-attached.png similarity index 100% rename from docs/imgs/tests-vscode-container-attached.png rename to docs/imgs/docker-tests/tests-vscode-container-attached.png diff --git a/docs/imgs/tests-vscode-dev-containers.png b/docs/imgs/docker-tests/tests-vscode-dev-containers.png similarity index 100% rename from docs/imgs/tests-vscode-dev-containers.png rename to docs/imgs/docker-tests/tests-vscode-dev-containers.png diff --git a/docs/imgs/tests-vscode-remote-explorer.png b/docs/imgs/docker-tests/tests-vscode-remote-explorer.png similarity index 100% rename from docs/imgs/tests-vscode-remote-explorer.png rename to docs/imgs/docker-tests/tests-vscode-remote-explorer.png diff --git a/docs/imgs/examples/01-header-examples.png b/docs/imgs/examples/01-header-examples.png new file mode 100644 index 0000000..3472385 Binary files /dev/null and b/docs/imgs/examples/01-header-examples.png differ diff --git a/docs/imgs/examples-cenario03-schema-br-ecommerce.png b/docs/imgs/examples/examples-cenario03-schema-br-ecommerce.png similarity index 100% rename from docs/imgs/examples-cenario03-schema-br-ecommerce.png rename to docs/imgs/examples/examples-cenario03-schema-br-ecommerce.png diff --git a/docs/imgs/examples-cenario03-titanic-data-on-athena.PNG b/docs/imgs/examples/examples-cenario03-titanic-data-on-athena.PNG similarity index 100% rename from docs/imgs/examples-cenario03-titanic-data-on-athena.PNG rename to docs/imgs/examples/examples-cenario03-titanic-data-on-athena.PNG diff --git a/docs/imgs/examples-cenario03-titanic-data-on-data-catalog.PNG b/docs/imgs/examples/examples-cenario03-titanic-data-on-data-catalog.PNG similarity index 100% rename from docs/imgs/examples-cenario03-titanic-data-on-data-catalog.PNG rename to docs/imgs/examples/examples-cenario03-titanic-data-on-data-catalog.PNG diff --git a/docs/imgs/examples-cenario03-titanic-data-on-s3.PNG b/docs/imgs/examples/examples-cenario03-titanic-data-on-s3.PNG similarity index 100% rename from docs/imgs/examples-cenario03-titanic-data-on-s3.PNG rename to docs/imgs/examples/examples-cenario03-titanic-data-on-s3.PNG diff --git a/docs/imgs/examples-cenario03-titanic-schema-on-catalog.PNG b/docs/imgs/examples/examples-cenario03-titanic-schema-on-catalog.PNG similarity index 100% rename from docs/imgs/examples-cenario03-titanic-schema-on-catalog.PNG rename to docs/imgs/examples/examples-cenario03-titanic-schema-on-catalog.PNG diff --git a/docs/imgs/terraglue-examples-titanic-data.png b/docs/imgs/examples/terraglue-examples-titanic-data.png similarity index 100% rename from docs/imgs/terraglue-examples-titanic-data.png rename to docs/imgs/examples/terraglue-examples-titanic-data.png diff --git a/docs/imgs/terraglue-examples-titanic-sot-athena-query.png b/docs/imgs/examples/terraglue-examples-titanic-sot-athena-query.png similarity index 100% rename from docs/imgs/terraglue-examples-titanic-sot-athena-query.png rename to docs/imgs/examples/terraglue-examples-titanic-sot-athena-query.png diff --git a/docs/imgs/terraglue-examples-titanic-sot-athena.png b/docs/imgs/examples/terraglue-examples-titanic-sot-athena.png similarity index 100% rename from docs/imgs/terraglue-examples-titanic-sot-athena.png rename to docs/imgs/examples/terraglue-examples-titanic-sot-athena.png diff --git a/docs/imgs/infra/01-header-infra.png b/docs/imgs/infra/01-header-infra.png new file mode 100644 index 0000000..1b0c13b Binary files /dev/null and b/docs/imgs/infra/01-header-infra.png differ diff --git a/docs/imgs/terraglue-practical-athena-query.png b/docs/imgs/infra/infra-athena-query.png similarity index 100% rename from docs/imgs/terraglue-practical-athena-query.png rename to docs/imgs/infra/infra-athena-query.png diff --git a/docs/imgs/terraglue-practical-athena-workgroup.png b/docs/imgs/infra/infra-athena-workgroup.png similarity index 100% rename from docs/imgs/terraglue-practical-athena-workgroup.png rename to docs/imgs/infra/infra-athena-workgroup.png diff --git a/docs/imgs/terraglue-practical-buckets-s3.png b/docs/imgs/infra/infra-buckets-s3.png similarity index 100% rename from docs/imgs/terraglue-practical-buckets-s3.png rename to docs/imgs/infra/infra-buckets-s3.png diff --git a/docs/imgs/terraglue-practical-data-catalog-01.png b/docs/imgs/infra/infra-data-catalog-01.png similarity index 100% rename from docs/imgs/terraglue-practical-data-catalog-01.png rename to docs/imgs/infra/infra-data-catalog-01.png diff --git a/docs/imgs/terraglue-practical-data-catalog-02.png b/docs/imgs/infra/infra-data-catalog-02.png similarity index 100% rename from docs/imgs/terraglue-practical-data-catalog-02.png rename to docs/imgs/infra/infra-data-catalog-02.png diff --git a/docs/imgs/terraglue-practical-data-catalog-03.png b/docs/imgs/infra/infra-data-catalog-03.png similarity index 100% rename from docs/imgs/terraglue-practical-data-catalog-03.png rename to docs/imgs/infra/infra-data-catalog-03.png diff --git a/docs/imgs/terraglue-practical-data-customers.png b/docs/imgs/infra/infra-data-customers.png similarity index 100% rename from docs/imgs/terraglue-practical-data-customers.png rename to docs/imgs/infra/infra-data-customers.png diff --git a/docs/imgs/terraglue-practical-glue-job-01.png b/docs/imgs/infra/infra-glue-job-01.png similarity index 100% rename from docs/imgs/terraglue-practical-glue-job-01.png rename to docs/imgs/infra/infra-glue-job-01.png diff --git a/docs/imgs/terraglue-practical-glue-job-02.png b/docs/imgs/infra/infra-glue-job-02.png similarity index 100% rename from docs/imgs/terraglue-practical-glue-job-02.png rename to docs/imgs/infra/infra-glue-job-02.png diff --git a/docs/imgs/terraglue-practical-iam-role.png b/docs/imgs/infra/infra-iam-role.png similarity index 100% rename from docs/imgs/terraglue-practical-iam-role.png rename to docs/imgs/infra/infra-iam-role.png diff --git a/docs/imgs/terraglue-practical-sot-01.png b/docs/imgs/infra/infra-sot-01.png similarity index 100% rename from docs/imgs/terraglue-practical-sot-01.png rename to docs/imgs/infra/infra-sot-01.png diff --git a/docs/imgs/terraglue-practical-sot-02.png b/docs/imgs/infra/infra-sot-02.png similarity index 100% rename from docs/imgs/terraglue-practical-sot-02.png rename to docs/imgs/infra/infra-sot-02.png diff --git a/docs/imgs/terraglue-gettingstarted-aws-configure.png b/docs/imgs/infra/install-aws-configure.png similarity index 100% rename from docs/imgs/terraglue-gettingstarted-aws-configure.png rename to docs/imgs/infra/install-aws-configure.png diff --git a/docs/imgs/terraglue-gettingstarted-git-clone.png b/docs/imgs/infra/install-git-clone.png similarity index 100% rename from docs/imgs/terraglue-gettingstarted-git-clone.png rename to docs/imgs/infra/install-git-clone.png diff --git a/docs/imgs/terraglue-gettingstarted-ls-terraglue.png b/docs/imgs/infra/install-ls-repo.png similarity index 100% rename from docs/imgs/terraglue-gettingstarted-ls-terraglue.png rename to docs/imgs/infra/install-ls-repo.png diff --git a/docs/imgs/terraglue-gettingstarted-terraform-apply.png b/docs/imgs/infra/install-terraform-apply.png similarity index 100% rename from docs/imgs/terraglue-gettingstarted-terraform-apply.png rename to docs/imgs/infra/install-terraform-apply.png diff --git a/docs/imgs/terraglue-gettingstarted-terraform-init.png b/docs/imgs/infra/install-terraform-init.png similarity index 100% rename from docs/imgs/terraglue-gettingstarted-terraform-init.png rename to docs/imgs/infra/install-terraform-init.png diff --git a/docs/imgs/terraglue-gettingstarted-terraform-plan.png b/docs/imgs/infra/install-terraform-plan.png similarity index 100% rename from docs/imgs/terraglue-gettingstarted-terraform-plan.png rename to docs/imgs/infra/install-terraform-plan.png diff --git a/docs/imgs/logo-v1.png b/docs/imgs/logo-legacy/logo-v1.png similarity index 100% rename from docs/imgs/logo-v1.png rename to docs/imgs/logo-legacy/logo-v1.png diff --git a/docs/imgs/logo-v2.png b/docs/imgs/logo-legacy/logo-v2.png similarity index 100% rename from docs/imgs/logo-v2.png rename to docs/imgs/logo-legacy/logo-v2.png diff --git a/docs/imgs/logo-v3.png b/docs/imgs/logo-legacy/logo-v3.png similarity index 100% rename from docs/imgs/logo-v3.png rename to docs/imgs/logo-legacy/logo-v3.png diff --git a/docs/imgs/logo-v4.png b/docs/imgs/logo-legacy/logo-v4.png similarity index 100% rename from docs/imgs/logo-v4.png rename to docs/imgs/logo-legacy/logo-v4.png diff --git a/docs/imgs/readme/01-header-readme.png b/docs/imgs/readme/01-header-readme.png new file mode 100644 index 0000000..9c0102a Binary files /dev/null and b/docs/imgs/readme/01-header-readme.png differ diff --git a/docs/imgs/terraglue-diagram-resources-dark.png b/docs/imgs/readme/diagram-product-view.png similarity index 100% rename from docs/imgs/terraglue-diagram-resources-dark.png rename to docs/imgs/readme/diagram-product-view.png diff --git a/docs/imgs/terraglue-diagram-user-view-dark.png b/docs/imgs/readme/diagram-user-view.png similarity index 100% rename from docs/imgs/terraglue-diagram-user-view-dark.png rename to docs/imgs/readme/diagram-user-view.png diff --git a/docs/imgs/terraglue-diagram-resources.png b/docs/imgs/terraglue-diagram-resources.png deleted file mode 100644 index c5b76e7..0000000 Binary files a/docs/imgs/terraglue-diagram-resources.png and /dev/null differ diff --git a/docs/imgs/terraglue-diagram-user-view.png b/docs/imgs/terraglue-diagram-user-view.png deleted file mode 100644 index 7255612..0000000 Binary files a/docs/imgs/terraglue-diagram-user-view.png and /dev/null differ diff --git a/APP.md b/docs/markdown/APP.md similarity index 88% rename from APP.md rename to docs/markdown/APP.md index dc2a9ff..cc0dc2f 100644 --- a/APP.md +++ b/docs/markdown/APP.md @@ -1,8 +1,10 @@ -*Apresentando uma proposta de padronização de aplicações Spark para jobs do Glue* +
+
terraglue-logo +
+ ## Table of Contents - [Table of Contents](#table-of-contents) -- [Antes de começar](#antes-de-começar) - [Desafios de desenvolvimento de um job Glue](#desafios-de-desenvolvimento-de-um-job-glue) - [Uma proposta de padronização de jobs do Glue](#uma-proposta-de-padronização-de-jobs-do-glue) - [Módulos e scripts entregues ao usuário](#módulos-e-scripts-entregues-ao-usuário) @@ -13,17 +15,9 @@ - [O script main.py](#o-script-mainpy) - [A classe GlueTransformationManager](#a-classe-gluetransformationmanager) - [Adaptando a aplicação para finalidades próprias](#adaptando-a-aplicação-para-finalidades-próprias) +- [Continue navegando nas documentações](#continue-navegando-nas-documentações) -## Antes de começar - -> Antes de navegarmos pelo detalhamento da aplicação Spark previamente codificada para o usuário, é importante garantir que todas as etapas de preparação e instalação foram cumpridas. Para maiores detalhes, o arquivo [GETTINGSTARTED.md](https://github.com/ThiagoPanini/terraglue/blob/develop/GETTINGSTARTED.md) contempla todo o processo necessário de iniciação. Adicionalmente, o arquivo [INFRA.md](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) contém todas as explicações sobre os recursos de infraestrutura provisionados ao usuário. - -- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- 👉 [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) *Você está aqui!* -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) +___ ## Desafios de desenvolvimento de um job Glue @@ -98,7 +92,8 @@ Dessa forma, entre os métodos atualmente disponíveis nessa classe, é possíve | :-- | :-- | | `generate_dynamic_frames_dict()` | Proporciona uma forma fácil e eficiente de realizar a leitura de múltiplas fontes de dados referenciadas em um dicionário Python de modo a entregar objetos do tipo `DynamicFrame` para cada uma delas | | `generate_dataframes_frames_dict()` | Possui a mesma dinâmica do método anterior, porém o resultado final é entregue ao usuário como um dicionário contendo múltiplos objetos do tipo `DataFrame` | -| `date_attributes_extraction()` | Permite extrair uma série de atributos temporais de campos de data (ou strings que representam datas), como ano, quadrimestre, mês, dia, dia da semana, semana do ano ou tudo o que pode ser extraído através de funções Spark | +| `extract_date_attributes()` | Permite extrair uma série de atributos temporais de campos de data (ou strings que representam datas), como ano, quadrimestre, mês, dia, dia da semana, semana do ano ou tudo o que pode ser extraído através de funções Spark | +| `extract_aggregate_statistics()` | Permite extrair uma série de estatísticas agregadas de um DataFrame com base em uma coluna numérica e uma lista de atributos a serem agrupados. Com este método, o usuário pode extrair a média, mediana, contagem, contagem distinta, variância, desvio padrão e toda e qualquer função estatística presente no Spark com uma única chamada | | `drop_partition()` | Recebe uma referência de nome e valor de partição para executar o processo de `purge` de dados no s3, permitindo assim que fluxos de trabalho evitem um *append* indesejado em caso de execuções simultâneas ou repetidas | | `add_partition()` | Permite, através de um nome de partição e um valor fornecidos pelo usuário, realizar a inclusão de uma nova coluna em um objeto DataFrame via execução do método `.withColumn()` do Spark | | `repartition_dataframe()` | Consolida regras para a correta aplicação do processo de reparticionamento de um DataFrame Spark visando a otimização do armazenamento dos dados físicos no S3 | @@ -165,11 +160,10 @@ Todas as demais operações já estão inclusas nos métodos internos das classe ___ -Continue sua jornada no **terraglue** através das documentações! +## Continue navegando nas documentações - [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- 👉 [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) *Você está aqui!* -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) \ No newline at end of file +- [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md) +- 👉 [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) *Você está aqui!* +- [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) +- [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md) diff --git a/CONTRIBUTING.md b/docs/markdown/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to docs/markdown/CONTRIBUTING.md diff --git a/EXAMPLES.md b/docs/markdown/EXAMPLES.md similarity index 88% rename from EXAMPLES.md rename to docs/markdown/EXAMPLES.md index a06e45d..765cca4 100644 --- a/EXAMPLES.md +++ b/docs/markdown/EXAMPLES.md @@ -1,8 +1,10 @@ -*Fornecendo exemplos práticos de cenários de utilização do projeto* +
+
terraglue-logo +
+ ## Table of Contents - [Table of Contents](#table-of-contents) -- [Antes de começar](#antes-de-começar) - [Cenário 1: implementando seu próprio conjunto de dados](#cenário-1-implementando-seu-próprio-conjunto-de-dados) - [Sobre os dados de exemplo (Brazilian E-Commerce)](#sobre-os-dados-de-exemplo-brazilian-e-commerce) - [Utilizando dados próprios](#utilizando-dados-próprios) @@ -14,26 +16,7 @@ - [Codificando novos métodos de transformação](#codificando-novos-métodos-de-transformação) - [Sequenciando passos no método run()](#sequenciando-passos-no-método-run) - [Visualizando resultados](#visualizando-resultados) -___ - -## Antes de começar - -> Antes de navegarmos por exemplos práticos d euso da solução, é importante garantir que todas as etapas de preparação e instalação foram cumpridas. Para maiores detalhes, o arquivo [GETTINGSTARTED.md](https://github.com/ThiagoPanini/terraglue/blob/develop/GETTINGSTARTED.md) contempla todo o processo necessário de iniciação. Adicionalmente, o arquivo [INFRA.md](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) contém todas as explicações sobre os recursos de infraestrutura provisionados ao usuário. Por fim, o arquivo [APP.md](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) traz detalhes sobre os módulos e scripts pré codificados e entregues aos usuários. - -- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- 👉 [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) *Você está aqui!* -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) - - -Adicionalmente, é válido citar que esta documentação será separada em diferentes **cenários**, cada um trazendo à tona uma possível seara de aplicação do **terraglue** de acordo com um propósito específico. É importante destacar que os cenários contemplam desafios próprios e particulares, sendo direcionados para públicos específicos que podem se beneficiar das funcionalidades deste projeto. Encontre aquele que mais faça sentido dentro de sua jornada de aprendizado e mergulhe fundo! - -| 🎬 **Cenário** | **🎯 Público alvo** | -| :-- | :-- | -| [#1 Implementando seu próprio conjunto de dados](#cenário-1-implementando-seu-próprio-conjunto-de-dados) | Usuários com conhecimentos básicos | -| [#2 Implementando seu próprio job do Glue](#cenário-2-implementando-seu-próprio-job-do-glue) | Usuários com conhecimentos intermediários | +- [Continue navegando nas documentações](#continue-navegando-nas-documentações) ___ @@ -59,7 +42,7 @@ Originalmente disponível na plataforma [Kaggle](https://www.kaggle.com/), o ref
🎲 Clique para visualizar o schema original dos dados
-
br-ecommerce-schema +
br-ecommerce-schema
@@ -71,6 +54,10 @@ Visando proporcionar uma maior simplicidade no exemplo de geração de SoT, apen | `customers.csv` | Contempla dados cadastrais dos clientes que realizaram os pedidos online | | `payments.csv` | Contempla dados dos pagamentos utilizados para quitação dos pedidos realizados | | `reviews.csv` | Contempla dados das revisões, nota e comentários deixados por clientes para os pedidos realizados | +| `geolocation.csv` | Contempla dados demográficos de pedidos realizados online | +| `order_items.csv` | Traz uma visão de cada item presente em cada um dos pedidos | +| `products.csv` | Contempla uma visão categórica dos produtos/itens presentes nos pedidos | +| `sellers.csv` | Traz uma visão categóricas dos vendedores | Assim, os conjuntos citados então são disponibilizados localmente em uma estrutura hierárquica de pastas que simula uma organização de dados em um ambiente Data Lake no formato `db/tbl/file`, sendo esta uma dinâmica **mandatória** para o sucesso de implantação de conjuntos próprios de dados. @@ -118,7 +105,7 @@ Uma vez obtido e organizado o(s) novo(s) conjunto(s) de dado(s) a serem inserido
📷 Clique para visualizar a imagem
-
titanic-data-on-s3 +
titanic-data-on-s3
@@ -127,7 +114,7 @@ Além disso, é possível também acessar o serviço Glue e, dentro do menu Data
📷 Clique para visualizar a imagem
-
titanic-data-on-data-catalog +
titanic-data-on-data-catalog
@@ -136,7 +123,7 @@ Ao selecionar a tabela no catálogo, será ainda possível perceber que todo o p
📷 Clique para visualizar a imagem
-
titanic-schema-on-data-catalog +
titanic-schema-on-data-catalog
@@ -145,7 +132,7 @@ Por fim, a validação final realizada envolve o acesso ao serviço Athena para
📷 Clique para visualizar a imagem
-
titanic-data-on-athena +
titanic-data-on-athena
@@ -263,7 +250,7 @@ Agora que o dicionário de mapeamento de leitura de dados está devidamente conf
📷 Clique para visualizar a imagem
-
titanic-data-athena +
titanic-data-athena
@@ -631,7 +618,7 @@ Considerando a demonstração fornecida, seria possível acessar o serviço Athe
📷 Clique para visualizar a imagem
-
titanic-data-athena-sot +
titanic-data-athena-sot
@@ -653,7 +640,7 @@ FROM tt3.tbsot_titanic LIMIT 5;
📷 Clique para visualizar a imagem
-
titanic-data-athena-sot-query +
titanic-data-athena-sot-query
@@ -661,11 +648,10 @@ E assim completamos o cenário de adaptação do script `main.py` para finalidad ___ -Continue sua jornada no **terraglue** através das documentações! +## Continue navegando nas documentações - [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- 👉 [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) *Você está aqui!* -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) \ No newline at end of file +- [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md) +- [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) +- 👉 [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) *Você está aqui!* +- [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md) diff --git a/GETTINGSTARTED.md b/docs/markdown/GETTINGSTARTED.md similarity index 80% rename from GETTINGSTARTED.md rename to docs/markdown/GETTINGSTARTED.md index 7548c0c..a5fe2d7 100644 --- a/GETTINGSTARTED.md +++ b/docs/markdown/GETTINGSTARTED.md @@ -1,9 +1,12 @@ -*Este é um tutorial básico sobre como utilizar as funcionalidades do terraglue* +
+
terraglue-logo + + Este é um tutorial básico sobre como utilizar as funcionalidades do terraglue +
+ ## Table of Contents - [Table of Contents](#table-of-contents) -- [Antes de começar](#antes-de-começar) -- [Pré requisitos](#pré-requisitos) - [Passo a passo resumido](#passo-a-passo-resumido) - [Passo a passo detalhado](#passo-a-passo-detalhado) - [Configurando credenciais AWS](#configurando-credenciais-aws) @@ -11,29 +14,7 @@ - [Instalação dos módulos Terraform](#instalação-dos-módulos-terraform) - [Visualizando plano de implantação](#visualizando-plano-de-implantação) - [Implantando recursos no ambiente AWS](#implantando-recursos-no-ambiente-aws) - -## Antes de começar - -> Antes de navegarmos pelos passos de instalação e uso do terraglue, sugerimos a leitura da documentação oficial na raíz do repositório através do arquivo [README.md](https://github.com/ThiagoPanini/terraglue). Para facilitar a localização e navegação, os links abaixo podem ajudar! - -- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- 👉 [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) *Você está aqui!* -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) - -___ - -## Pré requisitos - -Como informado no [README.md](https://github.com/ThiagoPanini/terraglue/tree/develop#pr%C3%A9-requisitos) do projeto, os pré requisitos de utilização do **terraglue** incluem: - -- ☁️ [Conta AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) disponível para uso -- 🔑 [Acesso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html) à conta através das chaves `access_key_id` e `secret_access_key` -- ⛏ [Terraform](https://www.terraform.io/) instalado (versão >=1.0) - -Se a lista de requisitos acima foi cumprida, siga adiante para as próximas etapas de instalação e uso do projeto em seu ambiente de trabalho. +- [Continue navegando nas documentações](#continue-navegando-nas-documentações) ___ @@ -173,7 +154,7 @@ Após um determinado período, espera-se que uma mensagem de sucesso seja entreg ___ -Continue sua jornada no **terraglue** através das documentações! +## Continue navegando nas documentações - [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) - 👉 [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) *Você está aqui!* diff --git a/INFRA.md b/docs/markdown/INFRA.md similarity index 61% rename from INFRA.md rename to docs/markdown/INFRA.md index b21da41..1f5931b 100644 --- a/INFRA.md +++ b/docs/markdown/INFRA.md @@ -1,9 +1,17 @@ -*Fornecendo detalhes sobre toda a infraestrutura provisionada ao usuário* +
+
terraglue-logo +
## Table of Contents - [Table of Contents](#table-of-contents) -- [Antes de começar](#antes-de-começar) -- [Módulos Terraform](#módulos-terraform) +- [Passo a passo resumido](#passo-a-passo-resumido) +- [Passo a passo detalhado](#passo-a-passo-detalhado) + - [Configurando credenciais AWS](#configurando-credenciais-aws) + - [Clonando o repositório](#clonando-o-repositório) + - [Instalação dos módulos Terraform](#instalação-dos-módulos-terraform) + - [Visualizando plano de implantação](#visualizando-plano-de-implantação) + - [Implantando recursos no ambiente AWS](#implantando-recursos-no-ambiente-aws) +- [Conhecendo os módulos Terraform](#conhecendo-os-módulos-terraform) - [Analisando os recursos de infra provisionados](#analisando-os-recursos-de-infra-provisionados) - [Buckets SoR, SoT, Spec e outros](#buckets-sor-sot-spec-e-outros) - [Dados na camada SoR](#dados-na-camada-sor) @@ -12,21 +20,147 @@ - [IAM policies e roles](#iam-policies-e-roles) - [Glue job](#glue-job) - [Dados na camada SoT](#dados-na-camada-sot) +- [Continue navegando nas documentações](#continue-navegando-nas-documentações) -## Antes de começar +___ -> Antes de navegarmos pelo detalhamento da infraestrutura provisionada no projeto, é importante garantir que todas as etapas de preparação e instalação foram cumpridas. Para maiores detalhes, o arquivo [GETTINGSTARTED.md](https://github.com/ThiagoPanini/terraglue/blob/develop/GETTINGSTARTED.md) contempla todo o processo necessário de iniciação. +## Passo a passo resumido -- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- 👉 [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) *Você está aqui!* -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) +Visando proporcionar uma versão ágil de utilização, o consumo do **terraglue** pode ser resumido às seguintes etapas: + +1. Configuração das credenciais AWS via `aws configure` +2. Clonagem do repositório para o ambiente local +3. Instalação dos módulos terraform via `terraform init` no diretório `./infra` +4. Planejamento e visualização das implantações via `terraform plan` +5. Implantação dos recursos na conta AWS alvo via `terraform apply` + +Pronto! Com essas etapas será possível navegar e explorar toda a infraestrutura implantada automaticamente na AWS de acordo com os objetivos de aprendizado estabelecidos. + +Tem dúvidas sobre como realizar alguma das etapas acima? Siga o passo a passo detalhado abaixo para explicações mais aprofundada sobre cada processo envolvido. + +## Passo a passo detalhado + +Nesta seção, as etapas de instalação e uso do **terraglue** serão exemplificadas em uma maior riqueza de detalhes, garantindo assim que todos os usuários, experientes ou não, consigam aproveitar de todo esse conjunto extremamente útil de funcionalidades. + +### Configurando credenciais AWS + +Como o **terraglue** possui a AWS como principal *provider*, é natural garantir que o ambiente está acessível e existem permissões básicas para a criação dos recursos declarados. Neste momento, o primeiro e o segundo pré requisitos se fazem presentes: além da conta alvo de implantação, é preciso possuir acesso a um usuário com acesso programático suficiente para a realização das chamadas necessárias. + +Dessa forma, com as chaves `access_key_id` e `secret_access_key` em mãos, execute o comando abaixo no terminal e siga os passos solicitados para que a [configuração do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) seja concluída com sucesso. + +```bash +# Configurando credenciais do AWS CLI +aws configure +``` + +
+ 📷 Clique para visualizar a imagem +
+
terraglue-aws-configure +
+
+
+ +**Obs:** as configurações demonstradas pela imagem acima funcionam apenas como um exemplo. O usuário deve informar suas próprias configurações de acordo com as especificidades de seu próprio ambiente. Caso o usuário já tenha realizado as etapas de configuração do AWS CLI, este passo pode tranquilamente ser ignorado. + +É importante também citar que, em alguns ambientes, é preciso informar também o AWS Session Token. Dessa forma, ao invés de configurar as credenciais utilizando o comando `aws configure`, o usuário poderia, em posse das chaves e do token, alterar manualmente o arquivo de credenciais utilizando um editor de texto (ex: `nano ~/.aws/credentials`). + +___ + +### Clonando o repositório + +Uma vez garantida a configuração do AWS CLI para as devidas chamadas de implantação na AWS, o repositório com o código fonte do projeto **terraglue** pode devidamente ser clonado para o repositório local através do comando: + +```bash +# Clonando repositório via SSH +git clone git@github.com:ThiagoPanini/terraglue.git +``` + +
+ 📷 Clique para visualizar a imagem +
+
terraglue-git-clone +
+
+
+ +Com isso, todos os códigos alocados no projeto, em sua versão mais recente, poderão ser acessados da forma mais cômoda para o usuário, seja através da própria linha de comando ou até mesmo utilizando uma IDE. + +
+ 📷 Clique para visualizar a imagem +
+
terraglue-ls +
+
+ +___ + +### Instalação dos módulos Terraform + +Como parte do processo de utilização do Terraform como ferramenta de IaC, é preciso inicializar os módulos presentes no projeto em um primeiro uso. Para isso, basta navegar até o diretório de infra do projeto e executar o comando próprio para a inicialização e obtenção dos insumos necessários do Terraform: + +```bash +# Navegando até o diretório de infra +cd infra/ + +# Inicializando os módulos +terraform init +``` + +Com isso, para validar o sucesso da operação, uma mensagem próxima à exemplificada pela imagem à seguir é esperada: + +
+ 📷 Clique para visualizar a imagem +
+
terraglue-terraform-init +
+
+ +___ + +### Visualizando plano de implantação + +Após a inicialização dos módulos do projeto e a obtenção dos insumos necessários para a plena utilização do Terraform, é possível executar o comando abaixo para visualizar todo o plano de implantação considerado dentro das funcionalidades do **terraglue**: + +```bash +# Visualizando plano de implantação +terraform plan +``` + +
+ 📷 Clique para visualizar a imagem +
+
terraglue-terraform-plan +
+
+
+ +> ⚠️ Como o **terraglue** comporta uma série de declaração de recursos, o *output* do comando `terraform plan` comporta uma série de detalhes. Se julgar necessário, analise com cuidado todas as implantações a serem realizadas em sua conta alvo. Ter controle sobre este passo garante uma total autonomia sobre tudo o que está sendo realizado, incluindo possíveis gastos na provedora cloud. Em caso de dúvidas, verifique a [documentação](https://github.com/ThiagoPanini/terraglue/blob/docs/visual-and-docs-refactorREADME.md) do projeto. + +___ + +### Implantando recursos no ambiente AWS + +Por fim, ao visualizar e concordar com o plano de implantação proporcionado pelo Terraform, o usuário pode finalmente executar o comando abaixo para realizar todo o processo de preparação de infraestrutura direto na conta AWS alvo: + +```bash +# Implantando recursos terraglue +terraform apply +``` + +
+ 📷 Clique para visualizar a imagem +
+
terraglue-terraform-apply +
+
+
+ +Após um determinado período, espera-se que uma mensagem de sucesso seja entregue ao usuário, garantindo assim que todas as inclusões e todos os recursos foram devidamente implantados no ambiente AWS. A partir deste ponto, o usuário terá em mãos todas as funcionalidades do **terraglue** disponíveis para uso! ___ -## Módulos Terraform +## Conhecendo os módulos Terraform O **terraglue** é um projeto Terraform organizado de forma a proporcionar, a seus usuários, um entendimento claro sobre cada operação de implantação realizada. Seguindo as boas práticas de criação de um projeto, sua construção foi dividida em [módulos](https://developer.hashicorp.com/terraform/language/modules) responsáveis por declarações específicas de recursos de acordo com um tema relacionado. @@ -51,7 +185,7 @@ O primeiro ponto a ser destacado no *kit* de funcionalidades está relacionado
📷 Clique para visualizar a imagem
-
terraglue-practical-buckets-s3 +
infra-buckets-s3
@@ -80,7 +214,7 @@ Ao executar o comando terraform para implantação dos recursos, este mesmo arqu
📷 Clique para visualizar a imagem
-
terraglue-practical-buckets-s3 +
infra-buckets-s3
@@ -109,7 +243,7 @@ Na imagem abaixo, é possível visualizar todas as tabelas e bancos de dados cat
📷 Clique para visualizar a imagem
-
terraglue-practical-data-catalog-01 +
infra-data-catalog-01
@@ -118,7 +252,7 @@ Entrando em maiores detalhes e utilizando a tabela `customers` como exemplo, a i
📷 Clique para visualizar a imagem
-
terraglue-practical-data-catalog-02 +
infra-data-catalog-02
@@ -127,7 +261,7 @@ Por fim, reforçando de uma vez por todas o poder dessa funcionalidade de catalo
📷 Clique para visualizar a imagem
-
terraglue-practical-data-catalog-03 +
infra-data-catalog-03
@@ -140,7 +274,7 @@ Provavelmente uma das primeiras ações realizadas por usuários após a inserç
📷 Clique para visualizar a imagem
-
terraglue-practical-athena-workgroup +
infra-athena-workgroup
@@ -149,7 +283,7 @@ Com isso, os usuários já podem iniciar o consumo de dados no Athena sem a nece
📷 Clique para visualizar a imagem
-
terraglue-practical-athena-query +
infra-athena-query
@@ -164,7 +298,7 @@ Dessa forma, o `terraglue` considera, em seus detalhes internos de implantação
📷 Clique para visualizar a imagem
-
terraglue-practical-iam-role +
infra-iam-role
@@ -182,7 +316,7 @@ E assim, alcançando o verdadeiro clímax do processo de implantação de recurs
📷 Clique para visualizar a imagem
-
terraglue-practical-glue-job-01 +
infra-glue-job-01
@@ -193,7 +327,7 @@ Ao acessar o job através do console e navegar até o menu *Job details* (ou det
📷 Clique para visualizar a imagem
-
terraglue-practical-glue-job-02 +
infra-glue-job-02
@@ -208,7 +342,7 @@ E assim, ao acessar o job do Glue criado e realizar sua execução, o usuário p
📷 Clique para visualizar a imagem
-
terraglue-practical-glue-sot-01 +
infra-glue-sot-01
@@ -217,17 +351,16 @@ Como resultado, o usuário terá disponível uma nova base de dados materializad
📷 Clique para visualizar a imagem
-
terraglue-practical-glue-sot-02 +
infra-glue-sot-02
___ -Continue sua jornada no **terraglue** através das documentações! +## Continue navegando nas documentações - [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- 👉 [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) *Você está aqui!* -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) \ No newline at end of file +- 👉 [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md) *Você está aqui!* +- [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) +- [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) +- [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md) diff --git a/TESTS.md b/docs/markdown/TESTS.md similarity index 88% rename from TESTS.md rename to docs/markdown/TESTS.md index dde18c8..b653a77 100644 --- a/TESTS.md +++ b/docs/markdown/TESTS.md @@ -1,8 +1,10 @@ -*Detalhes técnicos sobre a construção e execução de testes unitários de jobs Glue* +
+
terraglue-logo +
+ ## Table of Contents - [Table of Contents](#table-of-contents) -- [Antes de começar](#antes-de-começar) - [Uma breve introdução sobre testes](#uma-breve-introdução-sobre-testes) - [Desafios em testar jobs do Glue](#desafios-em-testar-jobs-do-glue) - [Escopo e abordagem](#escopo-e-abordagem) @@ -19,18 +21,7 @@ - [Testando funcionalidades da classe GlueJobManager](#testando-funcionalidades-da-classe-gluejobmanager) - [Testando funcionalidades da classe GlueETLManager](#testando-funcionalidades-da-classe-glueetlmanager) - [Testando funcionalidades da classe GlueTransformationManager](#testando-funcionalidades-da-classe-gluetransformationmanager) -___ - -## Antes de começar - -> Antes de detalhar, de fato, os procedimentos utilizados na implementação de testes unitários de jobs Glue na AWS, é importante garantir que a jornada de aprendizado no terraglue foi concluída com êxito. Para isso, os links abaixos podem ser de grande utilidade! - -- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- 👉 [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) *Você está aqui!* +- [Continue navegando nas documentações](#continue-navegando-nas-documentações) ___ @@ -79,7 +70,7 @@ Como exemplo prático de instalação em um ambiente Windows, após a execução
📷 Clique para visualizar a imagem
-
docker-desktop-on-windows +
docker-desktop-on-windows
@@ -100,7 +91,7 @@ A nova imagem estará, então, disponível para uso.
📷 Clique para visualizar a imagem
-
docker-glue-images +
docker-glue-images
@@ -121,7 +112,7 @@ Para facilitar o desenvolvimento de código e a execução de testes, o uso de u
📷 Clique para visualizar a imagem
-
vscode-dev-containers-extension +
vscode-dev-containers-extension
@@ -162,7 +153,7 @@ Em caso de sucesso da execução do comando acima, o usuário verá, em seu term
📷 Clique para visualizar a imagem
-
tests-docker-glue-pyspark +
tests-docker-glue-pyspark
@@ -175,7 +166,7 @@ Com o *container* em execução, o usuário pode acessar o Visual Studio Code e
📷 Clique para visualizar a imagem
-
tests-vscode-remote-explorer +
tests-vscode-remote-explorer
@@ -184,7 +175,7 @@ Assim, basta clicar com o botão direito do mouse e selecionar a opção *Attach
📷 Clique para visualizar a imagem
-
tests-vscode-container-attached +
tests-vscode-container-attached
@@ -208,7 +199,7 @@ pytest app/ -vv --color=yes --cov=./ --cov-report=xml
📷 Clique para visualizar a imagem
-
tests-pytest-container +
tests-pytest-container
@@ -274,7 +265,7 @@ pytest app/ -vv -m user_input
📷 Clique para visualizar a imagem
-
tests-pytest-user-input +
tests-pytest-user-input
@@ -296,7 +287,7 @@ pytest app/ -vv -m job_manager
📷 Clique para visualizar a imagem
-
tests-pytest-job-manager +
tests-pytest-job-manager
@@ -317,7 +308,7 @@ pytest app/ -vv -m etl_manager
📷 Clique para visualizar a imagem
-
tests-pytest-etl-manager +
tests-pytest-etl-manager
@@ -337,11 +328,11 @@ Existem, ainda, diferentes testes que podem ser implementados pelo usuário, com ___ -Continue sua jornada no **terraglue** através das documentações! +## Continue navegando nas documentações - [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main) -- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) -- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) -- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) -- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) -- 👉 [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md) *Você está aqui!* +- [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md) +- [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) +- [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) +- 👉 [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md) *Você está aqui!* + diff --git a/docs/ppt/terraglue-visual-identity.pptx b/docs/ppt/terraglue-visual-identity.pptx new file mode 100644 index 0000000..ecfa8a8 Binary files /dev/null and b/docs/ppt/terraglue-visual-identity.pptx differ