Как настроить «Облачные функции» в Облачном хранилище

Облачное хранилище позволяет вызывать пользовательскую функцию при операциях с объектами. Настройка данного функционала производится в два этапа:

  1. Настройка отправки событий с пользовательскими объектами
  2. Настройка реакции serverless на события с пользовательскими объектами

Настройка отправки событий

Для того чтобы Облачное хранилище начало отправлять события при изменении пользовательских объектов установите на контейнер следующие заголовки:

  • 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

Настройка

Для настройки контейнера:

  1. Создайте новый контейнер в Облачном хранилище. На данный момент мы рекомендуем использовать отдельные контейнеры для работы с Облачными функциями.
  2. Дайте выбранному пользователю доступ к созданному контейнеру для дальнейшего взаимодействия с Облачным хранилищем.
  3. Для дальнейшего взаимодействия с Облачным хранилищем через API получите token, выполнив запрос:

    curl -i -XGET "<https://api.selcdn.ru/auth/v1.0>" -H "X-Auth-User: $USER" -H "X-Auth-Key: $PASSWORD"

    Параметры $USER и $PASSWORD — логин и пароль пользователя из пункта 2. При успешном выполнении запроса токен будет указан в заголовке x-auth-token. Сохраните его для дальнейшего использования.

  4. Используя полученный 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: PUT, DELETE, COPY" -H "X-Container-Meta-Notify-Lambda-Glob: "

    Параметры:

  • domain_id — номер вашего аккаунта;
  • container_name — имя контейнера из пункта 1;
  • $TOKEN — полученный токен из пункта 3.

Настройка реакции serverless на события

Для настройки реакции serverless на события с пользовательскими объектами:

  1. Создайте новую функцию.
  2. Создайте триггер на событие в Облачном хранилище. В этом примере функция будет вызвана на событие типа 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": {do main_id}, "containerName": "container_name", "eventType": "PUT"}}’

    Параметры:

  • $AUTH_TOKEN — токен для «Облачной платформы». Подробнее о получении токена (не путать с Токен Selectel);
  • $PROJECT_ID — ID проекта «Облачной платформы».function_name — имя функции, которую создали ранее в пункте 1;
  • domain_id — номер вашего аккаунта;
  • container_name — имя созданного ранее контейнера.

Проверка

Для проверки:

  1. Загрузите файл в созданный контейнер в Облачном хранилище.
  2. Перейдите в раздел Логи на странице созданной ранее функции в разделе Функции в Облачной платформе. Вы должны увидеть примерно следующее: