Создание и выполнение функции
Создайте и выполните функцию, которая приветствует пользователя. Используйте для этого языки программирования Python или Node.js.
- Перед началом работы
- Создайте функцию на Python
- Создайте функцию на Node.js
- Вызовите функцию
- Что дальше
Перед началом работы
- Создайте каталог в Яндекс.Облаке.
- Установите интерфейс командной строки YC CLI.
Создайте функцию на Python
-
В консоли управления выберите каталог, в котором будет создана функция.
-
Нажмите кнопку Создать ресурс.
-
Выберите Функция.
-
Введите имя функции.
- Длина — от 3 до 63 символов.
- Может содержать строчные буквы латинского алфавита, цифры и дефисы.
- Первый символ — буква. Последний символ — не дефис.
-
Нажмите кнопку Создать.
Создайте функцию с помощью команды:
$ 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-архив с кодом функции
-
Сохраните следующий код в файл с названием
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) }
Создайте версию функции
- Добавьте файл
main.py
в ZIP-архивhello-py.zip
.
- Откройте Cloud Functions в каталоге, где требуется создать версию функции.
- Выберите функцию, для которой необходимо создать версию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
- Задайте параметры версии:
- Среда выполнения:
python37
. - Таймаут, секунды: 5.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
- Среда выполнения:
- Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
hello-py.zip
. - Точка входа:
main.handler
.
- Нажмите кнопку Создать версию.
Создайте версию функции:
$ 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
-
В консоли управления выберите каталог, в котором будет создана функция.
-
Нажмите кнопку Создать ресурс.
-
Выберите Функция.
-
Введите имя функции.
- Длина — от 3 до 63 символов.
- Может содержать строчные буквы латинского алфавита, цифры и дефисы.
- Первый символ — буква. Последний символ — не дефис.
-
Нажмите кнопку Создать.
Создайте функцию с помощью команды:
$ 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-архив с кодом функции
-
Сохраните следующий код в файл с названием
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}!` } };
-
Добавьте файл
index.js
в ZIP-архивhello-js.zip
.
Создайте версию функции
- Откройте Cloud Functions в каталоге, где требуется создать версию функции.
- Выберите функцию, для которой необходимо создать версию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
- Задайте параметры версии:
- Среда выполнения:
nodejs12
. - Таймаут, секунды: 5.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
- Среда выполнения:
- Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
hello-js.zip
. - Точка входа:
index.handler
.
- Нажмите кнопку Создать версию.
Создайте версию функции:
$ 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!\"}"}
Что дальше
- Прочитайте, какой должна быть структура функции для вызова разными способами (HTTP, CLI), в разделе Вызов функции.
- Ознакомьтесь с концепциями сервиса.
- Посмотрите, что можно делать с функциями и версиями в пошаговых инструкциях.