Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Обзор
    • Создание функции
      • Обзор
      • Node.js
      • Python
      • Go
      • PHP
      • Bash
      • Java
  • Пошаговые инструкции
    • Все инструкции
    • Получение IAM-токена сервисного аккаунта с помощью функции
    • Подключение к управляемым БД из функции
    • Получение информации о функции
      • Получить список функций
      • Получить список версий функции
      • Получить информацию о функции
      • Получить информацию о версии функции
    • Управление правами доступа к функции
      • Сделать функцию публичной
      • Сделать функцию приватной
      • Посмотреть роли, назначенные на функцию
      • Назначить роли на функцию
      • Отозвать роли, назначенные на функцию
    • Создание функции
      • Создать функцию
      • Создать версию функции
    • Вызов функции
      • Вызвать функцию
      • Аутентифицироваться при вызове приватной функции через HTTPS
    • Управление функцией
      • Изменить функцию
        • Изменить имя
        • Изменить описание
      • Масштабировать функцию
        • Посмотреть настройки масштабирования
        • Добавить настройки масштабирования
        • Удалить настройки масштабирования
      • Добавить переменные окружения
      • Указать облачную сеть
      • Передать секреты Yandex Lockbox
      • Управлять тегами
        • Добавить тег
        • Удалить тег
      • Управлять метками
        • Добавить метку
        • Изменить метку
        • Удалить метку
      • Посмотреть графики мониторинга
      • Управлять логами
        • Посмотреть логи
        • Записать логи
      • Удалить функцию
    • Получение информации о триггере
      • Получить список триггеров
      • Получить информацию о триггере
    • Создание триггера
      • Создать таймер
      • Создать триггер для Message Queue
      • Создать триггер для Object Storage
      • Создать триггер для Container Registry
      • Создать триггер для Cloud Logs
      • Создать триггер для Cloud Logging
      • Создать триггер для Yandex IoT Core
      • Создать триггер для бюджетов
      • Создать триггер для Data Streams
      • Создать триггер для почты
    • Управление триггером
      • Изменить триггер
        • Изменить имя
        • Изменить описание
      • Управлять метками
        • Добавить метку
        • Изменить метку
        • Удалить метку
      • Посмотреть графики мониторинга
      • Удалить триггер
  • Концепции
    • Обзор
    • Функция
    • Вызов функции
    • Сетевое взаимодействие
    • Среда выполнения
      • Обзор
      • Окружение
      • Контекст выполнения
      • Предзагружаемая среда выполнения
    • Сборщик
    • Триггер
      • Обзор
      • Таймер
      • Триггер для Message Queue
      • Триггер для Object Storage
      • Триггер для Container Registry
      • Триггер для Cloud Logs
      • Триггер для Cloud Logging
      • Триггер для Yandex IoT Core
      • Триггер для бюджетов
      • Триггер для Data Streams
      • Триггер для почты
    • Dead Letter Queue
    • Логи функции
    • Резервное копирование
    • Квоты и лимиты
  • Разработка на Node.js
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Python
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Go
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на PHP
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на Bash
    • Обзор
    • Обработчик запросов
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Java
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
      • Класс HttpServlet
      • Spring Boot
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на R
    • Обзор
    • Модель программирования
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на C#
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Практические руководства
    • Все практические руководства
    • Создание навыка Алисы
    • Развертывание веб-приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Запись данных с устройства в Managed Service for PostgreSQL
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Подключение к базе данных YDB из функции на Python
    • Подключение к базе данных YDB из функции на Node.js
    • Конвертация видео в GIF на Python
    • Создание функции Node.js с помощью TypeScript
    • Разработка пользовательской интеграции
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
  • Правила тарификации
  • Управление доступом
  • Справочник API Functions
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • FunctionService
      • OperationService
    • REST (англ.)
      • Overview
      • Function
        • Overview
        • create
        • createVersion
        • delete
        • get
        • getVersion
        • getVersionByTag
        • list
        • listAccessBindings
        • listOperations
        • listRuntimes
        • listScalingPolicies
        • listTagHistory
        • listVersions
        • removeScalingPolicy
        • removeTag
        • setAccessBindings
        • setScalingPolicy
        • setTag
        • update
        • updateAccessBindings
  • Справочник API Triggers
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • TriggerService
      • OperationService
    • REST (англ.)
      • Overview
      • Trigger
        • Overview
        • create
        • delete
        • get
        • list
        • listOperations
        • pause
        • resume
        • update
  • Вопросы и ответы
  1. Практические руководства
  2. Подключение к базе данных YDB из функции на Node.js

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

Статья создана
Gayrat Vlasov
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте сервисный аккаунт
  • Создайте авторизованный ключ
  • Создайте базу данных 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. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

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

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

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

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

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

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

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

    git clone https://github.com/ydb-platform/ydb-nodejs-sdk.git
    
  2. В репозитории перейдите в папку с файлами проекта: examples/basic-example-v1.

  3. Установите и инициализируйте интерфейс командной строки Yandex Cloud.

  4. Установите утилиту jq. В корне папки с файлами проекта запустите терминал и выполните команду:

    sudo apt-get install jq
    
  5. Установите Node.js, выполнив команду:

    curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash - \
    sudo apt-get install -y nodejs
    
  6. Установите зависимости, выполнив команду:

    npm install
    

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

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

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

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

Подробнее о команде yc iam service-account create см. в справочнике 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 для ресурса ServiceAccount.

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

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

  2. Перейдите на вкладку Сервисные аккаунты.

  3. Выберите сервисный аккаунт sa-function и нажмите на строку с его именем.

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

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

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

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

  8. Сохраните открытый и закрытый ключи в файл 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

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

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

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

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

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

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

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

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

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

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

Примечание

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

  1. Отредактируйте файл .env:

    • ENDPOINT — строка вида <протокол>://<значение поля Эндпоинт из блока Соединение>. Например, если протокол grpcs, а эндпоинт ydb.serverless.yandexcloud.net:2135, введите grpcs://ydb.serverless.yandexcloud.net:2135.
    • DATABASE — значение поля Размещение базы данных из блока Соединение.
    • FUNCTION_NAME — имя функции: func-test-ydb.
    • FOLDER_ID — идентификатор каталога.
    • SERVICE_ACCOUNT_ID — идентификатор сервисного аккаунта sa-function.
  2. В корне проекта запустите командную строку и выполните команду:

    ./deploy/create-func.sh
    

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

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

    ./deploy/create-func-ver.sh
    

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

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

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

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

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

  5. В блоке Общая информация нажмите на ссылку для вызова функции.

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

  7. При успешном подключении в БД будет создана таблица b95 и в нее будет добавлена одна запись. На странице появится сообщение в формате JSON, например:

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

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

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

  • удалите базу данных;
  • удалите функцию.

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

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте сервисный аккаунт
  • Создайте авторизованный ключ
  • Создайте базу данных YDB
  • Создайте функцию
  • Протестируйте функцию
  • Как удалить созданные ресурсы