Оформление кода

В коде должна быть вызываемая функция (handler), которая будет выполняться при каждом вызове облачной функции. В качестве именованных аргументов она будет получать содержимое body (содержимое POST запроса) и query string (из URL).

Поддерживаются следующие виды ответа:

  • простой (например, в виде числа или строки);
  • детальный (объект с полями status_code, headers или body).

Детальный ответ позволяет облачной функции менять HTTP коды статуса и заголовки. При этом использование кодов 500 и 503 зарезервировано для отслеживания состояния исправности всего сервиса.

Детальный ответ отличается от простого наличием хотя бы одного из полей: status_code, headers или body. Если нет ни одного из них, то ответ функции считается простым и транслируется как есть.

Если в ответе функции было найдено хотя бы одно из перечисленных выше полей, то он считается детальным и в качестве тела ответа отдаётся содержимое параметра body, status_code транслируется в код HTTP ответа, содержимое headers в HTTP заголовки ответа.

Остальные поля игнорируются, а в логи записывается предупреждение об этом.

При выполнении кода стоит выделить 2 события:

  • запуск контейнера;
  • активация облачной функции.

При запуске контейнера происходит импорт вашего кода. Здесь рекомендуется инициализировать длительные соединения, которые можно безопасно переиспользовать для многих вызовов.

При активации облачной функции происходит вызов указанной вами функции (handler).

В среде выполнения Python

Входные параметры можно получить через словарь kwargs из примера ниже.

def handler(**kwargs):
    return f"Hello, {kwargs}"

В примере выше приведёт простой формат ответа. Детальный формат см. в примере ниже.

def handler(**kwargs):
    return {
        "status_code": 418,
        "headers": { "X-Auth-Token": "ABCDEFGJOHNISHIDDENFARFROMME" },
        "body": kwargs
    }

Пример инициализации соединения с СУБД при запуске контейнера можно просмотреть в примере на github.