Criação de um data lake no S3
Projete um data lake baseado no S3 com zonas de recepção, processamento e curadoria, aplique políticas de bucket e organize os dados por partição para otimizar as consultas.
Criação de um data lake no S3 é uma aula grátis de AWS Solutions Architect no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AWS Solutions Architect, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AWS Solutions Architect inclui 4 aulas no total.
O que é um data lake?
Um data lake é um repositório centralizado que armazena dados estruturados, semiestruturados e não estruturados em qualquer escala. Diferentemente de um data warehouse, um data lake armazena os dados em seu formato bruto e nativo até que sejam necessários para análise. O Amazon S3 é a base mais comum para data lakes na AWS devido à sua durabilidade, escalabilidade e integração com serviços de análise.
Arquitetura de zonas de um data lake
Um data lake do S3 bem projetado usa três zonas lógicas: a Landing Zone (ingestão bruta, sem alterações), a Processing Zone (dados limpos e transformados) e a Curated Zone (prontos para análise e consumo empresarial). Cada zona normalmente é um prefixo ou Bucket separado do S3. Esse padrão também é chamado de arquitetura medalhão (bronze, prata e ouro).
# Example zone structure inside one S3 bucket
# s3://my-data-lake/
# landing/ <- raw ingest from source systems
# processing/ <- cleansed, validated data
# curated/ <- aggregated, analytics-readyCriando a estrutura do Bucket do S3
Use a AWS CLI para criar um Bucket do S3 com versionamento e criptografia e aplique prefixos para cada zona. Ative o versionamento para que o reprocessamento sempre possa retornar à fonte bruta e ative a criptografia no lado do servidor (SSE-S3 ou SSE-KMS) para os dados em repouso. Bloqueie todo o acesso público para manter os dados privados.
aws s3api create-bucket \
--bucket my-data-lake-123 \
--region us-east-1
aws s3api put-bucket-versioning \
--bucket my-data-lake-123 \
--versioning-configuration Status=Enabled
aws s3api put-bucket-encryption \
--bucket my-data-lake-123 \
--server-side-encryption-configuration \
'{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'Aplicando políticas do Bucket para acesso às zonas
Cada zona deve ter sua própria política de acesso, para que diferentes equipes e serviços só possam interagir com o que precisam. Por exemplo, as funções de ingestão de dados recebem s3:PutObject no prefixo de aterrissagem, as funções de ETL recebem acesso de leitura na aterrissagem e de gravação no processamento, e as funções de análise recebem acesso somente de leitura na curadoria. Isso aplica o princípio do menor privilégio dentro do data lake.
# Attach a policy that allows the ETL role to read landing/ and write processing/
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:role/ETLRole"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-data-lake-123/landing/*"
},
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:role/ETLRole"},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-data-lake-123/processing/*"
}
]
}Particionando dados para eficiência nas consultas
O particionamento organiza os dados no S3 por hierarquias de pastas que correspondem a predicados de consulta (por exemplo, ano/mês/dia ou região/serviço). Quando o Athena ou o Glue lê dados particionados, ele examina apenas as partições relevantes, em vez de todo o conjunto de dados, reduzindo drasticamente o custo e o tempo das consultas. Uma boa chave de partição é aquela que aparece com frequência em cláusulas WHERE.
# Hive-style partition naming for year/month/day
# s3://my-data-lake-123/curated/sales/
# year=2024/month=01/day=15/part-00000.parquet
# year=2024/month=01/day=16/part-00000.parquet
# year=2024/month=02/day=01/part-00000.parquet
# Athena recognises this naming automaticallyFormatos colunares: Parquet e ORC
Armazenar dados em um formato colunar, como Apache Parquet ou ORC (Optimised Row Columnar), melhora significativamente o desempenho das consultas analíticas e reduz os custos de varredura de dados do S3. Os formatos colunares permitem que os mecanismos de consulta leiam apenas as colunas necessárias, compactem valores repetitivos com eficiência e ofereçam suporte ao envio de predicados. Sempre converta CSV ou JSON brutos para Parquet na zona de curadoria.
# Converting CSV to Parquet with AWS Glue (simplified PySpark)
import sys
from awsglue.context import GlueContext
from pyspark.context import SparkContext
sc = SparkContext()
glueContext = GlueContext(sc)
datasource = glueContext.create_dynamic_frame.from_catalog(
database='my_db', table_name='raw_sales')
glueContext.write_dynamic_frame.from_options(
frame=datasource,
connection_type='s3',
connection_options={'path': 's3://my-data-lake-123/curated/sales/'},
format='parquet')Políticas de ciclo de vida do S3 para gerenciamento de custos
Os dados na zona de aterrissagem crescem continuamente, mas os arquivos brutos mais antigos raramente são acessados novamente. Use políticas de ciclo de vida do S3 para transferir automaticamente os dados brutos para classes de armazenamento mais baratas ao longo do tempo. Por exemplo, mova os objetos em landing/ para S3 Glacier Instant Retrieval após 30 dias e para Glacier Deep Archive após 90 dias. Isso, por si só, pode reduzir os custos de armazenamento de dados históricos em 70–90%.
aws s3api put-bucket-lifecycle-configuration \
--bucket my-data-lake-123 \
--lifecycle-configuration '{
"Rules": [{
"ID": "ArchiveLanding",
"Filter": {"Prefix": "landing/"},
"Status": "Enabled",
"Transitions": [
{"Days": 30, "StorageClass": "GLACIER_IR"},
{"Days": 90, "StorageClass": "DEEP_ARCHIVE"}
]
}]
}'Lake Formation para acesso detalhado
O AWS Lake Formation atua sobre o S3 e o Glue Data Catalogue para fornecer controle de acesso no nível de tabela, coluna e linha, sem exigir a criação de políticas complexas de Bucket. O Lake Formation integra-se ao Athena, ao Redshift Spectrum e ao EMR. É a abordagem preferencial quando várias equipes consultam o mesmo data lake e precisam de diferentes níveis de visibilidade sobre colunas confidenciais, como PII ou dados financeiros.
# Grant Lake Formation table access via CLI
aws lakeformation grant-permissions \
--principal DataLakePrincipalIdentifier=arn:aws:iam::123456789012:role/AnalystRole \
--permissions SELECT \
--resource '{
"Table": {
"DatabaseName": "my_db",
"Name": "curated_sales"
}
}'Notificações de eventos do S3 para acionadores de ingestão
Quando um novo arquivo chega à zona de aterrissagem do S3, é necessário acionar automaticamente o processamento. Use notificações de eventos do S3 para publicar um evento no SQS, no SNS ou no Lambda sempre que um objeto for criado. Uma função do Lambda ou um fluxo de trabalho do Glue então coleta o novo arquivo, valida-o e o move pelo fluxo de processamento. Isso cria um processo de ingestão de data lake totalmente automatizado e orientado por eventos.
# S3 event notification to trigger Lambda on new object
aws s3api put-bucket-notification-configuration \
--bucket my-data-lake-123 \
--notification-configuration '{
"LambdaFunctionConfigurations": [{
"LambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:ProcessNewFile",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {"FilterRules": [{"Name": "prefix", "Value": "landing/"}]}
}
}]
}'Criptografia e conformidade no data lake
Um data lake de produção deve aplicar criptografia em todos os pontos. Use chaves gerenciadas pelo cliente do AWS KMS (CMK) para SSE-KMS em dados confidenciais, exigindo concessões explícitas de chave para cada consumidor. Ative o S3 Object Lock no modo de conformidade para dados regulatórios que não podem ser excluídos nem substituídos. Use o Macie para descobrir e alertar automaticamente sobre PII armazenadas no lake.
# Enforce KMS encryption on all PUT operations via bucket policy
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-data-lake-123/curated/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
}Acesso entre contas ao data lake
Em organizações grandes, o Bucket do S3 do data lake fica em uma conta central da plataforma de dados, enquanto as equipes consumidoras operam em contas AWS separadas. Conceda acesso usando uma combinação de políticas de Bucket (que listam a entidade principal da conta consumidora) e funções do IAM na conta consumidora, que assumem permissões entre contas. O Resource Access Manager (RAM) é uma alternativa para compartilhamento baseado no Lake Formation.
# Bucket policy in central account allows consumer account to read curated/
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::999988887777:root"
},
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::my-data-lake-123",
"arn:aws:s3:::my-data-lake-123/curated/*"
]
}Verificação rápida
Teste sua compreensão dos conceitos de AWS Solutions Architect (SAA-C03) desta lição.
Recapitulação da lição
Nesta lição, você aprendeu que: data lakes usam o S3 com zonas de aterrissagem, processamento e curadoria; o particionamento e o formato Parquet reduzem os custos das consultas do Athena; e o Lake Formation fornece controle de acesso detalhado no nível de colunas e linhas. A seguir, exploraremos o AWS Glue para ETL sem servidor e o Glue Data Catalogue.
Perguntas Frequentes
A aula “Criação de um data lake no S3” é grátis?
Sim — o texto completo de “Criação de um data lake no S3” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AWS Solutions Architect, atualize para CoddyKit PRO. O curso de AWS Solutions Architect inclui 4 aulas no total.
O que vou aprender em “Criação de um data lake no S3”?
Projete um data lake baseado no S3 com zonas de recepção, processamento e curadoria, aplique políticas de bucket e organize os dados por partição para otimizar as consultas. Você pratica AWS Solutions Architect com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar AWS Solutions Architect?
Nenhuma experiência prévia é necessária. AWS Solutions Architect no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Criação de um data lake no S3”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de AWS Solutions Architect?
Sim. Cada aula de AWS Solutions Architect inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Criação de um data lake no S3
- AWS Glue: ETL e catálogo de dados
- Amazon Athena: SQL sem servidor no S3
- Streams do Kinesis, Firehose e análise em tempo real