0Pricing
AWS Solutions Architect · Lección

Creación de un lago de datos en S3

Diseñe un lago de datos basado en S3 con zonas de aterrizaje, procesamiento y datos depurados, aplique políticas de bucket y organice los datos por particiones para optimizar las consultas

Creación de un lago de datos en S3 es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.

¿Qué es un lago de datos?

Un lago de datos es un repositorio centralizado que almacena datos estructurados, semiestructurados y no estructurados a cualquier escala. A diferencia de un almacén de datos, un lago de datos conserva los datos en su formato nativo y sin procesar hasta que se necesitan para el análisis. Amazon S3 es la base más habitual para los lagos de datos en AWS gracias a su durabilidad, escalabilidad e integración con los servicios de análisis.

Arquitectura por zonas de un lago de datos

Un lago de datos de S3 bien diseñado utiliza tres zonas lógicas: la Landing Zone (ingesta de datos sin procesar y sin modificar), la Processing Zone (datos depurados y transformados) y la Curated Zone (datos listos para análisis y utilizables por la empresa). Normalmente, cada zona es un prefijo o bucket de S3 independiente. Este patrón también se denomina a veces arquitectura medallion (bronce, plata y 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

Creación de la estructura del bucket de S3

Utilice AWS CLI para crear un bucket de S3 con versionado y cifrado, y aplique prefijos para cada zona. Habilite el versionado para que el reprocesamiento siempre pueda volver a la fuente sin procesar, y habilite el cifrado del lado del servidor (SSE-S3 o SSE-KMS) para los datos en reposo. Bloquee todo el acceso público para mantener los datos privados.

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

Aplicación de políticas de bucket para el acceso a las zonas

Cada zona debe tener su propia política de acceso, de modo que los distintos equipos y servicios solo puedan acceder a lo que necesitan. Por ejemplo, los roles de ingesta de datos obtienen s3:PutObject en el prefijo de aterrizaje, los roles de ETL obtienen acceso de lectura en el aterrizaje y de escritura en el procesamiento, y los roles de análisis obtienen acceso de solo lectura en la zona depurada. Esto aplica el principio de mínimo privilegio dentro del lago de datos.

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

Particionamiento de datos para mejorar la eficiencia de las consultas

El particionamiento organiza los datos en S3 mediante jerarquías de carpetas que corresponden a predicados de consulta (por ejemplo, año/mes/día o región/servicio). Cuando Athena o Glue lee datos particionados, solo analiza las particiones relevantes en lugar del conjunto de datos completo, lo que reduce considerablemente el coste y el tiempo de consulta. Una buena clave de partición es aquella que aparece con frecuencia en las cláusulas 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

Formatos columnares: Parquet y ORC

Almacenar los datos en un formato columnar, como Apache Parquet u ORC (Optimised Row Columnar), mejora considerablemente el rendimiento de las consultas analíticas y reduce los costes de análisis de datos de S3. Los formatos columnares permiten que los motores de consulta lean solo las columnas necesarias, compriman eficazmente los valores repetitivos y admitan el desplazamiento de predicados. Convierta siempre el CSV o JSON sin procesar a Parquet en la zona depurada.

# 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')

Políticas de ciclo de vida de S3 para gestionar costes

Los datos de la zona de aterrizaje crecen continuamente, pero rara vez se vuelve a acceder a los archivos sin procesar más antiguos. Utilice S3 Lifecycle Policies para trasladar automáticamente los datos sin procesar a clases de almacenamiento más económicas con el paso del tiempo. Por ejemplo, traslade los objetos de landing/ a S3 Glacier Instant Retrieval después de 30 días y a Glacier Deep Archive después de 90 días. Esto por sí solo puede reducir entre un 70 % y un 90 % los costes de almacenamiento de los datos históricos.

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 para un acceso detallado

AWS Lake Formation se sitúa sobre S3 y Glue Data Catalogue para proporcionar control de acceso a nivel de tabla, columna y fila sin tener que escribir políticas de bucket complejas. Lake Formation se integra con Athena, Redshift Spectrum y EMR. Es el enfoque recomendado cuando varios equipos consultan el mismo lago de datos y necesitan distintos niveles de visibilidad sobre columnas confidenciales, como datos de identificación personal (PII) o datos financieros.

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

Notificaciones de eventos de S3 para activar la ingesta

Cuando llega un archivo nuevo a la zona de aterrizaje de S3, debe activar automáticamente el procesamiento. Utilice S3 Event Notifications para publicar un evento en SQS, SNS o Lambda cada vez que se cree un objeto. A continuación, una función de Lambda o un flujo de trabajo de Glue recoge el archivo nuevo, lo valida y lo hace avanzar por la canalización. Así se crea un proceso de ingesta del lago de datos totalmente automatizado y basado en eventos.

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

Cifrado y cumplimiento en el lago de datos

Un lago de datos de producción debe aplicar el cifrado en todas partes. Utilice AWS KMS Customer Managed Keys (CMK) para SSE-KMS en los datos confidenciales, y exija concesiones explícitas de clave para cada consumidor. Habilite S3 Object Lock en modo Compliance para los datos normativos que no deben eliminarse ni sobrescribirse. Utilice Macie para detectar automáticamente y alertar sobre PII almacenada en el lago.

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

Acceso entre cuentas al lago de datos

En las organizaciones grandes, el bucket de S3 del lago de datos reside en una cuenta central de la plataforma de datos, mientras que los equipos consumidores operan en cuentas de AWS independientes. Conceda el acceso mediante una combinación de políticas de bucket (en las que se indique la entidad principal de la cuenta consumidora) y roles de IAM en la cuenta consumidora que asuman permisos entre cuentas. Resource Access Manager (RAM) es una alternativa para compartir datos mediante 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/*"
  ]
}

Comprobación rápida

Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.

Resumen de la lección

En esta lección ha aprendido que los lagos de datos utilizan S3 con zonas de aterrizaje, procesamiento y depuración; que el particionamiento y el formato Parquet reducen los costes de las consultas de Athena; y que Lake Formation proporciona un control de acceso detallado a nivel de columna y fila. A continuación, exploraremos AWS Glue para ETL sin servidor y Glue Data Catalogue.

Preguntas frecuentes

¿La lección «Creación de un lago de datos en S3» es gratis?

Sí — el texto completo de «Creación de un lago de datos en S3» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.

¿Qué aprenderé en «Creación de un lago de datos en S3»?

Diseñe un lago de datos basado en S3 con zonas de aterrizaje, procesamiento y datos depurados, aplique políticas de bucket y organice los datos por particiones para optimizar las consultas Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AWS Solutions Architect?

No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Creación de un lago de datos en S3»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?

Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Creación de un lago de datos en S3
  2. AWS Glue: ETL y catálogo de datos
  3. Amazon Athena: SQL sin servidor en S3
  4. Kinesis Streams, Firehose y análisis en tiempo real
← Volver a AWS Solutions Architect