Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Обзор
    • Создание функции
      • Обзор
      • Node.js
      • Python
      • Go
      • PHP
      • Bash
      • Java
    • Создание триггера
      • Обзор
      • Таймер
      • Триггер для Message Queue
      • Триггер для Object Storage
      • Триггер для Container Registry
      • Триггер для Cloud Logs
      • Триггер для Cloud Logging
      • Триггер для Yandex IoT Core
      • Триггер для бюджетов
      • Триггер для Data Streams
  • Пошаговые инструкции
    • Все инструкции
    • Получение IAM-токена сервисного аккаунта с помощью функции
    • Подключение к управляемым БД из функции
    • Управление правами доступа к функции
    • Управление функцией
      • Создание функции
      • Управление версиями функции
      • Работа в редакторе кода
      • Вызов функции
      • Изменение функции
      • Масштабирование функции
      • Мониторинг функции
      • Просмотр журнала выполнения
      • Удаление функции
    • Управление триггером
      • Получение информации о триггере
      • Создание таймера
      • Создание триггера для 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. Запись данных с устройства в Managed Service for PostgreSQL

Запись данных с устройства в Managed Service for PostgreSQL

Статья создана
Yandex Cloud
  • Создайте необходимые ресурсы Yandex IoT Core
    • Создайте реестр
    • Создайте устройство
  • Подключите устройство к MQTT-брокеру
  • Подготовьте базу данных
    • Создайте кластер
    • Подключитесь к кластеру
    • Создайте таблицу
  • Создайте функцию для обработки данных
    • Создайте первую версию функции
  • Создайте триггер для Yandex IoT Core

В сценарии вы узнаете, как организовать хранение информации, полученной с устройства, в базе данных кластера Managed Service for PostgreSQL. Чтобы подключить устройство к Yandex IoT Core, вам понадобится MQTT-брокер. Все шаги сценария выполняются в консоли управления.

Чтобы начать записывать информацию с устройства в базу данных:

  1. Создайте необходимые ресурсы Yandex IoT Core.
    1. Создайте реестр.
    2. Создайте устройство.
  2. Подключите устройство к MQTT-брокеру.
  3. Подготовьте базу данных.
    1. Создайте кластер.
    2. Подключитесь к кластеру.
    3. Создайте таблицу.
  4. Создайте функцию для обработки данных.
  5. Создайте триггер для Yandex IoT Core.

Создайте необходимые ресурсы Yandex IoT Core

Примечание

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

Создайте реестр

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

  2. Нажмите кнопку Создать ресурс.

  3. Выберите Реестр устройств.

  4. В поле Имя введите my-registry.

  5. Введите пароль.

    • Длина — не менее 14 символов.
    • Должен содержать букву верхнего регистра, букву нижнего регистра и цифру.

    Важно

    Сохраните пароль, так как прочитать его из Yandex IoT Core будет невозможно.

  6. Пропустите блок Сертификаты.

  7. Нажмите кнопку Создать.

Создайте устройство

После создания реестра вы автоматически будете перенаправлены на страницу Реестры.

  1. В списке реестров выберите my-registry.

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

  3. Нажмите кнопку Добавить устройство.

  4. В поле Имя введите my-device.

  5. Введите пароль.

    • Длина — не менее 14 символов.
    • Должен содержать букву верхнего регистра, букву нижнего регистра и цифру.

    Важно

    Сохраните пароль, так как прочитать его из Yandex IoT Core будет невозможно.

  6. Пропустите блоки Алиасы и Сертификаты.

  7. Нажмите кнопку Добавить.

Подключите устройство к MQTT-брокеру

Для подключения к MQTT-брокеру используйте следующие параметры:

  • Сертификат удостоверяющего центра.
  • Адрес брокера: mqtt.cloud.yandex.net
  • Порт брокера: 8883
  • Протокол: TLSv1.2

Подготовьте базу данных

Создайте кластер

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

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

  3. Нажмите кнопку Создать кластер.

  4. В поле Имя кластера введите my-pg-database.

  5. В поле Окружение выберите PRODUCTION.

  6. В поле Версия выберите 12.

  7. В блоке Класс хоста:

    • Укажите платформу Intel Cascade Lake.
    • Выберите тип burstable.
    • Укажите класс b2.nano.

    Важно

    Класс b2.nano был выбран только в рамках тестирования. В реальных проектах использовать хосты с гарантированной долей vCPU ниже 100% не рекомендуется.

  8. В блоке Размер хранилища:

    • Выберите network-ssd.
    • Укажите размер равным 10 ГБ.

    Примечание

    Тип и размер диска следует выбирать в соответствии с решаемыми задачами. Значения, указанные выше, используются для тестирования.

  9. В блоке База данных укажите атрибуты БД:

    • Имя базы данных. Имя БД должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
    • Имя пользователя — владельца БД. Имя пользователя должно содержать только латинские буквы, цифры и подчеркивания.
    • Пароль пользователя. Длина — от 8 до 128 символов.

    Для базы данных, которая создается вместе с кластером, устанавливаются настройки набора символов (кодировки) LC_CTYPE=C и LC_COLLATE=C. После создания эти настройки изменить нельзя, но вы можете создать новую базу с нужными настройками.

  10. В блоке Хосты добавьте хост, который будет доступен извне Yandex Cloud. Для этого включите опцию Публичный доступ.

  11. Остальные поля оставьте заполненными по умолчанию.

  12. Нажмите кнопку Создать кластер.

Подробнее о создании кластера — в разделе Как создать кластер PostgreSQL.

В дальнейшем настройки кластера можно будет изменить.

Подключитесь к кластеру

