Интерактивная отладка функций 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.Требования к формату имени:
- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.Чтобы создать сервисный аккаунт, выполните команду:
yc iam service-account create --name sa-live-debugГде
--name— имя сервисного аккаунта в формате:- длина — от 2 до 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://d5dm1lba80md********.i9******.apigw.yandexcloud.net Waiting requests...Где
Check url— публичный адрес API-шлюза API Gateway. -
Проверьте, что отладочный код работает. Для этого откройте еще один терминал и выполните команду:
curl https://d5dm1lba80md********.i9******.apigw.yandexcloud.netРезультат:
Hello from local code!
Подробнее о примерах использования решения читайте в репозитории yc-serverless-live-debug
Как удалить созданные ресурсы
Удалите каталог, в котором находятся ресурсы, необходимые для интерактивной отладки функций Cloud Functions:
- В консоли управления
выберите каталогlive-debug. - Нажмите значок
напротив каталога и выберите Удалить. - В поле Срок удаления каталога выберите
Удалить сейчас. - Нажмите Удалить.
Чтобы удалить каталог, воспользуйтесь методом REST API delete для ресурса Folder или вызовом gRPC API FolderService/Delete.