Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Построение пайплайна CI/CD в GitLab
    • Работа с API-шлюзом по протоколу WebSocket
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Автоматическое копирование объектов из одного бакета Object Storage в другой
    • Визуализация логов в Grafana с помощью плагина Cloud Logging
    • Канареечный релиз функции Cloud Functions
    • Интерактивная отладка функций Cloud Functions
    • Создание функции Node.js с помощью TypeScript
    • Запуск контейнерного приложения в Serverless Containers
    • Передача событий Yandex Cloud Postbox в Data Streams и их анализ с помощью DataLens
    • Использование API Gateway для настройки синтеза речи в SpeechKit
    • Подключение к YDB из функции Cloud Functions на Python
    • Подключение к базе данных YDB из функции Cloud Functions на Node.js
    • Защита API Gateway при помощи Smart Web Security
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Автоматическая загрузка данных в Yandex SpeechSense с помощью Yandex Workflows
    • Настройка реагирования в Cloud Logging и Yandex Cloud Functions
    • Настройка интеграций Workflows с Tracker, YandexGPT и Yandex Cloud Postbox
    • Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте сервисный аккаунт
  • Создайте авторизованный ключ
  • Создайте БД YDB
  • Создайте функцию
  • Протестируйте функцию
  • Как удалить созданные ресурсы
  1. Бессерверные технологии
  2. Подключение к базе данных YDB из функции Cloud Functions на Node.js

Подключение к базе данных Yandex Managed Service for YDB из функции Yandex Cloud Functions на Node.js

Статья создана
Gayrat Vlasov
Улучшена
Обновлена 27 марта 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте сервисный аккаунт
  • Создайте авторизованный ключ
  • Создайте БД YDB
  • Создайте функцию
  • Протестируйте функцию
  • Как удалить созданные ресурсы

Примечание

Руководство предназначено для пользователей Linux. На Windows пройти руководство можно в среде WSL.

Вы создадите функцию с приложением на Node.js, которое выполняет простой запрос к базе данных YDB. Развертывание приложения осуществляется с помощью Bash-скриптов, для компиляции используется команда tcs.

Функция с привязанным сервисным аккаунтом авторизуется в YDB через сервис метаданных.

Приложение создает драйвер подключения к БД YDB, сессию, транзакцию и выполняет запрос, используя библиотеку ydb. Эта библиотека устанавливается как зависимость при создании версии функции. Параметры подключения к БД передаются в приложение через переменные окружения.

Чтобы настроить подключение к БД YDB:

  1. Подготовьте облако к работе.
  2. Подготовьте окружение.
  3. Создайте сервисный аккаунт.
  4. Создайте авторизованный ключ.
  5. Создайте БД YDB.
  6. Создайте функцию.
  7. Протестируйте функцию.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры для этого сценария входит:

  • Плата за использование функции (см. тарифы Yandex Cloud Functions).
  • Плата за выполнение запросов к БД (см. тарифы Yandex Managed Service for YDB).

Подготовьте окружениеПодготовьте окружение

  1. Клонируйте репозиторий с помощью Git:

    git clone https://github.com/yandex-cloud-examples/yc-ydb-connect-from-serverless-function.git
    
  2. Установите и инициализируйте интерфейс командной строки Yandex Cloud.

  3. Перейдите в корневую директорию проекта:

    cd ~/yc-ydb-connect-from-serverless-function
    

    Все последующие команды выполняйте в этой директории.

  4. Установите утилиту jq:

    sudo apt-get install jq
    
  5. Установите Node.js:

    curl --fail --silent --show-error --location https://deb.nodesource.com/setup_current.x | sudo -E bash - \
    sudo apt-get install -y nodejs
    
  6. Установите зависимости:

    npm install
    

    Результат:

    up to date, audited 269 packages in 1s
    
    29 packages are looking for funding
       run `npm fund` for details
    
    found 0 vulnerabilities
    

Создайте сервисный аккаунтСоздайте сервисный аккаунт

Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта: sa-function.
  5. Нажмите Добавить роль и выберите editor.
  6. Нажмите кнопку Создать.
  1. Создайте сервисный аккаунт:

    yc iam service-account create --name sa-function
    

    Результат:

    id: aje028do8n9r********
    folder_id: b1g681qpemb4********
    created_at: "2023-08-23T06:24:49.759304161Z"
    name: sa-function
    
  2. Назначьте сервисному аккаунту роль editor:

    yc resource-manager folder add-access-binding <идентификатор_каталога> \
      --role editor \
      --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

    Результат:

    ...1s...done (4s)
    effective_deltas:
    - action: ADD
       access_binding:
          role_id: viewer
          subject:
          id: aje028do8n9r********
          type: serviceAccount
    

Подробнее о командах см. в справочнике CLI.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Опишите в конфигурационном файле параметры сервисного аккаунта:

    resource "yandex_iam_service_account" "sa" {
      name = "sa-function"
    }
    

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

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

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов: введите в терминал слово yes и нажмите Enter.

Чтобы создать сервисный аккаунт и назначить ему роль, воспользуйтесь методами create и setAccessBindings для ресурса ServiceAccount.

