<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo de Data Engineering - Data Universe</title>
	<atom:link href="https://datauniverse.com.br/category/data-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>https://datauniverse.com.br/category/data-engineering/</link>
	<description>Conteúdos sobre as áreas de Data Science, Data Analytics, Estatística e Probabilidade, Inteligência Artificial e Machine Learning.</description>
	<lastBuildDate>Mon, 20 Jan 2025 22:17:29 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://datauniverse.com.br/wp-content/uploads/2026/01/cropped-data-universe-logo-icon-32x32.png</url>
	<title>Arquivo de Data Engineering - Data Universe</title>
	<link>https://datauniverse.com.br/category/data-engineering/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>GA4 + Google Bigquery: Integrar dados do GA4 com o Big Query + Looker</title>
		<link>https://datauniverse.com.br/ga4-google-bigquery-integrar-dados-do-ga4-com-o-big-query-looker/</link>
					<comments>https://datauniverse.com.br/ga4-google-bigquery-integrar-dados-do-ga4-com-o-big-query-looker/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Fri, 23 Aug 2024 02:12:22 +0000</pubDate>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Cloud]]></category>
		<category><![CDATA[Projetos]]></category>
		<guid isPermaLink="false">https://dataisle.co/?p=2496</guid>

					<description><![CDATA[<p>Neste vídeo, guio você pelo processo completo de migração de dados do Google Analytics 4 para o BigQuery, seguido pela integração desses dados com um relatório no Looker Studio. Com instruções detalhadas e exemplos práticos, você aprenderá como configurar a exportação de dados, criar uma conexão robusta no BigQuery e, finalmente, transformar esses dados em [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/ga4-google-bigquery-integrar-dados-do-ga4-com-o-big-query-looker/">GA4 + Google Bigquery: Integrar dados do GA4 com o Big Query + Looker</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Neste vídeo, guio você pelo processo completo de migração de dados do Google Analytics 4 para o BigQuery, seguido pela integração desses dados com um relatório no Looker Studio. </p>



<p>Com instruções detalhadas e exemplos práticos, você aprenderá como configurar a exportação de dados, criar uma conexão robusta no BigQuery e, finalmente, transformar esses dados em insights visuais poderosos usando o Looker Studio. </p>



<p>Ideal para profissionais que buscam otimizar a análise de dados e aprimorar a tomada de decisões com ferramentas avançadas do Google.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="GA4 + Google Bigquery: Integrar dados do GA4 com o Big Query + Looker" width="1290" height="726" src="https://www.youtube.com/embed/L7N9Jqq8e-k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<p>O post <a href="https://datauniverse.com.br/ga4-google-bigquery-integrar-dados-do-ga4-com-o-big-query-looker/">GA4 + Google Bigquery: Integrar dados do GA4 com o Big Query + Looker</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/ga4-google-bigquery-integrar-dados-do-ga4-com-o-big-query-looker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Processamento de dados em lote com PySpark e Docker</title>
		<link>https://datauniverse.com.br/processamento-de-dados-em-lote-com-pyspark-e-docker/</link>
					<comments>https://datauniverse.com.br/processamento-de-dados-em-lote-com-pyspark-e-docker/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 28 Mar 2024 11:27:10 +0000</pubDate>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Projetos]]></category>
		<guid isPermaLink="false">https://dataisle.co/?p=2193</guid>

					<description><![CDATA[<p>Neste projeto, compartilharei o passo a passo de um projeto de processamento de dados em lote que utilizei em meu portfolio. O objetivo era transformar um arquivo JSON em um banco SQLite, utilizando PySpark e Docker. 1. Configurando o ambiente com Docker Compose Comecei criando um cluster PySpark em Docker com três containers: um master, [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/processamento-de-dados-em-lote-com-pyspark-e-docker/">Processamento de dados em lote com PySpark e Docker</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow" open><summary>Detalhes do projeto</summary>
<ul class="wp-block-list">
<li><strong>Link do projeto no Github:</strong> <a href="https://github.com/cerqueiralex/etl-pyspark-sqlite-docker/" target="_blank" rel="noreferrer noopener">https://github.com/cerqueiralex/etl-pyspark-sqlite-docker/</a></li>



<li><strong>Tecnologias:</strong> Python, PySpark, SQLite</li>



<li><strong>Categorias:</strong> Data Engineering, ETL</li>
</ul>
</details>



<p>Neste projeto, compartilharei o passo a passo de um projeto de processamento de dados em lote que utilizei em meu portfolio. O objetivo era transformar um arquivo JSON em um banco SQLite, utilizando PySpark e Docker.</p>



<figure class="wp-block-image"><a href="https://camo.githubusercontent.com/2be86e6ffa7921293dab3dc5e613ede05b5039d175ddd9f3e2d7eefc2b92942b/68747470733a2f2f692e696d6775722e636f6d2f3155766f526a642e706e67" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://camo.githubusercontent.com/2be86e6ffa7921293dab3dc5e613ede05b5039d175ddd9f3e2d7eefc2b92942b/68747470733a2f2f692e696d6775722e636f6d2f3155766f526a642e706e67" alt=""/></a></figure>



<p><strong>1. Configurando o ambiente com Docker Compose</strong></p>



<p>Comecei criando um cluster PySpark em Docker com três containers: um master, dois workers e um history para armazenar <a href="https://datauniverse.com.br/logs-logging/">logs</a>. Utilizei o Docker Compose para facilitar a configuração e o gerenciamento do cluster.</p>



<figure class="wp-block-image"><a href="https://camo.githubusercontent.com/4e3a38d0b1c9d373b467662c2e232dbbbbbe3b9979c3c7daf99b6d6af5b774c9/68747470733a2f2f692e696d6775722e636f6d2f756f6d663768742e706e67" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://camo.githubusercontent.com/4e3a38d0b1c9d373b467662c2e232dbbbbbe3b9979c3c7daf99b6d6af5b774c9/68747470733a2f2f692e696d6775722e636f6d2f756f6d663768742e706e67" alt=""/></a></figure>



<p><strong>2. Gerando a base de dados SQLite</strong></p>



<p>Em seguida, desenvolvi dois scripts Python:</p>



<ul class="wp-block-list">
<li><strong>Gerador de dados:</strong>&nbsp;Este script gerou um arquivo JSON com dados fictícios, simulando um cenário real.</li>



<li><strong>Criador da base de dados:</strong>&nbsp;Este script criou a base de dados SQLite e definiu a conexão com o arquivo JSON gerado.</li>
</ul>



<p><strong>3. Implementando o job ETL com PySpark</strong></p>



<p>O job ETL foi escrito em PySpark e implementado no container master do cluster. As principais etapas do job foram:</p>



<ul class="wp-block-list">
<li><strong>Leitura do arquivo JSON:</strong>&nbsp;O arquivo JSON gerado no passo 2 foi lido como um DataFrame do Spark.</li>



<li><strong>Definição do schema:</strong>&nbsp;Um schema foi definido para garantir a consistência dos dados na base SQLite.</li>



<li><strong>Tratamento de dados:</strong>&nbsp;O campo de e-mail foi tratado para remover caracteres inválidos e garantir a padronização.</li>



<li><strong>Gravação na base SQLite:</strong>&nbsp;O DataFrame final foi gravado na base SQLite criada no passo 2.</li>
</ul>



<p><strong>4. Executando o job ETL</strong></p>



<p>O job ETL foi executado no container master do cluster através do comando&nbsp;<code>spark-submit</code>. O processo de execução foi monitorado no console do container.</p>



<p><strong>5. Resultados e Considerações</strong></p>



<p>O job ETL foi executado com sucesso, transformando o arquivo JSON em um banco SQLite. A utilização do PySpark e do Docker proporcionou um ambiente escalável e eficiente para o processamento de dados.</p>



<p><strong>Pontos importantes do projeto:</strong></p>



<ul class="wp-block-list">
<li><strong>Utilização do Docker Compose para facilitar a configuração do cluster PySpark.</strong></li>



<li><strong>Desenvolvimento de scripts Python para gerar a base de dados SQLite e o arquivo JSON.</strong></li>



<li><strong>Implementação do job ETL em PySpark com leitura de dados, definição de schema, tratamento de dados e gravação na base SQLite.</strong></li>



<li><strong>Execução do job ETL no container master do cluster e monitoramento do processo.</strong></li>
</ul>



<p><strong>Conclusão:</strong></p>



<p>Este projeto demonstra como o PySpark e o Docker podem ser utilizados para realizar o processamento de dados em lote de forma eficiente e escalável. A utilização de containers facilita a configuração do ambiente e o deploy do job em diferentes plataformas.</p>



<p><strong>Este projeto foi realizado para fins de estudo e demonstração de habilidades. O código-fonte e os dados utilizados estão disponíveis em meu repositório GitHub.</strong></p>
<p>O post <a href="https://datauniverse.com.br/processamento-de-dados-em-lote-com-pyspark-e-docker/">Processamento de dados em lote com PySpark e Docker</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/processamento-de-dados-em-lote-com-pyspark-e-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Processo de ETL simples utilizando datalake MinIO</title>
		<link>https://datauniverse.com.br/processo-de-etl-simples-utilizando-datalake-minio/</link>
					<comments>https://datauniverse.com.br/processo-de-etl-simples-utilizando-datalake-minio/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 01 Feb 2024 02:27:40 +0000</pubDate>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Projetos]]></category>
		<guid isPermaLink="false">https://dataisle.co/?p=2052</guid>

					<description><![CDATA[<p>MinIO é um armazenamento de objetos de alto desempenho compatível com S3. Ele é projetado para cargas de trabalho de inteligência artificial/aprendizado de máquina em grande escala, data lakes e bancos de dados. É definido por software e pode ser executado em qualquer infraestrutura em nuvem ou local. Aqui irei organizar os arquivos na nuvem [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/processo-de-etl-simples-utilizando-datalake-minio/">Processo de ETL simples utilizando datalake MinIO</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow" open><summary>Detalhes do projeto</summary>
<ul class="wp-block-list">
<li><strong>Link do projeto no Github:</strong> <a href="https://github.com/cerqueiralex/etl-com-minio/" target="_blank" rel="noreferrer noopener">https://github.com/cerqueiralex/etl-com-minio/</a></li>



<li><strong>Tecnologias:</strong> Python, MinIO</li>



<li><strong>Categorias:</strong> Data Engineering, ETL</li>
</ul>
</details>



<p>MinIO é um armazenamento de objetos de alto desempenho compatível com S3. Ele é projetado para cargas de trabalho de inteligência artificial/aprendizado de máquina em grande escala, data lakes e bancos de dados. É definido por software e pode ser executado em qualquer infraestrutura em nuvem ou local.</p>



<p>Aqui irei organizar os arquivos na nuvem utilizando MiniO em máquina local, que possui os mesmos princípios do serviço S3 da Amazon AWS.</p>



<p>Site oficial: <a href="https://min.io">https://min.io</a></p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="717" height="450" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-12.png" alt="" class="wp-image-2064" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-12.png 717w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-12-300x188.png 300w" sizes="(max-width: 717px) 100vw, 717px" /></figure>



<h2 class="wp-block-heading">Vantagens e desvantagens de utilizar MinIO como datalake</h2>



<p><strong>Vantagens</strong></p>



<ul class="wp-block-list">
<li>Muito bom na recuperação de objetos.</li>



<li>Boa interface de navegação</li>



<li>Compatibilidade com formatos diferentes de storage</li>



<li>Muito fácil criar e trabalhar com buckets a nível de S3</li>
</ul>



<p><strong>Desvantagens</strong></p>



<ul class="wp-block-list">
<li>Baixa documentação</li>



<li>Pequenos bugs entre as atualizações</li>



<li>Dificudade de ver os <a href="https://datauniverse.com.br/logs-logging/">logs</a></li>



<li>Pouco seguro se não for bem implementado</li>
</ul>



<h2 class="wp-block-heading">Acessando o Dashboard MinIO utilizando o Docker Localmente</h2>



<p>Não irei entrar no detalhe de como subir os containers docker aqui, porém através <a href="https://min.io/docs/minio/container/index.html" target="_blank" rel="noreferrer noopener">desta documentação</a> você consegue implantar um servidor MinIO de um único nó e uma única unidade no Docker ou Podman para desenvolvimento inicial e avaliação do Armazenamento de Objetos MinIO e sua camada de API compatível com S3.</p>



<p>Para instruções sobre implantação em ambientes de produção, consulte &#8220;<a href="https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html#deploy-minio-distributed">Implantação MinIO: Múltiplos Nós, Múltiplas Unidades</a>&#8220;.</p>



<p>O MinIO está configurado na URL: <a href="http://127.0.0.1:9001">http://127.0.0.1:9001</a> (ele será carregado automaticamente no browser quando o docker estiver up)</p>



<h2 class="wp-block-heading">Configurando a região</h2>



<p>Primeiro é necessário configurar a região do nosso servidor em settings > region. Aqui estarei utilizando a região sa-east-1 (south america) para fazer o processamento dos dados.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="480" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-7-1024x480.png" alt="" class="wp-image-2059" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-7-1024x480.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-7-300x140.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-7-768x360.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-7.png 1057w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Raw Policy e Access Keys</h2>



<p>Para poder fazer o ETL, o arquivo python (que pode estar rodando localmente na máquina) precisa se conectar com o banco do MinIO que pode estar localizado em qualquer servidor em qualquer lugar do mundo.</p>



<p>Para isso, é necessário gerar as access keys e para isso, é necessário criar a raw policy primeiro.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1040" height="492" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-8.png" alt="" class="wp-image-2060" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-8.png 1040w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-8-300x142.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-8-1024x484.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-8-768x363.png 768w" sizes="(max-width: 1040px) 100vw, 1040px" /></figure>



<p>Aqui gerei uma política de acesso completa de leitura e escrita, dessa forma posso gravar arquivos, sobrescrevê-los e fazer a leitura deles.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="475" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-9-1024x475.png" alt="" class="wp-image-2061" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-9-1024x475.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-9-300x139.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-9-768x357.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-9.png 1051w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Esse é o formato da raw policy gerada:</p>



<pre class="wp-block-code"><code>{
    "Version": "2012-10-17",
    "Statement": &#91;
        {
            "Effect": "Allow",
            "Action": &#91;
                "s3:*"
            ],
            "Resource": &#91;
                "arn:aws:s3:::*"
            ]
        }
    ]
}</code></pre>



<h3 class="wp-block-heading">Gerando as Access Keys</h3>



<p>Na área de access keys, gero uma chave para que eu possa conectar o ETL com este servidor Minio. </p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="477" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-10-1024x477.png" alt="" class="wp-image-2062" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-10-1024x477.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-10-300x140.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-10-768x358.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-10.png 1050w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="473" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-13-1024x473.png" alt="" class="wp-image-2065" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-13-1024x473.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-13-300x139.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-13-768x355.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-13.png 1052w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Assim como na AWS, ao gerar uma chave, você só pode visualizar a Secret key uma única vez, dessa forma é imperativo baixar o arquivo csv que possui a seguinte estrutura contendo as duas chaves:</p>



<pre class="wp-block-code"><code>{"url":"http://127.0.0.1:9000",<strong>"accessKey":"mnzf2Dw34eOEohXh","secretKey":"kXuPY6NVaHMySNct8INu1LB0lwNVLfYJ"</strong>,"api":"s3v4","path":"auto"}</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="474" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-14-1024x474.png" alt="" class="wp-image-2066" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-14-1024x474.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-14-300x139.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-14-768x356.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-14.png 1047w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Por fim, é necessário ir até a access key que acabou de ser criada e aplicar a política de acesso nela, ou seja, estou atribuindo aquelas permissões à uma determinada chave, então quem tiver essa chave, terá permissões de leitura e escrita de arquivos no datalake.</p>



<h2 class="wp-block-heading">Extraindo os dados e conectando ao MinIO</h2>



<p>Beleza, agora que já tenho o ambiente e as chaves configuradas, basta criar um arquivo em python bem simples e conectá-lo ao nosso ambiente.</p>



<p>Para esse exemplo vou utilizar o pandaspara fazer a leitura dos arquivos e transformá-los em dataframes, e o boto3 que é uma biblioteca utilizada para fazer a conexão do cliente com o datalake. </p>



<p>Além disso, importo a classe <code>BytesIO</code> do módulo <code>io</code> em Python.</p>



<p><strong><code>io</code></strong> é um módulo em Python que fornece várias ferramentas para trabalhar com entrada/saída de dados (I/O). O nome &#8220;io&#8221; é uma abreviação de &#8220;input/output&#8221;.</p>



<p><code>BytesIO</code> é uma classe específica dentro do módulo <code>io</code>. Ela fornece uma interface para ler e escrever dados binários em memória, mas trata esses dados como se fossem provenientes de um fluxo de bytes, sem a necessidade de um arquivo físico.</p>



<p>A utilização típica do <code>BytesIO</code> é criar um objeto <code>BytesIO</code>, escrever dados binários nele e, em seguida, usá-lo onde seria esperado um objeto de arquivo (como, por exemplo, ao ler um arquivo binário).</p>



<pre class="wp-block-code"><code>!pip install pandas
!pip install boto3</code></pre>



<pre class="wp-block-code"><code>import pandas as pd
from io import BytesIO
import boto3
from io import StringIO </code></pre>



<p>Crio o cliente para conectar ao MinIO. Onde tenho [ACCESS KEY ID] e [SECRET ACCESS KEY] é preciso substituir pelas suas próprias chaves de acesso.</p>



<pre class="wp-block-code"><code>client = boto3.client('s3', 
    endpoint_url='http://seu-endpoint-aqui:9000',
    aws_access_key_id='&#91;ACCESS KEY ID]',
    aws_secret_access_key='&#91;SECRET ACCESS KEY]',
    aws_session_token=None,
    config=boto3.session.Config(signature_version='s3v4'),
    verify=False,
    region_name='sa-east-1'
)</code></pre>



<p>Aqui simplesmente carrego os dados com pandas. Estou utilizando uma base do kaggle &#8220;Most Subscribed 1000 Youtube Channels&#8221;</p>



<p><a href="https://www.kaggle.com/datasets/themrityunjaypathak/most-subscribed-1000-youtube-channels">https://www.kaggle.com/datasets/themrityunjaypathak/most-subscribed-1000-youtube-channels</a></p>



<pre class="wp-block-code"><code># Carregando os dados
file_path = 'topyoutube.csv'

df = pd.read_csv(file_path)

file_path</code></pre>



<p>Antes de fazer o upload do csv, preciso criá-lo e subir o csv na memória</p>



<pre class="wp-block-code"><code>csv_buffer = StringIO ()

df.to_csv(csv_buffer)</code></pre>



<h3 class="wp-block-heading">Escrita: carregando os objetos</h3>



<p>Depois que o csv estiver na memória através da função csv_buffer, posso uploadear ele para o datalake. Lembrando que é preciso substituir o &#8220;nome-do-bucket&#8221; pelo nome correto do seu bucket.</p>



<pre class="wp-block-code"><code>client.put_object (Body=csv_buffer.getvalue(), Bucket='nome-do-bucket', Key="diretorio/dataset.csv")</code></pre>



<p>Pronto! agora é possivel verificar o seu objeto no diretorio que foi criado dentro do bucket.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="471" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-16-1024x471.png" alt="" class="wp-image-2068" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-16-1024x471.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-16-300x138.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-16-768x353.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-16.png 1046w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Leitura: visualizando o objeto armazenado</h3>



<p>Agora vou fazer o processo inverso -> agora que o arquivo está no datalake, vou ler o arquivo. Para isso é necessário configurar um client de leitura.</p>



<pre class="wp-block-code"><code>obj = client.get_object(
    Bucket = 'nome-do-bucket',
    Key = "diretorio/dataset.csv"
).get("Body")

data = pd.read_csv(obj)
data.head()</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="427" height="180" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-18.png" alt="" class="wp-image-2070" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-18.png 427w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-18-300x126.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></figure>



<h2 class="wp-block-heading">Referências:</h2>



<ul class="wp-block-list">
<li><a href="https://min.io/" target="_blank" rel="noreferrer noopener">https://min.io/</a></li>



<li><a href="https://min.io/docs/minio/container/index.html" target="_blank" rel="noreferrer noopener">https://min.io/docs/minio/container/index.html</a></li>
</ul>
<p>O post <a href="https://datauniverse.com.br/processo-de-etl-simples-utilizando-datalake-minio/">Processo de ETL simples utilizando datalake MinIO</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/processo-de-etl-simples-utilizando-datalake-minio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Automatizando Infraestrutura AWS EC2 via IaC com Terraform no Docker</title>
		<link>https://datauniverse.com.br/automatizando-infraestrutura-aws-ec2-via-iac-com-terraform-no-docker/</link>
					<comments>https://datauniverse.com.br/automatizando-infraestrutura-aws-ec2-via-iac-com-terraform-no-docker/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Fri, 05 Jan 2024 22:12:18 +0000</pubDate>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Projetos]]></category>
		<guid isPermaLink="false">https://dataisle.co/?p=2011</guid>

					<description><![CDATA[<p>Este artigo explora a implementação prática da integração entre DevOps e Infraestrutura como Código (IaC), com foco na automação da infraestrutura AWS EC2 utilizando a ferramenta Terraform. Destaco aqui a importância da IaC, tratando a infraestrutura como código de software demonstrando os benefícios dessa abordagem na agilidade, rastreabilidade e escalabilidade da infraestrutura em nuvem. IaC [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/automatizando-infraestrutura-aws-ec2-via-iac-com-terraform-no-docker/">Automatizando Infraestrutura AWS EC2 via IaC com Terraform no Docker</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow" open><summary>Detalhes do projeto</summary>
<ul class="wp-block-list">
<li><strong>Link do projeto no Github:</strong> <a href="https://github.com/cerqueiralex/iac-ec2-terraform-docker" target="_blank" rel="noreferrer noopener">https://github.com/cerqueiralex/iac-ec2-terraform-docker</a></li>



<li><strong>Tecnologias:</strong> Docker, Terraform, AWS EC2</li>



<li><strong>Categorias:</strong> Data Engineering, IaC</li>
</ul>
</details>



<p>Este artigo explora a implementação prática da integração entre DevOps e Infraestrutura como Código (IaC), com foco na automação da infraestrutura AWS EC2 utilizando a ferramenta Terraform. Destaco aqui a importância da IaC, tratando a infraestrutura como código de software demonstrando os benefícios dessa abordagem na agilidade, rastreabilidade e escalabilidade da infraestrutura em nuvem.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="994" height="625" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-6.png" alt="" class="wp-image-2072" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-6.png 994w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-6-300x189.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-6-768x483.png 768w" sizes="(max-width: 994px) 100vw, 994px" /></figure>



<p>IaC (Infraestrutura como código) é um método para gerenciar e provisionar infraestrutura de TI utilizando código de programação, em vez de fazê-lo manualmente através de interfaces web ou de linha de comando. Isso permite que a infraestrutura seja tratada como qualquer outra parte do código de aplicativo, o que facilita a automação, a reprodução e o controle de versão.</p>



<p>IaC é usado para automatizar o provisionamento de recursos de infraestrutura, como máquinas virtuais, containers, armazenamento, rede e outros, além de automatizar a configuração deles. IaC também pode ser usado para automatizar o escalonamento horizontal e vertical, assim como a implantação de aplicações.</p>



<p>IaC é especialmente útil em ambientes de nuvem, onde os recursos podem ser provisionados e escalados rapidamente e é amplamente utilizado em conjunto com DevOps e práticas de desenvolvimento ágil para tornar mais fácil e rápido para equipes de desenvolvimento implementar e gerenciar suas aplicações.</p>



<h2 class="wp-block-heading">1. Acessar o AWS IAM e criar as chaves de autenticação&nbsp;</h2>



<p>O AWS Identity and Access Management (IAM) é um serviço da Amazon Web Services (AWS) que oferece controle seguro de acesso aos recursos e serviços da AWS.</p>



<p>O IAM desempenha um papel fundamental na segurança da AWS, permitindo que os usuários concedam ou neguem acesso a recursos, implementem a autenticação de fatores múltiplos e integrem políticas de segurança personalizadas, mas principalmente, o AWS IAM serve para controlar e proteger o acesso aos serviços e recursos da AWS, contribuindo para a implementação de práticas robustas de segurança na nuvem.</p>



<p>Nesse sentido, para poder gerenciar os recursos AWS via IaC, <strong>é essencial possuirmos uma chave de acesso IAM para se conectar como administrador e gerenciar todos os recursos.</strong> Essas chaves de autenticação permitem que o Terraform e os scripts de automação acessem sua conta. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="448" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-1024x448.png" alt="" class="wp-image-2003" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-1024x448.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-300x131.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-768x336.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-1536x673.png 1536w, https://datauniverse.com.br/wp-content/uploads/2024/01/image.png 1859w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>É importante destacar que por questões de segurança, não é indicado gerar essas chaves de acesso no usuário root ou superadmin, pois ela será utilizada na configuração do IaC e qualquer um que tiver acesso terá controle total à infraestrutura, podendo fazer quaisquer alterações e gerar custos indevidos, assim como notifica a AWS na hora da criação das chaves.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="399" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-1-1024x399.png" alt="" class="wp-image-2004" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-1-1024x399.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-1-300x117.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-1-768x299.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-1.png 1202w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>A Chave é composta de 2 estruturas, é recomendado baixar o .csv pois a segunda estrutura só pode ser visualizada uma única vez.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="148" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-2-1024x148.png" alt="" class="wp-image-2005" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-2-1024x148.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-2-300x43.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-2-768x111.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-2.png 1198w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">2. Criando imagem e container Docker</h2>



<p>A estrutura de diretórios padrão para a criação do projeto deve conter o diretório raíz e dentro o dockerfile junto com o conector &#8220;main.tf&#8221; que será utilizado para passar os atributos da máquina EC2 para a AWS.</p>



<ul class="wp-block-list">
<li>diretório &#8220;terraformiac&#8221;
<ul class="wp-block-list">
<li>Dockerfile</li>



<li>main.tf</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">2.1 Dockerfile</h3>



<p>Em seguida é necessário montar o Dockerfile que irá criar a imagem docker para rodar o Terraform e o AWS CLI</p>



<pre class="wp-block-code"><code># Usando a imagem oficial do Ubuntu como base (última versão)
FROM ubuntu:latest

# Atualizando os pacotes do sistema e instalar dependências necessárias
RUN apt-get update &amp;&amp; \
    apt-get install -y wget unzip curl

# Definir a versão do Terraform 
ENV TERRAFORM_VERSION=1.6.2

# Baixar e instalar Terraform
RUN wget https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip &amp;&amp; \
    unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip &amp;&amp; \
    mv terraform /usr/local/bin/ &amp;&amp; \
    rm terraform_${TERRAFORM_VERSION}_linux_amd64.zip

# Criar a pasta /terraformiac dentro do container
RUN mkdir /terraformiac

# Copiar main.tf para a pasta /terraformiac no container
COPY main.tf /terraformiac/

# Criar a pasta Downloads e instalar o AWS CLI (para acessar a AWS)
RUN mkdir Downloads &amp;&amp; \
    cd Downloads &amp;&amp; \
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" &amp;&amp; \
    unzip awscliv2.zip &amp;&amp; \
    ./aws/install

# Definir o comando padrão para execução quando o container for iniciado
CMD &#91;"/bin/bash"]
</code></pre>



<h3 class="wp-block-heading">2.2 Arquivo terraform &#8220;main.tf&#8221;</h3>



<p>Montando o arquivo terraform com os atributos da instância EC2. Estamos utilizando a imagem e instância t2.micro que está presente na camada gratuita da AWS. </p>



<p>É necessário também configurar a região de acordo com o projeto. Aqui está sendo utilizada a &#8220;us-east-2&#8221; que fica localizada em Ohio.</p>



<pre class="wp-block-code"><code>provider "aws" {
  region  = "us-east-2"  
}

#alterar imagem e instância de acordo com necessidade do projeto
resource "aws_instance" "tarefa1" {
  ami           = "ami-0a0d9cf81c479446a"  # AMI na AWS
  instance_type = "t2.micro"

#alterar tag de acordo com nome do projeto
  tags = {
    Name = "terraformiac"
  }
}
</code></pre>



<h3 class="wp-block-heading">2.3 Criando a imagem no Docker</h3>



<p>No terminal linux/mac, execute o comando abaixo para criar a imagem Docker</p>



<pre class="wp-block-code"><code>docker build -t terraform-image:terraformiac .</code></pre>



<p><strong>docker build</strong>: Este comando é utilizado para construir uma imagem Docker a partir de um Dockerfile.</p>



<p><strong>-t terraform-image:terraformiac</strong> : Esta parte etiqueta a imagem com um nome e uma tag opcional. Neste caso, a imagem será etiquetada como terraform-image com a tag <strong>terraformiac</strong> . Os dois pontos (:) separam o nome da imagem da tag.</p>



<p><code>. </code>: O ponto no final especifica o contexto de construção. O contexto de construção é o conjunto de arquivos em uma localização específica mencionada no Dockerfile. Neste caso, espera-se que o Dockerfile esteja no diretório atual (.).</p>



<p>Portanto, quando você executa este comando, o Docker procura por um Dockerfile no diretório atual e o utiliza para construir uma imagem chamada terraform-image com a tag <strong>terraformiac</strong> .</p>



<h3 class="wp-block-heading">2.4 Criando o container Docker</h3>



<p>Execute o comando abaixo para criar o container Docker </p>



<pre class="wp-block-code"><code>docker run -dit --name terraformiac terraform-image:terraformiac /bin/bash</code></pre>



<p><code>docker run -dit --name <strong>terraformiac</strong> terraform-image:<strong>terraformiac</strong> /bin/bash</code></p>



<p><code>docker run</code>: Este comando é utilizado para executar um contêiner a partir de uma imagem especificada.</p>



<p><code>-dit</code>:</p>



<ul class="wp-block-list">
<li><code>-d</code>: Modo destacado. Ele executa o contêiner em segundo plano, permitindo que você use o terminal para outros comandos.</li>



<li><code>-i</code>: Modo interativo. Mantém o STDIN aberto mesmo se não estiver conectado, permitindo interação com o contêiner.</li>



<li><code>-t</code>: Aloca um pseudo-TTY. Isso é frequentemente usado em conjunto com <code>-i</code> para simular um terminal real.</li>
</ul>



<p><code>--name <strong>terraformiac</strong> </code>: Atribui um nome ao contêiner em execução. Neste caso, o nome é definido como <strong>terraformiac</strong> .</p>



<p><code>terraform-image:<strong>terraformiac</strong> </code>: Especifica a imagem a ser usada para criar o contêiner. Refere-se à imagem terraform-image com a tag <strong>terraformiac</strong> .</p>



<p><code>/bin/bash</code>: Substitui o comando padrão especificado no Dockerfile e inicia um shell Bash interativo dentro do contêiner. Isso é útil para interagir com o contêiner quando estiver em execução.</p>



<p>Portanto, quando você executa este comando, o Docker criará um novo contêiner com base na imagem terraform-image com a tag <strong>terraformiac</strong> . O contêiner será executado em modo destacado e interativo, e você pode acessar seu shell usando /bin/bash. O contêiner é nomeado como <strong>terraformiac</strong> .</p>



<h3 class="wp-block-heading">2.5 Verficando as versões</h3>



<p>Para confirmar se tudo correu cde acordo, agora acessando o terminal docker, verifique as versões do Terraform e do AWS CLI com os comandos abaixo:</p>



<pre class="wp-block-code"><code>terraform version
aws --version</code></pre>



<h2 class="wp-block-heading">3. AWS&nbsp; CLI</h2>



<p>O <a href="https://docs.aws.amazon.com/cli/">AWS Command Line Interface (AWS CLI)</a> é uma ferramenta de linha de comando que permite aos usuários interagir e gerenciar recursos na Amazon Web Services (AWS) diretamente por meio do terminal.</p>



<p> Com suporte para uma ampla gama de operações, o AWS CLI simplifica tarefas como a criação de instâncias EC2, a configuração de buckets no Amazon S3 e a administração de serviços relacionados à nuvem. </p>



<p>Utilizando comandos intuitivos, os usuários podem automatizar processos, criar scripts e integrar operações da AWS em pipelines de desenvolvimento, proporcionando uma interface eficiente e flexível para a gestão de recursos na nuvem da AWS.</p>



<p>Por questões de segurança, é preferível configurar o AWS CLI manualmente, pois caso contrário você precisará colocar sua chave de segurança no arquivo Dockerfile, o que irá expor sua chave para qualquer um que tiver acesso à automação.</p>



<h3 class="wp-block-heading"><strong>3.1 Configurar o aws CLI via docker terminal</strong></h3>



<ol class="wp-block-list">
<li>Acessar o diretório do projeto com &#8220;cd&#8221;</li>



<li>usar o comando “aws configure” no terminal na pasta onde está o aws cli</li>



<li>digitar a primeira chave de acesso da instância</li>



<li>digitar a segunda chave de acesso</li>



<li>colocar o id da região ex: “us-east-2”</li>



<li>enter = padrão none</li>
</ol>



<h3 class="wp-block-heading">3.2 Testando conexão entre terraform e AWS</h3>



<p>Através do comando abaixo, ele deverá retornar por exemplo todos os buckets no terminal:</p>



<pre class="wp-block-code"><code>aws ec2 ls | awk ‘{print $NF}’</code></pre>



<p><strong><code>aws ec2 ls</code></strong>: Isso chama o AWS CLI para listar as instâncias EC2.</p>



<p><strong><code>|</code></strong>: O pipe <code>|</code> é usado para redirecionar a saída do comando anterior para o próximo comando.</p>



<p><strong><code>awk ‘{print $NF}’</code></strong>: É um comando <code>awk</code> usado para extrair e imprimir a última coluna (campo) de cada linha da saída anterior. O <code>$NF</code> representa o último campo de cada linha.</p>



<p>Então, o comando completo nos lista as instâncias EC2 e extrai o valor da última coluna para cada linha da saída.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="774" height="465" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-3.png" alt="" class="wp-image-2009" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-3.png 774w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-3-300x180.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-3-768x461.png 768w" sizes="(max-width: 774px) 100vw, 774px" /></figure>



<h2 class="wp-block-heading">4. Iniciar o Terraform</h2>



<p>Uma vez feita a conexão corretamente, basta iniciar o terraform através do comando</p>



<pre class="wp-block-code"><code>terraform init</code></pre>



<p class="has-small-font-size"><img loading="lazy" decoding="async" src="https://lh7-us.googleusercontent.com/YHBW9JLe1abllXykNzekME8COY8MEq1AtQYA-Hap81eNYbbhXkljV8Yr5uibQgT81A12SzIP9cuMdJ7hd0SWkG67QxVWZyx8_FP4MCVuqVqGkMLxfuqKEoIqTM_lgwIfatzN6B8oQb2AokrumBOboco" width="718" height="351"></p>



<p>Isso vai fazer com que ele crie todos os arquivos do terraform no diretório</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="490" height="115" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-4.png" alt="" class="wp-image-2010" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-4.png 490w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-4-300x70.png 300w" sizes="(max-width: 490px) 100vw, 490px" /></figure>



<p>por último, aplicar as configurações através do comando:</p>



<pre class="wp-block-code"><code>terraform apply</code></pre>



<p>Com esse comando você irá executar as configurações definidas no arquivo “main.tf”. Basicamente aqui ele irá mostrar todas as configurações de criação de uma nova instância de EC2</p>



<p><img loading="lazy" decoding="async" width="719" height="335" src="https://lh7-us.googleusercontent.com/RclTOGQEEavewhEdXNfg_UBjMvhUCCkcJp3ByJ_VO7DucknK59bgzDipMuprY6pxbCJGwqGoG7PBI46NwRUuFpHM6ZRUiU6XsyegOCWG7NnO-SGN6_9s7dlrr64FDWIkLK7bEUhA7ILHXS1audrannk"></p>



<p>Uma vez aplicadas as alterações, ele terá criado com sucesso as instâncias EC2 no painel AWS.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="433" src="https://datauniverse.com.br/wp-content/uploads/2024/01/image-5-1024x433.png" alt="" class="wp-image-2013" srcset="https://datauniverse.com.br/wp-content/uploads/2024/01/image-5-1024x433.png 1024w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-5-300x127.png 300w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-5-768x325.png 768w, https://datauniverse.com.br/wp-content/uploads/2024/01/image-5.png 1136w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Referências:</h2>



<ul class="wp-block-list">
<li>https://docs.aws.amazon.com/cli/</li>



<li>https://www.datascienceacademy.com.br/</li>



<li>https://docs.docker.com/</li>



<li>https://developer.hashicorp.com/terraform/docs</li>
</ul>
<p>O post <a href="https://datauniverse.com.br/automatizando-infraestrutura-aws-ec2-via-iac-com-terraform-no-docker/">Automatizando Infraestrutura AWS EC2 via IaC com Terraform no Docker</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/automatizando-infraestrutura-aws-ec2-via-iac-com-terraform-no-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
