Выполнить действие по событию в Объектном хранилище
Объектное хранилище позволяет вызывать пользовательскую функцию при операциях с объектами.
- Настройте контейнер.
- Настройте реакцию serverless на события с пользовательскими объектами.
Настроить контейнер
В панели управления перейдите в раздел Объектное хранилище → Хранилище → вкладка Контейнеры.
Создайте контейнер. Мы рекомендуем использовать отдельные контейнеры для работы с Облачными функциями.
Откройте страницу контейнера → вкладка Настройки контейнера → карточка Управление доступом.
Введите имя пользователя, выдайте права.
Получите token для работы с Объектным хранилищем через API:
curl -i -XGET 'https://api.selcdn.ru/auth/v1.0' -H "X-Auth-User: <user>" -H "X-Auth-Key: <password>"
Укажите:
<user>
— имя пользователя Объектного хранилища;<password>
— пароль пользователя Объектного хранилища. При успешном выполнении запроса токен будет указан в заголовке x-auth-token. Сохраните токен.
Установите типы событий, за которыми надо следить:
curl -i -XPOST 'https://api.selcdn.ru/v1/SEL_<domain_id>/<container_name>' -H "X-Auth-Token: <token>" -H "X-Container-Meta-Notify-Lambda: <method>" -H "X-Container-Meta-Notify-Lambda-Glob: "
Укажите:
<domain_id>
— номер вашего аккаунта;<container_name>
— имя контейнера из шага 2;<token>
— полученный токен из шага 5;<method>
— один или несколько HTTP-методов.
Настроить реакцию serverless на события
Создайте триггер на событие в Объектном хранилище. В этом примере функция будет вызвана на событие типа PUT:
curl -XPUT '<https://ru-1.api.serverless.selcloud.ru/v1/feeds/create>' -H "X-Auth-Token: <auth_token>"-H "project-id: project_id" -d '{"feed_action": "/whisk.system/kafkaS3Feed/kafkaS3Feed", "action_name": "<function_name>", "parameters": {"domainId": {domain_id}, "containerName": "container_name", "eventType": "PUT"}}'
Укажите:
<auth_token>
— токен для Облачной платформы (не путать с Токен Selectel). Подробнее о получении токена;<project_id>
— ID проекта Облачной платформы;<function_name>
— имя функции из шага 1;<domain_id>
— номер вашего аккаунта;<container_name>
— имя созданного контейнера.
Проверить работу
- В панели управления перейдите в раздел Объектное хранилище → Хранилище → вкладка Контейнеры.
- Откройте страницу контейнера → Объекты.
- Загрузите файл в созданный контейнер.
- В панели управления перейдите в раздел Облачная платформа → Функции.
- Откройте страницу функции → вкладка Логи.
Заголовки контейнеров
Для того чтобы Объектное хранилище начало отправлять события при изменении пользовательских объектов, установите на контейнер следующие заголовки:
X-Container-Meta-Notify-Lambda: <method>[,method...]
— в значении данного заголовка укажите http-методы для которых нужно генерировать событие.Поддерживаемые методы: PUT, DELETE, COPY.
Метод PUT также включает в себя POST, то есть при запросе POST на объект будет сгенерировано событие PUT.
Метод PUT с заголовком X-Copy-From генерирует PUT событие, а не COPY. Только запрос COPY с заголовком Destination генерирует COPY событие указывающее на объект назначения.
По умолчанию события будут генерироваться для всех объектов в контейнере.
X-Container-Meta-Notify-Lambda-Glob: <glob>
— опциональный заголовок, при его отсутствии события генерируются для всех объектов. В значении данного заголовка укажите паттерн, с которым будет сверяться имя объекта в контейнере.Заголовок позволяет сузить количество объектов в контейнере, для которых будет происходить генерация событий.
Формат паттерна схож с shell-expansion в командной строке. Поддерживаются символы * для обозначения любого набора символов, кроме /, а также ? для обозначения любого символа, кроме /.
Примеры
События для всех объектов в контейнере
События генерируются при создании/изменении/удалении любого объекта в контейнере:
X-Container-Meta-Notify-Lambda: PUT,DELETE
События для одного каталога в контейнере
События генерируются при создании/изменении/удалении любого объекта в каталоге mydir, если его имя начинается с img_ и он имеет расширение .jpg:
X-Container-Meta-Notify-Lambda: PUT,DELETE
X-Container-Meta-Notify-Lambda-Glob: mydir/img_*.jpg
События только на создание/изменение объектов
События генерируются при создании/изменении любого объекта в корне контейнера, если он имеет расширение .txt:
X-Container-Meta-Notify-Lambda: PUT
X-Container-Meta-Notify-Lambda-Glob: *.txt