Создайте авторизованный ключСоздайте авторизованный ключ

Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, которому принадлежит сервисный аккаунт.

  2. В списке сервисов выберите Identity and Access Management.

  3. На панели слева выберите Сервисные аккаунты.

  4. В открывшемся списке выберите сервисный аккаунт sa-function.

  5. Нажмите кнопку Создать новый ключ на верхней панели.

  6. Выберите пункт Создать авторизованный ключ.

  7. Выберите алгоритм шифрования.

  8. Задайте описание авторизованного ключа, чтобы потом было проще найти его в консоли управления.

  9. Сохраните открытую и закрытую части авторизованного ключа в файл yc-ydb-connect-from-serverless-function/service_account_key_file.json:

    {
      "service_account_id": "<идентификатор_сервисного_аккаунта_sa-function>",
      "key_algorithm": "RSA_2048",
      "public_key": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----\n",
      "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
    }
    

Выполните команду:

yc iam key create --service-account-name sa-function -o service_account_key_file.json

Подробнее о команде yc iam key create см. в справочнике CLI.

В случае успеха в файл service_account_key_file.json будет записан закрытая часть авторизованного ключа (privateKey) и идентификатор открытой части (id).

  1. Опишите в конфигурационном файле параметры авторизованного ключа:

    resource "yandex_iam_service_account_key" "sa-auth-key" {
      service_account_id = "<идентификатор_сервисного_аккаунта_sa-function>"
      key_algorithm      = "RSA_2048"
    }
    

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

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

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов: введите в терминал слово yes и нажмите Enter.

Чтобы создать авторизованный ключ доступа, воспользуйтесь методом create для ресурса Key.

Создайте БД YDBСоздайте БД YDB

Консоль управления
  1. В консоли управления выберите каталог, в котором хотите создать БД.

  2. В списке сервисов выберите Managed Service for YDB.

  3. Нажмите кнопку Создать базу данных.

  4. Введите имя БД. Требования к имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.
  5. В блоке Тип базы данных выберите опцию Serverless.

  6. Нажмите кнопку Создать базу данных.

    Дождитесь запуска БД. В процессе создания БД будет иметь статус Provisioning. Когда БД станет готова к использованию, статус сменится на Running.

  7. Нажмите на имя созданной БД.

  8. Сохраните значение поля Эндпоинт из блока Соединение. Оно понадобится на следующем шаге.

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

Примечание

Перед созданием функции убедитесь, что в файле .env и файлах create-func.sh и create-func-ver.sh из директории deploy в качестве символа перевода строки установлен LF.

  1. Перейдите в корневую директорию проекта:

    cd ~/yc-ydb-connect-from-serverless-function
    
  2. Отредактируйте файл .env:

    • ENDPOINT — первая часть сохраненного ранее значения поля Эндпоинт (часть до вхождения /?database=). Например, grpcs://ydb.serverless.yandexcloud.net:2135.
    • DATABASE — вторая часть сохраненного ранее значения поля Эндпоинт (часть после вхождения /?database=). Например, /ru-central1/r1gra875baom********/g5n22e7ejfr1********.
    • FUNCTION_NAME — имя функции: func-test-ydb.
    • FOLDER_ID — идентификатор каталога.
    • SERVICE_ACCOUNT_ID — идентификатор сервисного аккаунта sa-function.
  3. Создайте функцию:

    ./deploy/create-func.sh
    

    Этот скрипт создает новую функцию в вашем каталоге и делает ее публичной.

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

    ./deploy/create-func-ver.sh
    

    Результат:

    npx tsc --build tsconfig.json
    rm: невозможно удалить '../build/func.zip': Нет такого файла или каталога
    adding: queries/ (stored 0%)
    adding: queries/clients-table.js (deflated 57%)
    adding: queries/helpers.js.map (deflated 43%)
    adding: queries/helpers.js (deflated 48%)
    adding: queries/clients-table.js.map (deflated 59%)
    adding: index.js (deflated 49%)
    adding: index.js.map (deflated 56%)
    adding: database.js.map (deflated 62%)
    adding: index-local.js (deflated 42%)
    adding: package.json (deflated 55%)
    adding: database.js (deflated 60%)
    adding: index-local.js.map (deflated 43%)
    yc function version create func-test-ydb 
    done (27s)
    id: abcd2d363b4b********
    function_id: efghm9el0ja9********
    created_at: "2023-08-15T07:41:07.591Z"
    runtime: nodejs16
    entrypoint: index.handler
    resources:
          memory: "268435456"
    execution_timeout: 5s
    service_account_id: hijk3hlu8gqe********
    image_size: "33497088"
    status: ACTIVE
    tags:
          - $latest
    log_group_id: lmnoivbe341g********
    environment:
          DATABASE: /ru-central1/b1gia87mbaom********/etnilt3o6v9e********
          ENDPOINT: grpcs://ydb.serverless.yandexcloud.net:2135
    log_options:
          folder_id: pqrs81qpemb********
    

Протестируйте функциюПротестируйте функцию

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

  2. В списке сервисов выберите Cloud Functions.

  3. Выберите функцию func-test-ydb.

  4. Перейдите на вкладку Обзор.

  5. В поле Ссылка для вызова нажмите на ссылку.

  6. В адресной строке браузера добавьте в ссылке параметр api_key, например ?api_key=b95:

    https://functions.yandexcloud.net/efghm9el0ja9********?api_key=b95
    
  7. При успешном подключении в БД будет создана таблица b95 и в нее будет добавлена одна запись. На странице появится сообщение в формате JSON, например:

    {
      "info": "Создана таблица b95, вставлена одна запись"
    }
    

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Удалите БД.
  2. Удалите функцию.

Была ли статья полезна?

Предыдущая
Подключение к YDB из функции Cloud Functions на Python
Следующая
Защита API Gateway при помощи Smart Web Security
Проект Яндекса
© 2025 ООО «Яндекс.Облако»