Интерактивная отладка функций Cloud Functions
В этом руководстве вы настроите систему интерактивной отладки функций Yandex Cloud Functions с помощью перенаправления запросов на локальный сервер. Подробнее о схеме решения читайте в репозитории yc-serverless-live-debug
Чтобы настроить систему интерактивной отладки функций:
- Подготовьте облако к работе.
- Установите необходимые утилиты.
- Создайте сервисный аккаунт с правами администратора на облако.
- Разверните ресурсы.
- Запустите сервис отладки.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за вызовы функций и вычислительные ресурсы, выделенные для выполнения функций (см. тарифы Yandex Cloud Functions);
- плата за количество запросов к API-шлюзу (см. тарифы Yandex API Gateway);
- плата за операции с YDB и хранение данных (см. тарифы Yandex Managed Service for YDB);
- плата за запись и хранение логов (см. тарифы Yandex Cloud Logging);
Установите необходимые утилиты
-
Создайте папку
live-debug-test
и перейдите в нее:mkdir live-debug-test cd live-debug-test
-
Установите пакет
yc-serverless-live-debug
:npm i -D @yandex-cloud/serverless-live-debug
Создайте сервисный аккаунт с правами администратора на облако
-
Создайте сервисный аккаунт:
Консоль управленияCLITerraformAPI-
В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. -
В списке сервисов выберите Identity and Access Management.
-
Нажмите кнопку Создать сервисный аккаунт.
-
Введите имя сервисного аккаунта, например
sa-live-debug
.Требования к формату имени:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.Чтобы создать сервисный аккаунт, выполните команду:
yc iam service-account create --name sa-live-debug
Где
--name
— имя сервисного аккаунта в формате:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
Результат:
id: ajehr0to1g8b******** folder_id: b1gv87ssvu49******** created_at: "2023-03-04T09:03:11.665153755Z" name: sa-live-debug
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_iam_service_account" "sa" { name = "sa-live-debug" description = "<описание_сервисного_аккаунта>" folder_id = "<идентификатор_каталога>" }
Где:
name
— имя сервисного аккаунта. Обязательный параметр.description
— описание сервисного аккаунта. Необязательный параметр.folder_id
— идентификатор каталога. Необязательный параметр. По умолчанию будет использовано значение, указанное в настройках провайдера.
Более подробную информацию о параметрах ресурса
yandex_iam_service_account
в Terraform, см. в документации провайдера . -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится информация о сервисном аккаунте. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
-
-
Назначьте сервисному аккаунту роль
admin
на облако:Консоль управленияCLITerraformAPI- На стартовой странице
консоли управления выберите облако. - Перейдите на вкладку Права доступа.
- Найдите аккаунт
sa-live-debug
в списке и нажмите значок . - Нажмите кнопку Изменить роли.
- В открывшемся окне нажмите кнопку Добавить роль и выберите роль
admin
. - Нажмите кнопку Сохранить.
Выполните команду:
yc resource-manager cloud add-access-binding <идентификатор_облака> \ --role admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Результат:
done (1s)
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_resourcemanager_cloud_iam_member" "admin" { cloud_id = "<идентификатор_облака>" role = "admin" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" }
Где:
cloud_id
— идентификатор облака. Обязательный параметр.role
— назначаемая роль. Обязательный параметр.member
— пользователь или сервисный аккаунт, которому назначается роль. Указывается в видеuserAccount:<идентификатор_пользователя>
илиserviceAccount:<идентификатор_сервисного_аккаунта>
. Обязательный параметр.
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder_iam_member
см. в документации провайдера . -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Чтобы назначить сервисному аккаунту роль на облако, воспользуйтесь методом REST API setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
- На стартовой странице
Разверните ресурсы
-
Настройте профиль CLI для выполнения операций от имени сервисного аккаунта:
CLI-
Создайте авторизованный ключ для сервисного аккаунта и запишите его в файл:
yc iam key create \ --service-account-id <идентификатор_сервисного_аккаунта> \ --folder-id <идентификатор_каталога> \ --output key.json
Где:
--service-account-id
— идентификатор сервисного аккаунтаsa-live-debug
.--folder-id
— идентификатор каталога, в котором создан сервисный аккаунт.--output
— имя файла с авторизованным ключом.
Результат:
id: aje8nn871qo4******** service_account_id: ajehr0to1g8******** created_at: "2023-03-04T09:16:43.479156798Z" key_algorithm: RSA_2048
-
Создайте профиль CLI для выполнения операций от имени сервисного аккаунта:
yc config profile create sa-live-debug
Результат:
Profile 'sa-live-debug' created and activated
-
Задайте конфигурацию профиля:
yc config set service-account-key key.json yc config set cloud-id <идентификатор_облака>
Где:
service-account-key
— файл с авторизованным ключом сервисного аккаунта.cloud-id
— идентификатор облака.
-
Добавьте аутентификационные данные в переменные окружения:
export YC_TOKEN=$(yc iam create-token) export YC_CLOUD_ID=$(yc config get cloud-id)
-
-
Разверните ресурсы в облаке, выполнив команду:
npx serverless-live-debug deploy
Команда создаст в облаке каталог
live-debug
и развернет в нем все необходимые ресурсы.
Запустите сервис отладки
-
В папке
live-debug-test
создайте файлlive-debug.config.ts
:nano live-debug.config.ts
-
Скопируйте в файл
live-debug.config.ts
код с конфигурацией:import { defineConfig } from '@yandex-cloud/serverless-live-debug'; import { Handler } from '@yandex-cloud/function-types'; export default defineConfig({ handler: <Handler.Http>(event => { console.log('got request', event); return { statusCode: 200, body: `Hello from local code!`, }; }) });
-
Запустите отладочный сервис, выполнив команду:
npx serverless-live-debug run
Результат:
Using config: live-debug.config.ts Running local client... Starting child... Child started Watching changes in: live-debug.config.ts WS connection opened Local client ready. Check url: https://d5ddt4ltdvh7********.apigw.yandexcloud.net Waiting requests...
Где
Check url
— публичный адрес API-шлюза API Gateway. -
Проверьте, что отладочный код работает. Для этого откройте еще один терминал и выполните команду:
curl https://d5ddt4ltdvh7********.apigw.yandexcloud.net
Результат:
Hello from local code!
Подробнее о примерах использования решения читайте в репозитории yc-serverless-live-debug
Как удалить созданные ресурсы
Удалите каталог, в котором находятся ресурсы, необходимые для интерактивной отладки функций Cloud Functions:
- В консоли управления
выберите каталогlive-debug
. - Нажмите значок
напротив каталога и выберите Удалить. - В поле Срок удаления каталога выберите
Удалить сейчас
. - Нажмите Удалить.
Чтобы удалить каталог, воспользуйтесь методом REST API delete для ресурса Folder или вызовом gRPC API FolderService/Delete.