0Pricing
Cloud & IT Cert Prep · Lezione

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-ready

Creazione 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 automatically

Formati 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

  1. Creare un data lake su S3
  2. AWS Glue: ETL e catalogo dei dati
  3. Amazon Athena: SQL serverless su S3
  4. Kinesis Streams, Firehose e analisi in tempo reale
← Torna a Cloud & IT Cert Prep