0Pricing
Cloud & IT Cert Prep · Урок

Создание озера данных на S3

Спроектируйте озеро данных на основе S3 с зонами загрузки, обработки и подготовки, применяйте политики сегментов и организуйте данные по разделам для эффективного выполнения запросов.

«Создание озера данных на S3» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Что такое озеро данных

Озеро данных — это централизованное хранилище, в котором данные любого масштаба сохраняются в структурированном, полуструктурированном и неструктурированном виде. В отличие от хранилища данных, озеро данных хранит данные в их исходном, естественном формате до тех пор, пока они не понадобятся для анализа. Amazon S3 — наиболее распространенная основа озер данных в AWS благодаря надежности, масштабируемости и интеграции с аналитическими сервисами.

Архитектура зон озера данных

Хорошо спроектированное озеро данных на S3 использует три логические зоны: зону Landing (необработанный прием данных без изменений), зону Processing (очищенные и преобразованные данные) и зону Curated (данные, готовые для аналитики и использования бизнесом). Каждая зона обычно представляет собой отдельный префикс или отдельный бакет S3. Этот шаблон иногда называют медальонной архитектурой (бронза, серебро, золото).

# 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

Создание структуры бакета S3

Используйте AWS CLI, чтобы создать версионируемый зашифрованный бакет S3 и применить префиксы для каждой зоны. Включите версионирование, чтобы при повторной обработке всегда можно было вернуться к исходному источнику, и включите шифрование на стороне сервера (SSE-S3 или SSE-KMS) для данных в состоянии покоя. Заблокируйте весь публичный доступ, чтобы сохранить данные в тайне.

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

Применение политик бакета для доступа к зонам

У каждой зоны должна быть собственная политика доступа, чтобы разные команды и сервисы могли работать только с необходимыми им данными. Например, ролям приема данных предоставляется разрешение s3:PutObject для префикса Landing, ролям ETL — доступ на чтение к Landing и на запись в Processing, а ролям аналитики — доступ только на чтение к Curated. Это обеспечивает принцип минимальных привилегий внутри озера данных.

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

Секционирование данных для эффективного выполнения запросов

Секционирование организует данные в S3 по иерархии папок, соответствующей предикатам запросов (например, год/месяц/день или регион/сервис). Когда Athena или Glue читает секционированные данные, он сканирует только релевантные секции, а не весь набор данных, что значительно снижает стоимость и время выполнения запросов. Хороший ключ секционирования — это ключ, который часто встречается в предложениях 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

Колонночные форматы: Parquet и ORC

Хранение данных в колонночном формате, таком как Apache Parquet или ORC (Optimised Row Columnar), значительно повышает производительность аналитических запросов и снижает расходы на сканирование данных в S3. Колонночные форматы позволяют обработчикам запросов читать только необходимые столбцы, эффективно сжимать повторяющиеся значения и поддерживать проталкивание предикатов. Всегда преобразуйте исходные CSV или JSON в Parquet в зоне Curated.

# 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 для управления расходами

Объем данных в зоне Landing непрерывно растет, но к старым исходным файлам обращаются редко. Используйте политики жизненного цикла S3, чтобы автоматически переводить исходные данные в более дешевые классы хранения с течением времени. Например, через 30 дней перемещайте объекты из landing/ в S3 Glacier Instant Retrieval, а через 90 дней — в Glacier Deep Archive. Это само по себе может снизить расходы на хранение исторических данных на 70–90%.

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 для детализированного доступа

AWS Lake Formation работает поверх S3 и Glue Data Catalogue и предоставляет управление доступом на уровне таблиц, столбцов и строк без написания сложных политик бакетов. Lake Formation интегрируется с Athena, Redshift Spectrum и EMR. Это предпочтительный подход, когда несколько команд запрашивают одно и то же озеро данных и должны видеть разные наборы конфиденциальных столбцов, например PII или финансовые данные.

# 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 для запуска приема данных

Когда новый файл появляется в зоне Landing S3, необходимо автоматически запускать обработку. Используйте уведомления о событиях S3, чтобы публиковать событие в SQS, SNS или Lambda при создании объекта. Функция Lambda или рабочий процесс Glue затем получает новый файл, проверяет его и перемещает по конвейеру. Так создается полностью автоматизированный процесс приема данных в озеро данных, управляемый событиями.

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

Шифрование и соответствие требованиям в озере данных

Рабочее озеро данных должно обеспечивать шифрование повсюду. Используйте управляемые клиентом ключи AWS KMS (CMK) для SSE-KMS при работе с конфиденциальными данными и требуйте явных разрешений на ключ для каждого потребителя. Включите блокировку объектов S3 в режиме Compliance для нормативных данных, которые нельзя удалять или перезаписывать. Используйте Macie, чтобы автоматически обнаруживать PII в озере и уведомлять о них.

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

Доступ к озеру данных из разных аккаунтов

В крупных организациях бакет S3 озера данных находится в центральном аккаунте платформы данных, а команды-потребители работают в отдельных аккаунтах AWS. Предоставляйте доступ с помощью сочетания политик бакета (с указанием принципала аккаунта-потребителя) и ролей IAM в аккаунте-потребителе, которые получают разрешения для доступа между аккаунтами. Resource Access Manager (RAM) — это альтернативный вариант для совместного использования на основе 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/*"
  ]
}

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили концепции AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что озера данных используют S3 с зонами Landing, Processing и Curated, секционирование и формат Parquet снижают стоимость запросов Athena, а Lake Formation предоставляет детализированное управление доступом на уровне столбцов и строк. Далее мы рассмотрим AWS Glue для бессерверного ETL и Glue Data Catalogue.

Часто задаваемые вопросы

Урок «Создание озера данных на S3» бесплатный?

Да — полный текст урока «Создание озера данных на S3» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Создание озера данных на S3»?

Спроектируйте озеро данных на основе S3 с зонами загрузки, обработки и подготовки, применяйте политики сегментов и организуйте данные по разделам для эффективного выполнения запросов. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Создание озера данных на S3»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание озера данных на S3
  2. AWS Glue: ETL и каталог данных
  3. Amazon Athena: бессерверный SQL в S3
  4. Потоки Kinesis, Firehose и аналитика в реальном времени
← Назад к Cloud & IT Cert Prep