/aws-data-pipeline

Bootcamp de Engenharia de Dados

Primary LanguagePython

Bootcamp de Engenharia de Dados

Setup AWS

  1. Crie uma conta na AWS (Conta root);
  2. Crie uma conta com permissão de administrador para ser a conta usada para projeto;
  3. Crie um servidor PostgreSQL na versão 13 usando o Amazon RDS;
  4. Clique no Security Groupo e libere o acesso a porta 5432 vindo do seu ip público;

Setup Ingestion to RDS

  1. Edite o arquivo .env com as informções do Amazon RDS;
  2. Instale todas as bibliotecas necessárias para rodar a aplicação de ingestão com o comando:
pip install -r requirements.txt
  1. Execute a aplicação app-ingestion-sql
  2. Conecte no banco de dados usando algum cliente de banco de dados, por exemplo o dbeaver e verifique se as tabelas foram criadas.

Setup Ingestion to Data Lake

  1. Edite o arquivo .env informando as credencias de chave de acesso, por exemplo:
AWS_ACCESS_KEY_ID=AKIA4WFGE4SB25sdfadf
AWS_SECRET_ACCESS_KEY=mwXXs8NjLwI83fnxrZ7rm4zsQHEftY3adfafd
  1. Crie um bucket na aws, no meu caso criei raw-bootcampde-872226808963
  2. Edit o arquivo .env informando o nome do bucket criado na variável BUCKET_NAME
  3. Execute a aplicação app-mobile-customers.py
  4. Verifique se os arquivos .json estão sendo inseridos no bucket.

Importante:

  • Interrompa o banco de dados RDS.

  • DMS Setup

  1. Crie uma instância de replicação.
  2. Crie os endpoints target e source.
  3. Use o código abaixo para criar a police/role para o endpoint target no s3.
  4. Documentação do s3 como target endpoint: https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::raw-bootcampde-872226808963/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::raw-bootcampde-872226808963"
            ]
        }
    ]
}
  1. Adicione a opção AddColumName no endpoint target.
  2. Crie uma task para iniciar o DMS.

Setup EMR

  1. Libere o acesso na porta 22. Para isso clique em EC2 security group clique no security group e libere a porta 22 para o IP.

Acesso via ssh com Putty:

  1. Copie a aplicação para o servidor do Amazon EMR usando o WinScp (Windows) ou o scp (linux), para linux segue um exemplo:
scp -i ~/Downloads/pair-bootcamp.pem job-spark-app-emr-redshift.py hadoop@ec2-54-90-3-194.compute-1.amazonaws.com:/home/hadoop/
  1. Para executar o cluster Spark use o comando abaixo:
spark-submit --packages io.delta:delta-core_2.12:2.0.0 --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" app-spark-processing.py

Crawlers

  • Usar os data catalog com o caminho o URI do objeto: s3://teste-872226808963/orders/
  • Sempre usar a barra no final para informar o data store.
  • Usar Natives tables

Athena

  • Importante: Alterar o engine para usar athena 3.0 (tabelas delta)
  • Utilize o arquivo querys.sql para consultar as tabelas diretamente no Athena.

Setup Athena + Power BI

Configuração do DSN 1 - Baixar o drive ODBC no site: Conectar-se ao Amazon Athena com ODBC - Amazon Athena

Alt text

1.1 - Escolha o drive conforme o sitema operacional:

Alt text

2 – Instalar o drive baixado.

Alt text

3 – No Windows pesquise "Odbc" no menu iniciar, depois clique em em Fonte de dados ODBC > DSN de sistema > Adicionar

Alt text

4 – Clique em DNS do Sistema, depois escolha o Simba Athena ODBC drive

Alt text

5 – Configurar o Simba com os dados solicitados

Alt text

6 – Configurar as opções de autenticação

Alt text

Obtendo dados do Athena no Power BI

1 – No Power BI, em obter dados, selecionar o conector ODBC

Alt text

2 – Escolher o DSN configurado

Alt text

3 – Escolher as tabelas desejadas

Alt text

Alt text

Delta tables

  • Enforcement Schema
ALTER TABLE public.customers ADD sexo varchar NULL;
ALTER TABLE public.orders ADD setor varchar NULL;
ALTER TABLE public.products ADD estoque_id varchar NULL;
  • Para trabalhar com alteração de schemas em tabelas delta use:
  • mergeSchema para atualizações em tabelas.
  • overwriteSchema para sobrescrever todo o schema de uma tabela.
.option("mergeSchema", "true")\
.option("overwriteSchema", "true")\

Terraform

  • Instale o aplicativo aws-cli
  1. Faça o download aqui conforme o seu sistema operacional: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
  2. Se estiver usando Windows instale com o seguinte comando:
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
  1. Feche o VSCode e abra novamente para o terminal encontrar o aws app no terminal.

  2. abra o terminal e digite: aws configure

  3. entre com as credenciais, exemplo: ACCESS_KEY: AKIA4WFGE4SBSIJOBTdd SECRET_KEY: 1qNX6PCP+g3RzjFank+nRKnLiIDMkYQfQMDcMdfx

  4. Para validar que as credenciais da AWS deram certo execute o comando: aws s3 ls

  5. Deve listar os buckets da conta.

Terraform - Infraestrutura como Código

  1. Antes de fazer o setup do terraform crie um bucket para ser nosso bucket de backend.

  2. Após criar o bucket, edite o arquivo backend.tf informando o nome do bucket criado. Exemplo:

terraform { backend "s3" { # Edit the bucket name and region bucket = "stack-terraform-backend-872226808963" key = "global/s3/terraform.tfstate" region = "us-east-1" } }*

Instalando o Terraform

  1. Faça o download aqui: https://developer.hashicorp.com/terraform/downloads

  2. extraia o binário do terraform dentro da pasta "terraform".

  3. Execute o comando para inicializar o terraform e fazer o setup do bucket para o backend

terraform init
  1. Execute o comando abaixo para planejar os recursos a serem criados:
terraform plan
  1. Execute o comando abaixo para fazer deploy de todos os recursos:
terraform apply
  1. Execute o comando abaixo para fazer remover toda infraestrutura criada:
terraform destroy