Вопрос или проблема
Я включил поток Kinesis на своей таблице DynamoDB, который затем используется Firehose для резервного копирования данных в S3. Теперь я хочу включить его для нескольких таблиц, но мне нужна отдельная папка для каждой таблицы в моем S3 бакете.
Я не могу включить динамическую партиционированию в Firehose, потому что ключ партиционирования одинаков в некоторых таблицах.
Что я могу сделать, чтобы преодолеть эту ситуацию?
Вы можете использовать отдельные потоки доставки Firehose для каждой таблицы DynamoDB или создать функцию Lambda для динамического партиционирования на основе имени таблицы.
Ответ или решение
Чтобы организовать резервное копирование данных из нескольких таблиц DynamoDB в разные папки вашего S3 ведра с использованием AWS Firehose, можно использовать два подхода:
1. Используйте отдельные потоки Firehose для каждой таблицы DynamoDB
Этот подход является наиболее простым и управляемым. Вам нужно создать отдельный поток доставки Firehose для каждой таблицы DynamoDB, что позволит вам указать уникальный префикс для папки в S3 для каждого потока. При настройке каждого потока Firehose вы сможете указать S3 Prefix
, который мог бы выглядеть, например, так:
- Для таблицы
TableA
:backups/TableA/
- Для таблицы
TableB
:backups/TableB/
Таким образом, при передаче данных в S3 данные из каждой таблицы будут сохраняться в своем собственном каталоге, что облегчит управление и доступ к резервным копиям.
2. Создание функции Lambda для динамической партиционирования на основе имени таблицы
Если создание нескольких потоков Firehose невозможно или нежелательно, в таком случае вы можете использовать AWS Lambda в сочетании с Firehose для реализации динамического партиционирования. Вот как это можно сделать:
-
Создайте функцию Lambda, которая будет срабатывать на события из Kinesis Stream, связанного с таблицей DynamoDB.
-
Обрабатывайте события: Внутри функции Lambda вы можете извлекать имя таблицы из события, поступающего из Kinesis.
-
Формируйте путь для S3: На основе имени таблицы сформируйте путь для хранения в S3 (например,
backups/{tableName}/
). -
Передавайте данные в Firehose: Отправляйте данные в Firehose вместе с указанным префиксом для S3, который вы сформировали.
Этот подход обеспечит динамическое распределение данных по папкам в зависимости от имени таблицы и позволит обойти ограничения на использование одинаковых ключей партиции.
Рекомендуемое решение
Если у вас ограниченное количество таблиц, и создание нескольких потоков Firehose не доставляет неудобства, то рекомендуется воспользоваться первым подходом с отдельными потоками Firehose. Это упростит архитектуру и управление.
Однако, если количество таблиц велико или вы хотите более динамическое решение, использование Lambda для динамического партиционирования будет более масштабируемым и гибким способом достичь желаемого результата.
В любом случае, убедитесь, что все необходимые разрешения настроены должным образом для Lambda, Firehose и S3, чтобы избежать проблем с доступом при передаче данных.