Включение межрегиональной репликации S3

Включение межрегиональной репликации S3#

Межрегиональная репликация (Cross-region replication или CRR) обеспечивает автоматическое асинхронное копирование объектов между корзинами S3, расположенными в одном и том же или в двух разных кластерах S3. Корзины, для которых настроена межрегиональная репликация, могут принадлежать одному и тому же пользователю. Репликация объектов может выполняться в одну или несколько корзин назначения.

Чтобы включить межрегиональную репликацию, необходимо добавить конфигурацию репликации к исходной корзине. Минимальная конфигурация должна обеспечивать корзины назначения, в которые будет выполняться репликация объектов, и пользователя с ролью, которая позволяет выполнение репликации объектов.

Ограничения

  • После включения межрегиональной репликации репликация будет выполняться только для новых объектов S3.

Предварительные требования

Настройка межрегиональной репликации между корзинами одного кластера S3

  1. Вам понадобятся одна исходная корзина и хотя бы одна корзина назначения. Если их нет, создайте их с помощью интерфейса командной строки AWS, стороннего приложения S3 или пользовательской панели продукта Кибер Инфраструктура. Например, чтобы создать корзины с помощью интерфейса командной строки AWS, выполните следующие шаги на машине, где выполняется настройка репликации:

    1. Добавьте профиль пользователя 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.

    2. Создайте исходную корзину и от одной до нескольких корзин назначения:

      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.

  2. Включите поддержку версий для каждой из этих корзин:

    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.

  3. Получите идентификатор пользователя-владельца исходной корзины из вывода команды ниже.

    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"
        }
    }
    
  4. Создайте конфигурационный файл репликации на машине, где выполняется настройка репликации. Например, создайте файл 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> — имя корзины назначения.

    Описание элементов файла конфигурации репликации см. ниже, в подразделе "Элементы конфигурации репликации".

  5. Настройте исходную корзину для межрегиональной репликации, указав конфигурационный файл репликации:

    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

  1. Вам понадобятся одна исходная корзина и хотя бы одна корзина назначения. Если их нет, создайте их с помощью интерфейса командной строки AWS, стороннего приложения S3 или пользовательской панели продукта Кибер Инфраструктура. Например, чтобы создать корзины с помощью интерфейса командной строки AWS, выполните следующие шаги на машине, где выполняется настройка репликации:

    1. Добавьте профили пользователя-владельца исходной корзины и пользователя-владельца корзин назначения в конфигурационный файл %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>

      Секретные ключи доступа пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.

    2. Создайте исходную корзину и от одной до нескольких корзин назначения:

      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>

      Имена профилей пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.

  2. Включите поддержку версий для каждой из этих корзин:

    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>

    Имена профилей пользователя-владельца исходной корзины и пользователя-владельца корзин назначения.

  3. Получите идентификатор пользователя-владельца исходной корзины из вывода команды ниже.

    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"
        }
    }
    
  4. На машине, где выполняется настройка репликации, создайте скрипт на 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> — имя корзины назначения).

    Укажите необходимые значения и задайте требуемую конфигурацию репликации. Для репликации в несколько корзин назначения создайте отдельное правило репликации для каждой из них. Описание элементов конфигурации репликации см. ниже, в подразделе "Элементы конфигурации репликации".

  5. На машине, где выполняется настройка репликации, задайте следующие переменные окружения:

    • 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 — секретный ключ доступа пользователя-владельца корзин назначения.

  6. Выполните 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>