Создание и выполнение функции

Создайте и выполните функцию, которая приветствует пользователя. Используйте для этого языки программирования Python или Node.js.

Перед началом работы

  1. Создайте каталог в Яндекс.Облаке.
  2. Установите интерфейс командной строки YC CLI.

Создайте функцию на Python

  1. В консоли управления выберите каталог, в котором будет создана функция.

  2. Нажмите кнопку Создать ресурс.

  3. Выберите Функция.

  4. Введите имя функции.

    • Длина — от 3 до 63 символов.
    • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
    • Первый символ — буква. Последний символ — не дефис.
  5. Нажмите кнопку Создать.

Создайте функцию с помощью команды:

$ yc serverless function create --name=my-python-function
.done
id: b09bhaokchn9pnbrlseb
folder_id: aoek49ghmknnpj1ll45e
created_at: "2019-06-14T10:03:37.475Z"
name: my-python-function
log_group_id: eolm8aoq9vcppsieej6h
http_invoke_url: https://functions.yandexcloud.net/b09bhaokchn9pnbrlseb

Создайте первую версию функции

Для создания версии функции вы можете воспользоваться одним из форматов загрузки кода. Для примера будет использован ZIP-архив.

Важная информация

Файл больше 3,5 МБ необходимо загружать через Object Storage. Подробнее об ограничениях читайте в разделе Квоты и лимиты.

Подготовьте ZIP-архив с кодом функции

  1. Сохраните следующий код в файл с названием main.py:

    def handler(event, context):
        name = 'World'
        if 'queryStringParameters' in event and 'name' in event['queryStringParameters']:
            name = event['queryStringParameters']['name']
    
        return {
            'statusCode': 200,
            'headers': {
                'Content-Type': 'text/plain'
            },
            'isBase64Encoded': False,
            'body': 'Hello, {}!'.format(name)
        }
    

Создайте версию функции

  1. Добавьте файл main.py в ZIP-архив hello-py.zip.
  1. Откройте Cloud Functions в каталоге, где требуется создать версию функции.
  2. Выберите функцию, для которой необходимо создать версию.
  3. В разделе Последняя версия нажмите кнопку Создать в редакторе.
  4. Задайте параметры версии:
    • Среда выполнения: python37.
    • Таймаут, секунды: 5.
    • Память: 128 МБ.
    • Сервисный аккаунт: Не выбрано.
  5. Подготовьте код функции:
    • Способ: ZIP-архив.
    • Файл: hello-py.zip.
    • Точка входа: main.handler.
  6. Нажмите кнопку Создать версию.

Создайте версию функции:

$ yc serverless function version create \
--function-name=my-python-function \ # Имя функции.
--runtime python37 \ # Среда выполнения.
--entrypoint main.handler \ # Обработчик, указывается в формате <имя файла с функцией>.<имя обработчика>.
--memory 128m \ # Объем RAM.
--execution-timeout 5s \ # Максимальное время выполнения функции до таймаута.
--source-path ./hello-py.zip # ZIP-архив c кодом функции и всеми необходимыми зависимостями.

Создайте функцию на Node.js

  1. В консоли управления выберите каталог, в котором будет создана функция.

  2. Нажмите кнопку Создать ресурс.

  3. Выберите Функция.

  4. Введите имя функции.

    • Длина — от 3 до 63 символов.
    • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
    • Первый символ — буква. Последний символ — не дефис.
  5. Нажмите кнопку Создать.

Создайте функцию с помощью команды:

$ yc serverless function create --name=my-nodejs-function
..........done
id: b09hnm3nucbm1tk8dops
folder_id: aoek49ghmknnpj1ll45e
created_at: "2019-06-14T09:53:39.885Z"
name: my-nodejs-function
log_group_id: eol8eetd68mq3849eurs
http_invoke_url: https://functions.yandexcloud.net/b09hnm3nucbm1tk8dops

Создайте первую версию функции

Чтобы создать версию функции вам понадобится ZIP-архив с кодом функции и всеми необходимыми зависимостями.

Подготовьте ZIP-архив с кодом функции

  1. Сохраните следующий код в файл с названием index.js:

    exports.handler = async function (event, context) {
        let name = 'World';
        if (event.queryStringParameters && event.queryStringParameters.name) {
            name = event.queryStringParameters.name
        }
        return {
            'statusCode': 200,
            'headers': {
                'Content-Type': 'text/plain'
            },
            'isBase64Encoded': false,
            'body': `Hello, ${name}!`
        }
    };
    
    
  2. Добавьте файл index.js в ZIP-архив hello-js.zip.

Создайте версию функции

  1. Откройте Cloud Functions в каталоге, где требуется создать версию функции.
  2. Выберите функцию, для которой необходимо создать версию.
  3. В разделе Последняя версия нажмите кнопку Создать в редакторе.
  4. Задайте параметры версии:
    • Среда выполнения: nodejs12.
    • Таймаут, секунды: 5.
    • Память: 128 МБ.
    • Сервисный аккаунт: Не выбрано.
  5. Подготовьте код функции:
    • Способ: ZIP-архив.
    • Файл: hello-js.zip.
    • Точка входа: index.handler.
  6. Нажмите кнопку Создать версию.

Создайте версию функции:

$ yc serverless function version create \
--function-name=my-nodejs-function \ # Имя функции.
--runtime nodejs12 \ # Среда выполенения.
--entrypoint index.handler \ # Обработчик, указывается в формате <имя файла с функцией>.<имя обработчика>.
--memory 128m \ # Объем RAM.
--execution-timeout 5s \ # Максимальное время выполнения функции до таймаута.
--source-path ./hello-js.zip # ZIP-архив c кодом функции и всеми необходимыми зависимостями.

Вызовите функцию

Примечание

Чтобы любой пользователь мог вызывать функцию, необходимо сделать ее публичной. Подробнее о правах читайте в разделе Управление доступом.

Для обращения к функции используйте ее имя или уникальный идентификатор, которые можно узнать с помощью команды:

$ yc serverless function list
+----------------------+--------------------+----------------------+
|          ID          |        NAME        |      FOLDER ID       |
+----------------------+--------------------+----------------------+
| b097d9ous3gep99khe83 | my-beta-function   | aoek49ghmknnpj1ll45e |
| b09bhaokchn9pnbrlseb | my-python-function | aoek49ghmknnpj1ll45e |
| b09hnm3nucbm1tk8dops | my-nodejs-function | aoek49ghmknnpj1ll45e |
+----------------------+--------------------+----------------------+

Примечание

Для обеспечения безопасности вызов функции возможен только с использованием протокола TLS.

Вы можете посмотреть ссылку для вызова функции в параметре http_invoke_url при создании функции.

Вызовите функцию как обычный HTTP-запрос, вставив ссылку в адресную строку браузера. В данном случае используется пример функции на Python:

https://functions.yandexcloud.net/b09bhaokchn9pnbrlseb

На странице появится ответ:

Hello, World!

При вызове функции вы можете добавлять в URL параметры. В качестве примера добавьте параметр name:

https://functions.yandexcloud.net/b09bhaokchn9pnbrlseb?name=Username

На странице появится следующий ответ:

Hello, Username!

Вызовите функцию, указав в параметре имя для приветствия:

$ yc serverless function invoke my-python-function -d '{"queryStringParameters": {"name": "Username"}}'
{"statusCode":200,"isBase64Encoded":false,"body":"{\"message\":\"Hello, Username!\"}"}

Что дальше