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

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

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

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

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

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

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

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

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

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

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

При активации облачной функции происходит вызов указанной вами функции (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.

В среде выполнения Node.js

Входные параметры передаются объектом в первый аргумент функции.

Простой ответ функции:

module.exports.main = (inParams) => {
    return `Hello, ${inParams}`
}

Детальный ответ функции:

module.exports.main = (inParams) => {
    return {
        status_code: 418,
        headers: { "X-Auth-Token": "ABCDEFGJOHNISHIDDENFARFROMME" },
        body: inParams
    }
}