Перейти к основному содержимому
Версия: v1

Кэширование S3-объектов

Для кэширования объектов бакетов S3 создаются и настраиваются объекты s3_resource (S3 ресурсы) и s3_bucket (S3 бакеты), соответствующие бакетам клиента. При создании s3_resource необходимо выбрать S3 провайдера (s3_provider), к которому относится этот ресурс. Далее представим описание каждого объекта.

S3 провайдеры

Arviol поддерживает кэширование объектов ограниченного списка S3 провайдеров. Для получения списка воспользуйтесь соответствующим API методом.
Структура объекта s3_provider:

{
"id": "integer, Provider id",
"name": "string, Provider name",
"bucket_name_location": "string, Designates whether a bucket name is a part of a hostname or path",
"min_bucket_name_length": "integer, Minimum bucket name",
"max_bucket_name_length": "integer, Maximum bucket name",
"bucket_name_regex_pattern": "string, Regular expression for bucket name validation",
"bucket_naming_rule_description": "string, References or description for bucket naming rules",
"hostname_regex_pattern": "string, Regular expression for hostname validation",
"protocol_regex_pattern": "string, Regular expression for protocol validation",
"port_regex_pattern": "string, Regular expression for port validation",
"url_naming_rule_description": "string, References or description for hostname naming rules"
}

S3 ресурсы

Объект s3_resource является основой для бакетов, добавляемых клиентом далее. Он необходим для настройки взаимодействия между оригинальными бакетами клиента и бакетами, создаваемыми в системе. Для создания S3 ресурса необходимо указать параметры провайдера, на котором расположены s3 объекты:

  • его id в системе
  • протокол (http|https)
  • host
  • port

Для проверки валидности параметров, указанных клинетом, реализован специальный API метод.

После создания S3 ресурса в объект ресурса в поле cdn_s3_domain будет добавлено сгенерированное уникальное доменное имя, например, https://s128.s3-clients.arviol.com. При обращении к этому домену данные будут предоставлены из кэша.

Управление S3 ресурсами

Так как S3 ресурс является основой для бакетов, его обновление или удаление влияет на все бакеты, подключенные к нему. При обновлении S3 ресурса изменятся все конечные URL для обращения к объектам бакетов. При удалении S3 ресурса удаляются и все его бакеты.

к сведению

Создание, обновление и удаление S3 ресурсов происходит в фоновых задачах

S3 бакеты

После создания S3 ресурса появляется возможность создавать бакеты, указывая конкретный ресурс. Для каждого S3 ресурса допускается создать не более 20 бакетов.

headers — список заголовков ответа, которые CDN добавляет к выдаче клиенту при запросе объектов бакета. Каждый заголовок описывается парой key и value. Их применяют для управления кэшированием, активации механизмов защиты или передачи служебных меток в ответе.

request_headers — список заголовков, которые CDN проксирует на origin при обращении за оригинальным объектом. Каждый заголовок описывается парой key и value. Полезны для передачи дополнительных признаков маршрутизации, параметров A/B-тестов и другой служебной информации backend-системам.

Основным параметром для создания бакета является его имя. Для валидации имени бакета, указанного клиентом, реализован специальный API метод.

Управление S3 бакетами

Управление услугой CDN для бакетов производится через объекты s3_bucket.

Для каждого бакета доступны следующие действия управления:

  • активировать услугу CDN (включить s3_bucket)
  • деактивировать услугу CDN (выключить s3_bucket)
  • очистить кэш бакета (удалить ранее закэшированные объекты с серверов CDN)

Статусы S3 бакета

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

Статусы S3 бакета:

  • OK - CDN для бакета включен
  • DISABLED - CDN для бакета выключен
  • BLOCKED - бакет заблокирован
примечание

Сразу после создания бакета его статут переходит в OK.

Ограничение доступа

Для S3 бакетов и ресурсов доступна функция ограничения доступа, за которую отвечают объекты s3_resource.access_params и s3_bucket.access_params. Структура объекта access_params:

{
"disallowed_country_codes": [
"RU",
"BY"
]
}

В поле disallowed_country_codes указывается список кодов стран, при запросах из которых клиент получит ответ с кодом ошибки 403 Forbidden. Коды стран должны соответствовать двухбуквенным обозначениям по ISO 3166 Alpha-2.

Подписанные ссылки

За включение и выключение функции ограничения доступа к бакетам по подписанным ссылкам отвечают поля signed_url_enabled и signed_url_key объектов s3_bucket. Включить и выключить функцию можно обновив объект s3_bucket. При включении функции доступ к бакету будет только у обладателей соответствующих ссылок. Генерация ссылок осуществляется клиентом.

Рекомендуемые сценарии

Ниже представлены рекомендации по управлению S3 объектами.

Первичное включение:

  1. получить список доступных S3 провайдеров от Arviol и предоставить их клиенту
  2. получить от клиента выбранного S3 провайдера, url S3 провайдера и имя S3 бакета
  3. провалидировать url S3 провайдера и имя S3 бакета в соответствии с выбранным ранее S3 провайдером
  4. создать S3 ресурс
  5. создать S3 бакет
  6. предоставить клиенту сгенерированный финальный url для обращения к объектам бакета через CDN серверы: s3_resource.cdn_s3_domain/s3_bucket.name

API методы

S3 провайдеры

Валидация параметров провайдера

S3 ресурсы

S3 бакеты