Кэширование 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 объектами.
Первичное включение:
- получить список доступных S3 провайдеров от Arviol и предоставить их клиенту
- получить от клиента выбранного S3 провайдера, url S3 провайдера и имя S3 бакета
- провалидировать url S3 провайдера и имя S3 бакета в соответствии с выбранным ранее S3 провайдером
- создать S3 ресурс
- создать S3 бакет
- предоставить кли енту сгенерированный финальный url для обращения к объектам бакета через CDN серверы:
s3_resource.cdn_s3_domain/s3_bucket.name
API методы
S3 провайдеры
Валидация параметров провайдера
S3 ресурсы
- create_s3_resource
- get_s3_resource
- get_s3_resources
- update_s3_resource
- delete_s3_resource
- get_s3_resource_stats