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 Cloud & IT Cert Prep 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 Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep 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 Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep 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 Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?
Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?
Sì. Ogni lezione Cloud & IT Cert Prep 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