После создания кластера вы автоматически будете перенаправлены на страницу Кластеры.

  1. Выберите кластер my-pg-database.
  2. Перейдите на вкладку SQL.
  3. В поле Имя пользователя БД укажите имя пользователя, который владеет БД, созданной на предыдущем шаге.
  4. В поле Пароль введите пароль, указанный при создании кластера.
  5. В поле База данных укажите имя базы данных.
  6. Нажмите кнопку Подключиться.

Создайте таблицу

В качестве примера источника данных в сценарии используется датчик воздуха, который измеряет следующие параметры:

  • Влажность.
  • Уровень содержания углекислого газа (COvv2vv).
  • Давление.
  • Температура.

Датчик выдает результат в формате JSON. Например:

{
"DeviceId":"0e3ce1d0-1504-4325-972f-55c961319814",
"TimeStamp":"2020-05-21T22:53:16Z",
"Values":[
    {"Type":"Float","Name":"Humidity","Value":"25.281837"},
    {"Type":"Float","Name":"CarbonDioxide","Value":"67.96608"},
    {"Type":"Float","Name":"Pressure","Value":"110.7021"},
    {"Type":"Float","Name":"Temperature","Value":"127.708824"}
    ]
}

Запишите полученную информацию в таблицу базы данных с помощью функции.

После того, как вы подключились к кластеру, создайте таблицу. Для этого:

  1. В окне редактирования введите следующий запрос:

    Важно

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

    CREATE TABLE iot_events (
        event_id varchar(24) not null,
        device_id varchar(50) not null,
        event_datetime timestamptz not null,
        humidity float8 null,
        carbon_dioxide float8 null,
        pressure float8 null,
        temperature float8 null
    )
    
  2. Нажмите кнопку Выполнить.

  3. Дождитесь появления надписи о завершении выполнения запроса.

Создайте функцию для обработки данных

Функция будет получать сообщения из MQTT-брокера и записывать данные в таблицу, созданную на предыдущем шаге.

  1. В консоли управления выберите каталог, в котором нужно создать функцию.
  2. В списке сервисов выберите Cloud Functions.
  3. Нажмите кнопку Создать функцию.
  4. Введите имя функции.
  5. Нажмите кнопку Создать.

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

После создания функции вы автоматически будете перенаправлены на страницу Редактор.

  1. В блоке Код:

    • В поле Среда выполнения выберите python37.
    • В поле Способ оставьте значение по умолчанию: Редактор кода.
  2. Создайте файл myfunction.py.

  3. В области редактирования файла вставьте код функции, размещенный на Github.

    Примечание

    Запрос, который используется для записи данных в БД, формируется в методе makeInsertStatement. Если необходимо убрать или добавить параметры, внесите изменения в этот метод.

  4. В поле Точка входа укажите myfunction.msgHandler.

  5. Задайте следующие параметры версии:

    • Таймаут, с: 10.
    • Память: 128 МБ.
  6. Создайте сервисный аккаунт:

    1. Нажмите кнопку Создать аккаунт (или Создать новый). Откроется дополнительное окно.
    2. В поле Имя введите my-db-function-service-account.
    3. Добавьте роли: serverless.functions.invoker и editor.
    4. Нажмите кнопку Создать.

    Созданный аккаунт автоматически добавится в поле Сервисный аккаунт. От имени этого аккаунта функция будет записывать данные в БД.

  7. Добавьте переменные окружения:

    • VERBOSE_LOG — параметр, отвечающий за вывод подробной информации о выполнении функции. Введите значение True.
    • DB_HOSTNAME — имя хоста БД PostgreSQL для подключения.
    • DB_PORT — порт для подключения.
    • DB_NAME — имя базы данных для подключения.
    • DB_USER — имя пользователя для подключения.
    • DB_PASSWORD — пароль, который был введен при создании кластера.

    Чтобы определить значения параметров для подключения:

    1. В консоли управления выберите каталог, в котором вы создали кластер.
    2. В списке сервисов выберите Managed Service for PostgreSQL.
    3. Выберите кластер my-pg-database.
    4. Нажмите значок в строке с нужной БД.
    5. Выберите пункт Подключиться.
    6. На вкладке Shell найдите пример строки подключения.
    7. Перенесите значения переменных host, port, dbname и user в соответствующее поле Значение переменных окружения функции.
  8. Нажмите кнопку Создать версию.

Создайте триггер для Yandex IoT Core

Триггер будет принимать копии сообщений из топика устройства и передавать их в функцию для обработки.

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

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

  3. Перейдите на вкладку Триггеры.

  4. Нажмите кнопку Создать триггер.

  5. В блоке Базовые параметры:

    • В поле Имя введите имя триггера.
    • В поле Описание введите описание триггера.
    • В поле Тип выберите Yandex IoT Core.
  6. В блоке Настройки сообщений Yandex IoT Core:

    • В поле Реестр введите my-registry.

    • В поле Устройство введите my-device.

    • В поле Топик укажите топик, в который устройство отправляет данные:

      $devices/<device id>/events
      

      Где <device id> — идентификатор вашего устройства.

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

  7. В блоке Настройки функции:

    • Выберите функцию для обработки данных, созданную ранее.
    • В поле Тег версии укажите $latest.
    • В поле Сервисный аккаунт укажите my-db-function-service-account.
  8. Остальные поля оставьте пустыми или заполните по своему усмотрению.

  9. Нажмите кнопку Создать триггер.

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

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Создайте необходимые ресурсы Yandex IoT Core
  • Создайте реестр
  • Создайте устройство
  • Подключите устройство к MQTT-брокеру
  • Подготовьте базу данных
  • Создайте кластер
  • Подключитесь к кластеру
  • Создайте таблицу
  • Создайте функцию для обработки данных
  • Создайте первую версию функции
  • Создайте триггер для Yandex IoT Core