AWS Solutions Architect · Les

Een data lake op S3 bouwen

Ontwerp een op S3 gebaseerd data lake met een landings-, verwerkings- en gecureerde zone, pas bucketbeleid toe en organiseer gegevens per partitie voor efficiënte query's.

Les 1 van 413 stappen

Een data lake op S3 bouwen is een gratis AWS Solutions Architect-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AWS Solutions Architect. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AWS Solutions Architect bevat in totaal 4 lessen.

Wat is een data lake?

Een data lake is een gecentraliseerde opslagplaats die gestructureerde, semi-gestructureerde en ongestructureerde gegevens op elke schaal opslaat. In tegenstelling tot een datawarehouse slaat een data lake gegevens op in hun onbewerkte, oorspronkelijke indeling totdat ze nodig zijn voor analyse. Amazon S3 is de meest gebruikte basis voor data lakes op AWS vanwege de duurzaamheid, schaalbaarheid en integratie met analysediensten.

Architectuur van data-lakezones

Een goed ontworpen S3-data lake gebruikt drie logische zones: de landingszone (onbewerkte opname, onaangeroerd), de verwerkingszone (opgeschoond en getransformeerd) en de gecurateerde zone (klaar voor analyse en bruikbaar voor de organisatie). Elke zone is doorgaans een afzonderlijke S3-prefix of bucket. Dit patroon wordt soms een medaillonarchitectuur genoemd (brons, zilver, goud).

# 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

De S3-bucketstructuur maken

Gebruik de AWS CLI om een S3-bucket met versiebeheer en versleuteling te maken en prefixes voor elke zone toe te passen. Schakel versiebeheer in, zodat je bij het opnieuw verwerken altijd kunt teruggaan naar de onbewerkte bron, en schakel versleuteling aan de serverzijde in (SSE-S3 of SSE-KMS) voor gegevens in rust. Blokkeer alle openbare toegang om de gegevens privé te houden.

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"}}]}'

Bucketbeleid toepassen voor zonetoegang

