Creare un data lake su S3
Progettare un data lake basato su S3 con zone di atterraggio, elaborazione e dati curati, applicare policy ai bucket e organizzare i dati per partizione per ottimizzare le query
Creare un data lake su S3 è una lezione AWS Solutions Architect gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AWS Solutions Architect, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AWS Solutions Architect include 4 lezioni in totale.
Che cos'è un data lake?
Un data lake è un repository centralizzato che archivia dati strutturati, semi-strutturati e non strutturati su qualsiasi scala. A differenza di un data warehouse, un data lake conserva i dati nel loro formato nativo e grezzo finché non sono necessari per l'analisi. Amazon S3 è la base più comune per i data lake su AWS grazie alla sua durabilità, scalabilità e integrazione con i servizi di analisi.
Architettura a zone di un data lake
Un data lake S3 ben progettato utilizza tre zone logiche: la Landing Zone (acquisizione dei dati grezzi, senza modifiche), la Processing Zone (dati ripuliti e trasformati) e la Curated Zone (pronta per l'analisi e utilizzabile dal business). Ogni zona è in genere un prefisso o un bucket S3 separato. Questo pattern è talvolta chiamato architettura medallion (bronzo, argento, oro).
# Example zone structure inside one S3 bucket
# s3://my-data-lake/
# landing/ <- raw ingest from source systems
# processing/ <- cleansed, validated data
# curated/ <- aggregated, analytics-readyCreazione della struttura del bucket S3
Utilizzi AWS CLI per creare un bucket S3 con versioning e crittografia e applichi i prefissi per ciascuna zona. Abiliti il versioning affinché sia sempre possibile tornare alla sorgente grezza durante una rielaborazione e abiliti la crittografia lato server (SSE-S3 o SSE-KMS) per i dati a riposo. Blocchi completamente l'accesso pubblico per mantenere privati i dati.
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"}}]}'Applicazione delle policy del bucket per l'accesso alle zone
Ogni zona dovrebbe avere una propria policy di accesso, in modo che team e servizi diversi possano accedere solo a ciò che è necessario. Ad esempio, ai ruoli di acquisizione dati viene concesso s3:PutObject sul prefisso landing, ai ruoli ETL l'accesso in lettura alla landing e in scrittura alla processing, mentre ai ruoli di analisi l'accesso in sola lettura alla curated. In questo modo si applica il principio del privilegio minimo all'interno del 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/*"
}
]
}Partizionamento dei dati per migliorare l'efficienza delle query
Il partizionamento organizza i dati in S3 secondo gerarchie di cartelle che corrispondono ai predicati delle query (ad esempio, anno/mese/giorno oppure regione/servizio). Quando Athena o Glue leggono dati partizionati, analizzano solo le partizioni pertinenti anziché l'intero dataset, riducendo drasticamente costi e tempi delle query. Una buona chiave di partizionamento è una chiave che compare frequentemente nelle clausole 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 automaticallyFormati colonnari: Parquet e ORC
Archiviare i dati in un formato colonnare, come Apache Parquet o ORC (Optimised Row Columnar), migliora notevolmente le prestazioni delle query analitiche e riduce i costi di scansione dei dati in S3. I formati colonnari consentono ai motori di query di leggere solo le colonne necessarie, comprimere in modo efficiente i valori ripetitivi e supportare il predicate pushdown. Converta sempre i dati CSV o JSON grezzi in Parquet nella curated zone.
# 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')Policy del ciclo di vita S3 per la gestione dei costi
I dati nella landing zone aumentano continuamente, ma i file grezzi più vecchi vengono consultati nuovamente solo di rado. Utilizzi le S3 Lifecycle Policies per trasferire automaticamente nel tempo i dati grezzi verso classi di storage meno costose. Ad esempio, trasferisca gli oggetti in landing/ a S3 Glacier Instant Retrieval dopo 30 giorni e a Glacier Deep Archive dopo 90 giorni. Questa sola operazione può ridurre del 70–90% i costi di storage dei dati storici.
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 per un accesso granulare
AWS Lake Formation si basa su S3 e sul Glue Data Catalogue per fornire il controllo degli accessi a livello di tabella, colonna e riga senza dover scrivere policy di bucket complesse. Lake Formation si integra con Athena, Redshift Spectrum ed EMR. È l'approccio preferito quando più team eseguono query sullo stesso data lake e necessitano di livelli diversi di visibilità su colonne sensibili, come i dati PII o finanziari.
# 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"
}
}'Notifiche degli eventi S3 per attivare l'acquisizione
Quando un nuovo file arriva nella landing zone S3, è necessario attivare automaticamente l'elaborazione. Utilizzi le S3 Event Notifications per pubblicare un evento su SQS, SNS o Lambda ogni volta che viene creato un oggetto. Una funzione Lambda o un workflow Glue acquisisce quindi il nuovo file, lo convalida e lo fa avanzare nella pipeline. In questo modo si crea un processo di acquisizione del data lake completamente automatizzato e basato sugli eventi.
# 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/"}]}
}
}]
}'Crittografia e conformità nel data lake
Un data lake di produzione deve applicare la crittografia ovunque. Utilizzi le AWS KMS Customer Managed Keys (CMK) per SSE-KMS sui dati sensibili, richiedendo concessioni esplicite sulla chiave per ogni consumer. Abiliti S3 Object Lock in modalità Compliance per i dati normativi che non devono essere eliminati o sovrascritti. Utilizzi Macie per individuare automaticamente e segnalare i dati PII archiviati nel 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"
}
}
}Accesso cross-account al data lake
Nelle organizzazioni di grandi dimensioni, il bucket S3 del data lake risiede in un account centrale di data platform, mentre i team consumer operano in account AWS separati. Conceda l'accesso utilizzando una combinazione di policy del bucket (che specifichino il principal dell'account consumer) e ruoli IAM nell'account consumer, configurati per assumere autorizzazioni cross-account. Resource Access Manager (RAM) è un'alternativa per la condivisione basata su 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 rapida
Verifichi la Sua comprensione dei concetti di AWS Solutions Architect (SAA-C03) trattati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: i data lake utilizzano S3 con zone landing, processing e curated; il partizionamento e il formato Parquet riducono i costi delle query Athena; inoltre, Lake Formation fornisce un controllo granulare degli accessi a livello di colonna e di riga. Nella prossima lezione esploreremo AWS Glue per l'ETL serverless e il Glue Data Catalogue.
Domande Frequenti
La lezione «Creare un data lake su S3» è gratuita?
Sì — il testo completo di «Creare un data lake su S3» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AWS Solutions Architect, passa a CoddyKit PRO. Il corso AWS Solutions Architect include 4 lezioni in totale.
Cosa imparerò in «Creare un data lake su S3»?
Progettare un data lake basato su S3 con zone di atterraggio, elaborazione e dati curati, applicare policy ai bucket e organizzare i dati per partizione per ottimizzare le query Eserciti AWS Solutions Architect con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AWS Solutions Architect?
Non è richiesta alcuna esperienza precedente. AWS Solutions Architect su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Creare un data lake su S3»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AWS Solutions Architect?
Sì. Ogni lezione AWS Solutions Architect include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creare un data lake su S3
- AWS Glue: ETL e catalogo dei dati
- Amazon Athena: SQL serverless su S3
- Kinesis Streams, Firehose e analisi in tempo reale