Создание озера данных на 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 — локальная установка не требуется.
Все уроки этого курса
- Создание озера данных на S3
- AWS Glue: ETL и каталог данных
- Amazon Athena: бессерверный SQL в S3
- Потоки Kinesis, Firehose и аналитика в реальном времени