Elke zone moet een eigen toegangsbeleid hebben, zodat verschillende teams en services alleen de gegevens kunnen benaderen die ze nodig hebben. Zo krijgen rollen voor gegevensopname bijvoorbeeld s3:PutObject op de landingsprefix, krijgen ETL-rollen leestoegang tot de landing en schrijftoegang tot de verwerking, en krijgen analyserollen alleen-lezenrechten op de gecureerde zone. Zo dwing je het principe van minimale bevoegdheden af binnen het 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/*"
    }
  ]
}

Gegevens partitioneren voor efficiënte query's

Partitionering organiseert gegevens in S3 aan de hand van mappenstructuren die overeenkomen met querypredicaten (bijvoorbeeld jaar/maand/dag of regio/service). Wanneer Athena of Glue gepartitioneerde gegevens leest, worden alleen de relevante partities gescand in plaats van de volledige dataset. Hierdoor dalen de kosten en de querytijd aanzienlijk. Een goede partitiesleutel komt vaak voor in WHERE-componenten.

# 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

Kolomindelingen: Parquet en ORC

Het opslaan van gegevens in een kolomindeling, zoals Apache Parquet of ORC (Optimised Row Columnar), verbetert de prestaties van analytische query's aanzienlijk en verlaagt de kosten voor het scannen van S3-gegevens. Met kolomindelingen kunnen query-engines alleen de benodigde kolommen lezen, herhaalde waarden efficiënt comprimeren en predicaatpushdown ondersteunen. Converteer onbewerkte CSV- of JSON-gegevens altijd naar Parquet in de gecureerde 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')

S3-lifecyclebeleid voor kostenbeheer

Gegevens in de landingszone groeien voortdurend, maar oudere onbewerkte bestanden worden zelden opnieuw geopend. Gebruik S3 Lifecycle Policies om onbewerkte gegevens na verloop van tijd automatisch over te zetten naar goedkopere opslagklassen. Verplaats objecten in landing/ bijvoorbeeld na 30 dagen naar S3 Glacier Instant Retrieval en na 90 dagen naar Glacier Deep Archive. Alleen dit kan de opslagkosten voor historische gegevens met 70–90% verlagen.

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 voor fijnmazige toegang

AWS Lake Formation werkt boven op S3 en de Glue Data Catalogue en biedt toegangsbeheer op tabel-, kolom- en rijniveau zonder dat je complexe bucketbeleidsregels hoeft te schrijven. Lake Formation integreert met Athena, Redshift Spectrum en EMR. Dit is de aanbevolen aanpak wanneer meerdere teams hetzelfde data lake bevragen en verschillende zichtbaarheid nodig hebben voor gevoelige kolommen, zoals persoonsgegevens of financiële gegevens.

# 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"
    }
  }'

S3-gebeurtenismeldingen voor triggers van gegevensopname

Wanneer een nieuw bestand in de S3-landingszone terechtkomt, moet je automatisch de verwerking starten. Gebruik S3 Event Notifications om telkens wanneer een object wordt gemaakt een gebeurtenis naar SQS, SNS of Lambda te publiceren. Een Lambda-functie of Glue-workflow neemt het nieuwe bestand vervolgens op, valideert het en verplaatst het door de verwerkingsketen. Zo ontstaat een volledig geautomatiseerd, gebeurtenisgestuurd proces voor gegevensopname in een data lake.

# 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/"}]}
      }
    }]
  }'

Versleuteling en naleving in het data lake

Een data lake voor productie moet overal versleuteling afdwingen. Gebruik AWS KMS Customer Managed Keys (CMK) voor SSE-KMS op gevoelige gegevens en vereis expliciete sleuteltoekenningen voor elke gebruiker. Schakel S3 Object Lock in de nalevingsmodus in voor wettelijke gegevens die niet mogen worden verwijderd of overschreven. Gebruik Macie om persoonsgegevens in het data lake automatisch te ontdekken en hierover waarschuwingen te geven.

# 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"
    }
  }
}

Toegang tot een data lake vanuit meerdere accounts

In grote organisaties bevindt de S3-bucket van het data lake zich in een centraal account voor het dataplatform, terwijl gebruikende teams in afzonderlijke AWS-accounts werken. Verleen toegang met een combinatie van bucketbeleid (waarin de principal van het account van de gebruiker wordt vermeld) en IAM-rollen in het account van de gebruiker die machtigingen voor toegang tussen accounts aannemen. Resource Access Manager (RAM) is een alternatief voor delen op basis van 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/*"
  ]
}

Korte controle

Test je begrip van de AWS Solutions Architect-concepten (SAA-C03) uit deze les.

Samenvatting van de les

In deze les heb je geleerd dat data lakes S3 gebruiken met landings-, verwerkings- en gecureerde zones, dat partitionering en de Parquet-indeling de kosten van Athena-query's verlagen, en dat Lake Formation fijnmazig toegangsbeheer op kolom- en rijniveau biedt. Hierna bekijken we AWS Glue voor serverloze ETL en de Glue Data Catalogue.

Gratis beginnen

Leer AWS Solutions Architect met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Een data lake op S3 bouwen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad AWS Solutions Architect, waaronder “Een data lake op S3 bouwen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus AWS Solutions Architect bevat in totaal 4 lessen.

Wat leer ik in “Een data lake op S3 bouwen”?

Ontwerp een op S3 gebaseerd data lake met een landings-, verwerkings- en gecureerde zone, pas bucketbeleid toe en organiseer gegevens per partitie voor efficiënte query's. Je oefent met AWS Solutions Architect door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met AWS Solutions Architect te beginnen?

Ervaring vooraf is niet nodig. AWS Solutions Architect op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Een data lake op S3 bouwen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over AWS Solutions Architect?

Ja. Elke les over AWS Solutions Architect bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Een data lake op S3 bouwen
  2. AWS Glue: ETL en datapcatalogus
  3. Amazon Athena: serverloze SQL op S3
  4. Kinesis Streams, Firehose en realtimeanalyse
← Terug naar AWS Solutions Architect