Включение межрегиональной репликации S3#
Межрегиональная репликация (Cross-region replication или CRR) обеспечивает автоматическое асинхронное копирование объектов между корзинами S3, расположенными в одном и том же или в двух разных кластерах S3. Корзины, для которых настроена межрегиональная репликация, могут принадлежать одному и тому же пользователю. Репликация объектов может выполняться в одну или несколько корзин назначения.
Чтобы включить межрегиональную репликацию, необходимо добавить конфигурацию репликации к исходной корзине. Минимальная конфигурация должна обеспечивать корзины назначения, в которые будет выполняться репликация объектов, и пользователя с ролью, которая позволяет выполнение репликации объектов.
Ограничения
После включения межрегиональной репликации репликация будет выполняться только для новых объектов S3.
Предварительные требования
Кластеры S3 созданы в соответствии с инструкциями в разделе Создание кластера S3.
Настройка межрегиональной репликации между корзинами одного кластера S3
Вам понадобятся одна исходная корзина и хотя бы одна корзина назначения. Если их нет, создайте их с помощью интерфейса командной строки AWS, стороннего приложения S3 или пользовательской панели продукта Кибер Инфраструктура. Например, чтобы создать корзины с помощью интерфейса командной строки AWS, выполните следующие шаги на машине, где выполняется настройка репликации:
Добавьте профиль пользователя S3 в конфигурационный файл
%USERPROFILE%\.aws\credentialsдля Windows или$HOME/.aws/credentialsдля Linux:[<s3-user-profile>] aws_access_key_id = <key-id> aws_secret_access_key = <key-secret>
Где:
<s3-user-profile>Имя профиля пользователя S3.
<key-id>Идентификатор ключа доступа пользователя S3.
<key-secret>Секретный ключ доступа пользователя S3.
Создайте исходную корзину и от одной до нескольких корзин назначения:
aws s3api create-bucket --bucket <bucket-name> --endpoint-url <s3-api-url> --profile <s3-user-profile>
Где:
<bucket-name>Имя корзины.
<s3-api-url>URL-адрес S3 API.
<s3-user-profile>Имя профиля пользователя S3.
Включите поддержку версий для каждой из этих корзин:
aws s3api put-bucket-versioning --bucket <bucket-name> --endpoint-url <s3-api-url> --profile <s3-user-profile> \ --versioning-configuration 'Status=Enabled'
Где:
<bucket-name>Имя корзины.
<s3-api-url>URL-адрес S3 API.
<s3-user-profile>Имя профиля пользователя S3.
Получите идентификатор пользователя-владельца исходной корзины из вывода команды ниже.
aws s3api list-buckets --endpoint-url <s3-api-url> --profile <s3-user-profile>
Где:
<s3-api-url>URL-адрес S3 API.
<s3-user-profile>Имя профиля пользователя S3.
Пример вывода команды:
{ "Buckets": [ { "Name": "destination", "CreationDate": "2023-07-27T13:01:08+00:00" }, { "Name": "source", "CreationDate": "2023-07-27T12:58:21+00:00" } ], "Owner": { "DisplayName": "s3user", "ID": "e872c6783c209555" } }
Создайте конфигурационный файл репликации на машине, где выполняется настройка репликации. Например, создайте файл
replication.jsonсо следующим содержимым:{ "Role": "arn:aws:iam::<source-s3-user-id>:role/service-role/s3crr_role", "Rules": [ { "ID": "Rule1", "Priority": 1, "DeleteMarkerReplication": {"Status": "Disabled"}, "Filter": {}, "Status": "Enabled", "Destination": { "Bucket": "arn:aws:s3:::<destination-bucket-name>" } } ] }
В этом файле
<source-s3-user-id>— идентификатор пользователя-владельца исходной корзины,<destination-bucket-name>— имя корзины назначения.Описание элементов файла конфигурации репликации см. ниже, в подразделе "Элементы конфигурации репликации".
Настройте исходную корзину для межрегиональной репликации, указав конфигурационный файл репликации:
aws s3api put-bucket-replication --bucket <source-bucket-name> --endpoint-url <s3-api-url> --profile <s3-user-profile> \ --replication-configuration file://<replication-configuration-file>
Где:
<source-bucket-name>Имя исходной корзины.
<s3-api-url>URL-адрес S3 API.
s3-user-profileИмя профиля пользователя S3.
<replication-configuration-file>Путь к файлу конфигурации репликации.
Настройка межрегиональной репликации между корзинами двух кластеров S3
Вам понадобятся одна исходная корзина и хотя бы одна корзина назначения. Если их нет, создайте их с помощью интерфейса командной строки AWS, стороннего приложения S3 или пользовательской панели продукта Кибер Инфраструктура. Например, чтобы создать корзины с помощью интерфейса командной строки AWS, выполните следующие шаги на машине, где выполняется настройка репликации:
Добавьте профили пользователя-владельца исходной корзины и пользователя-владельца корзин назначения в конфигурационный файл
%USERPROFILE%\.aws\credentialsдля Windows или$HOME/.aws/credentialsдля Linux:[<source-s3-user-profile>] aws_access_key_id = <source-key-id> aws_secret_access_key = <source-key-secret> [<destination-s3-user-profile>] aws_access_key_id = <destination-key-id> aws_secret_access_key = <destination-key-secret>
Где:
<source-s3-user-profile>,<destination-s3-user-profile>Имена профилей пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.
<source-key-id>,<destination-key-id>Идентификаторы ключей доступа пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.
<source-key-secret>,<destination-key-secret>Секретные ключи доступа пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.
Создайте исходную корзину и от одной до нескольких корзин назначения:
aws s3api create-bucket --bucket <source-bucket-name> --endpoint-url <source-s3-api-url> --profile <source-s3-user-profile> aws s3api create-bucket --bucket <destination-bucket-name> --endpoint-url <destination-s3-api-url> --profile <destination-s3-user-profile>
Где:
<source-bucket-name>,<destination-bucket-name>Имена исходной корзины и корзин назначения.
<source-s3-api-url>,<destination-s3-api-url>URL-адреса S3 API кластеров, в которых расположены исходная корзина и корзины назначения.
<source-s3-user-profile>,<destination-s3-user-profile>Имена профилей пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.
Включите поддержку версий для каждой из этих корзин:
aws s3api put-bucket-versioning --bucket <source-bucket-name> --endpoint-url <source-s3-api-url> --profile <source-s3-user-profile> \ --versioning-configuration 'Status=Enabled' aws s3api put-bucket-versioning --bucket <destination-bucket-name> --endpoint-url <destination-s3-api-url> --profile <destination-s3-user-profile> \ --versioning-configuration 'Status=Enabled'
Где:
<source-bucket-name>,<destination-bucket-name>Имена исходной корзины и корзин назначения.
<source-s3-api-url>,<destination-s3-api-url>URL-адреса S3 API кластеров, в которых расположены исходная корзина и корзины назначения.
<source-s3-user-profile>,<destination-s3-user-profile>Имена профилей пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.
Получите идентификатор пользователя-владельца исходной корзины из вывода команды ниже.
aws s3api list-buckets --endpoint-url <source-s3-api-url> --profile <source-s3-user-profile>
Где:
<source-s3-api-url>URL-адрес S3 API кластера, в котором расположена исходная корзина.
<source-s3-user-profile>Имя профиля пользователя-владельца исходной корзины.
Пример вывода команды:
{ "Buckets": [ { "Name": "source", "CreationDate": "2023-07-27T12:58:21+00:00" } ], "Owner": { "DisplayName": "s3user", "ID": "e872c6783c209555" } }
На машине, где выполняется настройка репликации, создайте скрипт на Python со следующим содержимым:
import boto3 import json from botocore.client import Config import os client = boto3.client( service_name='s3', aws_access_key_id=os.environ['S3_ACCESS_KEY_ID'], aws_secret_access_key=os.environ['S3_SECRET_ACCESS_KEY'], endpoint_url='http://%s' % os.environ['S3_HOST'], use_ssl=False, verify=False, config=Config(signature_version='s3v4') ) bucket_name = "<source-bucket-name>" dest_endpoint='http://%s' % os.environ['CRR_DEST_ENDPOINT'] dest_access_key=os.environ['CRR_DEST_ACCESS_KEY_ID'] dest_secret_key=os.environ['CRR_DEST_SECRET_ACCESS_KEY'] bucket_replication_client_headers = { 'x-amz-geo-endpoint': dest_endpoint, 'x-amz-geo-access-key': dest_access_key, 'x-amz-geo-access-secret': dest_secret_key } lf = (lambda **kwargs: kwargs['params']['headers'].update(bucket_replication_client_headers)) client.meta.events.register('before-call.s3.PutBucketReplication', lf) client.put_bucket_replication( Bucket=bucket_name, ReplicationConfiguration={ "Role": "arn:aws:iam::<source-s3-user-id>:role/service-role/s3crr_role", "Rules": [ { "ID": "Rule1", "Priority": 1, "DeleteMarkerReplication": {"Status": "Disabled"}, "Filter": {}, "Status": "Enabled", "Destination": { "Bucket": "arn:aws:s3:::<destination-bucket-name>" } } ] } )
В этом файле:
<source-bucket-name>— имя исходной корзины;ReplicationConfiguration— содержит конфигурацию репликации (<source-s3-user-id>— идентификатор пользователя-владельца исходной корзины,<destination-bucket-name>— имя корзины назначения).
Укажите необходимые значения и задайте требуемую конфигурацию репликации. Для репликации в несколько корзин назначения создайте отдельное правило репликации для каждой из них. Описание элементов конфигурации репликации см. ниже, в подразделе "Элементы конфигурации репликации".
На машине, где выполняется настройка репликации, задайте следующие переменные окружения:
S3_ACCESS_KEY_ID— идентификатор ключа доступа пользователя-владельца исходной корзины;S3_SECRET_ACCESS_KEY— секретный ключ доступа пользователя-владельца исходной корзины;S3_HOST— DNS-имя S3 API кластера, в котором расположена исходная корзина;CRR_DEST_ENDPOINT— DNS-имя S3 API кластера, в котором расположены корзины назначения;CRR_DEST_ACCESS_KEY_ID— идентификатор ключа доступа пользователя-владельца корзин назначения;CRR_DEST_SECRET_ACCESS_KEY— секретный ключ доступа пользователя-владельца корзин назначения.
Выполните Python-сценарий для включения межрегиональной репликации из исходной корзины в одну или несколько корзин назначения.
Элементы конфигурации репликации
RoleУказывает роль, которая будет использоваться для репликации объектов. Задайте значение в формате
arn:aws:iam::<source-s3-user-id>:role/service-role/s3crr_role, где<source-s3-user-id>— это идентификатор пользователя-владельца исходной корзины.RulesПравила репликации, указывающие, для каких объектов выполнять репликацию и где хранить реплики.
IDУникальный идентификатор правила длиной до 255 символов.
PriorityУказывает, какое правило обладает более высоким приоритетом, когда два или более правил конфликтуют.
DestinationКонтейнер для информации о месте назначения репликации и его конфигурации.
BucketУказывает корзину, где необходимо хранить результаты. Задайте значение в формате
arn:aws:s3:::<destination-bucket-name>, где<destination-bucket-name>— это имя корзины назначения.StatusУказывает, включено ли правило. Возможные значения:
EnabledилиDisabled.DeleteMarkerReplicationУказывает, выполнять ли репликацию маркеров удаления. Если указан элемент
Filter, также необходимо указать элементDeleteMarkerReplication.
Подробное описание формата конфигурации репликации, ее элементов и дополнительные примеры см. в документации AWS.
Дополнительная информация
Чтобы просмотреть или проверить текущую конфигурацию репликации исходной корзины, выполните:
aws s3api get-bucket-replication --bucket <bucket-name> --endpoint-url <s3-api-url> --profile <s3-user-profile>
Чтобы просмотреть объекты в корзине и их ключи, выполните:
aws s3api list-objects --bucket <bucket-name> --endpoint-url <s3-api-url> --profile <s3-user-profile>
Чтобы просмотреть статус репликации объекта, выполните:
aws s3api head-object --bucket <bucket-name> --key <object-key> --endpoint-url <s3-api-url> --profile <s3-user-profile>
Для репликации из исходной корзины в несколько корзин назначения задайте несколько правил репликации в конфигурации репликации, указав соответствующие корзины назначения. Корзины назначения должны быть расположены в одном и том же кластере.
Чтобы выключить репликацию, выполните:
aws s3api delete-bucket-replication --bucket <bucket-name> --endpoint-url <s3-api-url> --profile <s3-user-profile>
См. также