Создание функции на .NET Core
Создайте и выполните функцию на .NET Core, которая приветствует пользователя.
Перед началом работы
Создайте каталог в Yandex Cloud.
Создайте функцию
- В консоли управления
перейдите в каталог, в котором хотите создать функцию. - Перейдите в сервис Cloud Functions.
- Нажмите кнопку Создать функцию.
- Введите имя функции —
dotnet-function. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы создать функцию, выполните команду:
yc serverless function create --name=dotnet-function
Результат:
id: b09bhaokchn9********
folder_id: aoek49ghmknn********
created_at: "2019-06-14T10:03:37.475Z"
name: dotnet-function
log_group_id: eolm8aoq9vcp********
http_invoke_url: https://functions.yandexcloud.net/b09bhaokchn9********
status: ACTIVE
Создать функцию можно с помощью метода API create.
Создайте первую версию функции
Чтобы создать версию функции, вы можете воспользоваться одним из форматов загрузки кода. Для примера будет использован ZIP-архив.
Важно
Файл больше 3,5 МБ необходимо загружать через Object Storage. Подробнее об ограничениях читайте в разделе Квоты и лимиты в Cloud Functions.
Подготовьте ZIP-архив с кодом функции
-
Сохраните следующий код в файл с названием
Handler.cs:using System; using System.Collections.Generic; namespace Function; public class Request { public Dictionary<string, string> queryStringParameters { get; set; } } public class Response { public Response(int statusCode, Dictionary<string, string> headers, bool isBase64Encoded, string body) { StatusCode = statusCode; Headers = headers; IsBase64Encoded = isBase64Encoded; Body = body; } public int StatusCode { get; set; } public Dictionary<string, string> Headers { get; set; } public bool IsBase64Encoded { get; set; } public string Body { get; set; } } public class Handler { public Response FunctionHandler(Request request) { var headers = new Dictionary<string, string>(); headers.Add("Content-Type", "text/plain"); string name = request.queryStringParameters["name"]; return new Response(200, headers, false, string.Format("Hello, {0}!", name)); } } -
Добавьте файл
Handler.csв ZIP-архивhello-dotnet.zip.Примечание
При создании ZIP-архива на macOS с помощью контекстного меню Finder в архив автоматически добавляется служебная папка
__MACOSX, которая может вызвать ошибки при сборке функций. Чтобы удалить папку из ZIP-архива, в командной строке перейдите в каталог, в котором расположен архив, и выполните команду:zip -d <имя_архива>.zip "__MACOSX/*"
Создайте версию функции
- В консоли управления
перейдите в каталог, в котором находится функция. - Перейдите в сервис Cloud Functions.
- Выберите функцию
dotnet-function. - В разделе Последняя версия нажмите кнопку Создать в редакторе.
- Выберите среду выполнения
.NET 8.0. - Отключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить.
- Задайте параметры версии:
- Источник кода —
ZIP-архив. - Файл — прикрепите файл
hello-dotnet.zip. - Точка входа —
Function.Handler. - Таймаут —
3. - Память —
128 МБ. - Сервисный аккаунт —
Не выбрано.
- Источник кода —
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы создать версию функции, выполните команду:
yc serverless function version create \
--function-name=dotnet-function \
--runtime dotnet8.0 \
--entrypoint Function.Handler \
--memory 128m \
--execution-timeout 3s \
--source-path ./hello-dotnet.zip
Где:
--function-name— имя функции, версию которой вы хотите создать.--runtime— среда выполнения.--entrypoint— точка входа.--memory— объем RAM.--execution-timeout— максимальное время выполнения функции до таймаута.--source-path— ZIP-архив с кодом функции и необходимыми зависимостями.
Результат:
done (1s)
id: d4evvn8obisa********
function_id: d4elpv8pft63********
created_at: "2020-08-01T19:09:19.531Z"
runtime: dotnet8.0
entrypoint: Function.Handler
resources:
memory: "134217728"
execution_timeout: 3s
image_size: "4096"
status: ACTIVE
tags:
- $latest
log_group_id: ckg3qh8h363p********
Создать версию функции можно с помощью метода API createVersion.
Вызовите функцию
Примечание
Чтобы любой пользователь мог вызывать функцию, необходимо сделать ее публичной. Подробнее о правах читайте в разделе Управление доступом в Cloud Functions.
- В консоли управления
перейдите в каталог, в котором находится функция. - Перейдите в сервис Cloud Functions.
- Выберите функцию.
- Перейдите на вкладку
Тестирование. - В поле Тег версии выберите
$latest, чтобы вызвать последнюю версию функции. - В поле Шаблон данных выберите
Без шаблона. - В поле Входные данные введите:
{"queryStringParameters": {"name": "Username"}} - Нажмите кнопку
Запустить тест. - В разделе Результат тестирования, в поле Состояние функции, будет показан статус тестирования. Важно: максимальное время выполнения функции до таймаута (включая начальную инициализацию при первом запуске) — 10 минут.
- В поле Ответ функции появится результат выполнения функции:
{ "statusCode": 200, "headers": { "Content-Type": "text/plain" }, "isBase64Encoded": false, "body": "Hello, Username!" }
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы вызвать функцию, выполните команду:
yc serverless function invoke <идентификатор_функции> -d '{"queryStringParameters": {"name": "Username"}}'
Результат:
{"statusCode":200,"headers":{"Content-Type":"text/plain"},"isBase64Encoded":false,"body":"Hello, Username!"}
По умолчанию вызывается версия функции с тегом $latest.
Ссылку для вызова функции можно найти на вкладке Обзор, в поле Ссылка для вызова.
Для обеспечения безопасности функцию можно вызвать только по протоколу HTTPS. Вызовите ее как обычный HTTPS-запрос, вставив ссылку в адресную строку браузера и добавив в URL параметр name:
https://functions.yandexcloud.net/<идентификатор_функции>?name=Username
На странице появится ответ:
Hello, Username!
Что дальше
- Прочитайте, какой должна быть структура функции для вызова разными способами (HTTP, CLI), в разделе Вызов функции в Cloud Functions.
- Ознакомьтесь с концепциями сервиса.
- Посмотрите, что можно делать с функциями и версиями в пошаговых инструкциях.