Créer un lac de données sur S3
Concevez un lac de données basé sur S3 avec une zone d’atterrissage, une zone de traitement et une zone organisée, appliquez des politiques de compartiment et organisez les données par partition pour optimiser les requêtes.
Créer un lac de données sur S3 est une leçon Cloud & IT Cert Prep gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cloud & IT Cert Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cloud & IT Cert Prep comprend 4 leçons au total.
Qu’est-ce qu’un lac de données ?
Un lac de données est un référentiel centralisé qui stocke des données structurées, semi-structurées et non structurées, quelle que soit leur échelle. Contrairement à un entrepôt de données, un lac de données conserve les données dans leur format brut et natif jusqu’à ce qu’elles soient nécessaires à l’analyse. Amazon S3 est la base la plus courante des lacs de données sur AWS grâce à sa durabilité, sa capacité de mise à l’échelle et son intégration avec les services d’analyse.
Architecture en zones d’un lac de données
Un lac de données S3 bien conçu utilise trois zones logiques : la zone d’atterrissage (ingestion brute, sans modification), la zone de traitement (données nettoyées et transformées) et la zone organisée (prête pour l’analyse et exploitable par l’entreprise). Chaque zone correspond généralement à un préfixe ou à un compartiment S3 distinct. Ce modèle est parfois appelé architecture médaillon (bronze, argent, or).
# Example zone structure inside one S3 bucket
# s3://my-data-lake/
# landing/ <- raw ingest from source systems
# processing/ <- cleansed, validated data
# curated/ <- aggregated, analytics-readyCréation de la structure du compartiment S3
Utilisez AWS CLI pour créer un compartiment S3 versionné et chiffré, puis appliquez des préfixes pour chaque zone. Activez le versionnage afin que le retraitement puisse toujours repartir de la source brute, et activez le chiffrement côté serveur (SSE-S3 ou SSE-KMS) pour les données au repos. Bloquez tout accès public afin de préserver la confidentialité des données.
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"}}]}'Application de politiques de compartiment pour l’accès aux zones
Chaque zone doit disposer de sa propre politique d’accès, afin que les différentes équipes et les différents services ne puissent manipuler que les données dont ils ont besoin. Par exemple, les rôles d’ingestion de données obtiennent l’autorisation s3:PutObject sur le préfixe d’atterrissage, les rôles ETL obtiennent un accès en lecture à la zone d’atterrissage et en écriture à la zone de traitement, et les rôles d’analyse obtiennent un accès en lecture seule à la zone organisée. Cela applique le principe du moindre privilège au sein du lac de données.
# 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/*"
}
]
}Partitionnement des données pour optimiser les requêtes
Le partitionnement organise les données dans S3 selon des hiérarchies de dossiers correspondant aux prédicats des requêtes (par exemple, année/mois/jour ou région/service). Lorsqu’Athena ou Glue lit des données partitionnées, il analyse uniquement les partitions pertinentes plutôt que l’ensemble du jeu de données, ce qui réduit considérablement le coût et la durée des requêtes. Une bonne clé de partition est une clé qui apparaît fréquemment dans les clauses 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 automaticallyFormats en colonnes : Parquet et ORC
Stocker les données dans un format en colonnes, comme Apache Parquet ou ORC (Optimised Row Columnar), améliore considérablement les performances des requêtes analytiques et réduit les coûts d’analyse des données S3. Les formats en colonnes permettent aux moteurs de requêtes de ne lire que les colonnes nécessaires, de compresser efficacement les valeurs répétitives et de prendre en charge le transfert des prédicats. Convertissez toujours les données CSV ou JSON brutes au format Parquet dans la zone organisée.
# 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')Politiques de cycle de vie S3 pour maîtriser les coûts
Les données de la zone d’atterrissage augmentent continuellement, mais les fichiers bruts anciens sont rarement consultés de nouveau. Utilisez les politiques de cycle de vie S3 pour transférer automatiquement les données brutes vers des classes de stockage moins coûteuses au fil du temps. Par exemple, déplacez les objets de landing/ vers S3 Glacier Instant Retrieval après 30 jours, puis vers Glacier Deep Archive après 90 jours. Cette seule mesure peut réduire de 70 à 90 % les coûts de stockage des données historiques.
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 pour un accès précis
AWS Lake Formation s’appuie sur S3 et le catalogue de données Glue pour fournir un contrôle d’accès au niveau des tables, des colonnes et des lignes, sans nécessiter l’écriture de politiques de compartiment complexes. Lake Formation s’intègre à Athena, Spectrum et EMR. C’est l’approche privilégiée lorsque plusieurs équipes interrogent le même lac de données et ont besoin d’une visibilité différente sur les colonnes sensibles, comme les PII ou les données financières.
# 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"
}
}'Notifications d’événements S3 pour déclencher l’ingestion
Lorsqu’un nouveau fichier arrive dans la zone d’atterrissage S3, vous devez déclencher automatiquement le traitement. Utilisez les notifications d’événements S3 pour publier un événement vers SQS, SNS ou Lambda chaque fois qu’un objet est créé. Une fonction Lambda ou un flux de travail Glue récupère ensuite le nouveau fichier, le valide et le fait progresser dans le pipeline. Vous obtenez ainsi un processus d’ingestion du lac de données entièrement automatisé et piloté par les événements.
# 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/"}]}
}
}]
}'Chiffrement et conformité dans le lac de données
Un lac de données de production doit imposer le chiffrement partout. Utilisez les clés gérées par le client AWS KMS (CMK) pour SSE-KMS sur les données sensibles, en exigeant des autorisations explicites sur la clé pour chaque consommateur. Activez le verrouillage des objets S3 en mode Compliance pour les données réglementaires qui ne doivent être ni supprimées ni remplacées. Utilisez Macie pour découvrir automatiquement les PII stockées dans le lac et générer des alertes à leur sujet.
# 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"
}
}
}Accès intercomptes au lac de données
Dans les grandes organisations, le compartiment S3 du lac de données réside dans un compte central de plateforme de données, tandis que les équipes consommatrices travaillent dans des comptes AWS distincts. Accordez l’accès en combinant des politiques de compartiment (qui indiquent le principal du compte consommateur) et des rôles IAM dans le compte consommateur, lesquels assument des autorisations intercomptes. Resource Access Manager (RAM) constitue une autre solution pour le partage fondé sur 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/*"
]
}Vérification rapide
Testez votre compréhension des concepts AWS Solutions Architect (SAA-C03) présentés dans cette leçon.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que : les lacs de données utilisent S3 avec des zones d’atterrissage, de traitement et organisées ; le partitionnement et le format Parquet réduisent les coûts des requêtes Athena ; et Lake Formation fournit un contrôle d’accès précis au niveau des colonnes et des lignes. Nous allons maintenant découvrir AWS Glue pour l’ETL sans serveur et le catalogue de données Glue.
Questions Fréquemment Posées
La leçon « Créer un lac de données sur S3 » est-elle gratuite ?
Oui — le texte complet de « Créer un lac de données sur S3 » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cloud & IT Cert Prep, passe à CoddyKit PRO. Le cours Cloud & IT Cert Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Créer un lac de données sur S3 » ?
Concevez un lac de données basé sur S3 avec une zone d’atterrissage, une zone de traitement et une zone organisée, appliquez des politiques de compartiment et organisez les données par partition pour… Tu pratiques Cloud & IT Cert Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Cloud & IT Cert Prep ?
Aucune expérience préalable n'est requise. Cloud & IT Cert Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Créer un lac de données sur S3 » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Cloud & IT Cert Prep ?
Oui. Chaque leçon Cloud & IT Cert Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Créer un lac de données sur S3
- AWS Glue : ETL et catalogue de données
- Amazon Athena : SQL sans serveur sur S3
- Flux Kinesis, Firehose et analyse en temps réel