Поставка данных из Yandex Forms в Yandex DataLens с использованием Yandex Cloud Functions и Yandex Query при помощи Terraform
Чтобы настроить интеграцию Forms и DataLens при помощи Terraform:
- Подготовьте инфраструктуру.
- Создайте и настройте функцию Yandex Cloud Functions.
- Создайте и настройте форму в Forms.
- Настройте подключение и привязку к данным в сервисе Yandex Query.
- Настройте получение данных в DataLens.
- Протестируйте интеграцию созданных ресурсов.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за использование бакета Yandex Object Storage (см. тарифы Object Storage);
- плата за хранение и запросы секретов Yandex Lockbox (см. тарифы Yandex Lockbox);
- плата за вызовы функций и вычислительные ресурсы, выделенные для выполнения функций (см. тарифы Cloud Functions);
- плата за объем считанных из источников данных при исполнении запросов Query (см. тарифы Query);
- плата за использование DataLens в соответствии с тарифным планом (см. тарифы DataLens).
Подготовьте инфраструктуру
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Чтобы подготовить инфраструктуру при помощи Terraform:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации forms-and-datalens-integration.tf
.В этом файле описаны:
- Сеть и подсеть, в которых будет создаваться инфраструктура для функции Cloud Functions.
- Сервисный аккаунт со следующими ролями:
lockbox.payloadViewer
— для чтения секретов Yandex Lockbox;functions.functionInvoker
— для вызова функции Cloud Functions;storage.admin
— для чтения и записи данных в бакет Object Storage, а также управления ACL бакета;yq.viewer
иyq.invoker
— для интеграции DataLens и Query.
- Статический ключ сервисного аккаунта, который используется для создания бакета Object Storage.
- Статический ключ сервисного аккаунта, который используется для создания функции Cloud Functions.
- Секрет Yandex Lockbox для хранения данных о статическом ключе сервисного аккаунта для функции Cloud Functions.
- Информационный ресурс
data
для секрета Yandex Lockbox, из которого функция Cloud Functions получает идентификатор версии секрета. - Бакет Object Storage для результатов работы функции.
- Функция Cloud Functions с публичным доступом.
-
В блоке с локальными переменными файла
forms-and-datalens-integration.tf
укажите:- идентификатор вашего каталога в переменной
sa_folder_id
; - имя бакета Object Storage в переменной
bucket-name
.
- идентификатор вашего каталога в переменной
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Создайте и настройте функцию Cloud Functions
-
Скачайте в директорию с файлом
forms-and-datalens-integration.tf
архив с кодом функции . -
В блоке локальных переменных файла
forms-and-datalens-integration.tf
укажите значения:content_path
=function.zip
.create-function
=1
.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Создайте и настройте форму Forms
Создайте API-ключ
API-ключ нужен для настройки интеграции с Forms.
- В консоли управления
выберите нужный каталог. - В списке сервисов выберите Identity and Access Management.
- Выберите сервисный аккаунт
forms-integration
. - Перейдите в раздел Обзор.
- Нажмите кнопку Создать новый ключ и выберите Создать API-ключ.
- Нажмите кнопку Создать.
- В открывшемся окне Новый ключ отобразятся Идентификатор ключа и Ваш секретный ключ. Сохраните их — они понадобятся в дальнейшем.
Создайте форму
-
Перейдите в сервис Forms
. -
Нажмите кнопку Создать форму.
-
Добавьте в форму хотя бы два любых поля и настройте произвольные вопросы в них.
-
Нажмите кнопку Опубликовать.
-
Сохраните ссылку на опубликованную форму — она понадобится позднее.
Настройте интеграцию с функцией Cloud Functions
-
Перейдите в сервис Forms
. -
Откройте созданную ранее форму.
-
Перейдите на вкладку Настройки.
-
Откройте раздел Дополнительно.
-
В блоке Ключ для запуска облачных функций введите данные созданного ранее API-ключа и нажмите кнопку Сохранить.
-
Откройте вкладку Интеграции.
-
Нажмите кнопку Cloud Functions, чтобы добавить условие для интеграции.
-
В поле Код функции введите идентификатор функции Cloud Functions. Вы можете скопировать идентификатор в разделе Обзор функции Cloud Functions в консоли управления
. -
В поле Показывать сообщение о результате действия выберите Показывать.
-
Нажмите кнопку Сохранить.
Проверьте работу созданной интеграции
-
Перейдите по публичной ссылке созданной ранее формы.
-
Заполните форму и нажмите кнопку Отправить.
-
Перейдите в сервис Forms
. -
Откройте созданную ранее форму.
-
Откройте вкладку Интеграции.
-
Перейдите на страницу Выполненные интеграции.
-
Откройте запись о выполненном действии и убедитесь, что в разделе Ответ получен HTTP-ответ
200 — ОК
. -
Перейдите в консоль управления
и откройте созданный ранее бакет. Убедитесь, что в нем появился JSON-файл с данными из заполненной формы.Название папки, в которой будет расположен файл, соответствует внутреннему идентификатору формы. Сохраните этот идентификатор — он понадобится для следующих шагов.
Все последующие результаты заполнения формы будут сохраняться в этой папке.
-
Заполните форму еще несколько раз, причем одно из полей заполните одинаково хотя бы в двух формах. В дальнейшем это увеличит наглядность при тестировании интеграции.
Настройте подключение и привязку к данным в сервисе Query
- Перейдите в консоль управления
и откройте сервис Query. - На вкладке Соединения нажмите кнопку
Создать. - Создайте соединение со следующими параметрами:
- Имя —
forms-connection
. - Тип —
Object Storage
. - Бакет — имя созданного ранее бакета.
- Сервисный аккаунт —
forms-integration-sa
.
- Имя —
- В открывшемся окне задайте параметры привязки к данным:
- Тип —
Object Storage
. - Соединение —
forms-connection
. - Путь —
/<идентификатор_формы>/
.
Вы можете скопировать идентификатор:- В разделе Объекты бакета Object Storage. Название папки, в которой расположен файл с результатами заполнения формы, соответствует ее идентификатору.
- В адресной строке интерфейса Forms
на странице просмотра или редактирования формы.
- Формат —
json_each-row
. - Колонки — создайте колонки для полей, которые вы задали в форме.
Чтобы Query определил колонки самостоятельно, нажмите кнопку Автоопределить колонки.
- Тип —
Настройте получение данных в DataLens
- Перейдите в сервис DataLens
. - На панели слева выберите
Подключения и нажмите кнопку Создать подключение. - Выберите сервис Query и задайте в открывшемся окне следующие параметры:
- Облако и каталог — выберите облако и каталог, в котором вы создали остальные ресурсы.
- Сервисный аккаунт —
forms-integration-sa
.
- Нажмите кнопку Сохранить изменения и в открывшемся окне задайте имя подключения —
forms-datalens-connection
, затем нажмите кнопку Создать. - Вернитесь на главную страницу сервиса DataLens
и нажмите кнопку Создать датасет. - На панели подключений нажмите
Добавить и выберите подключениеforms-datalens-connection
. - В блоке Таблицы выберите нужную таблицу и перетащите ее в рабочую область DataLens.
После загрузки данные из таблицы появятся на панели Предпросмотр. - Нажмите кнопку Сохранить и введите имя датасета —
forms-integration-dataset
, затем нажмите кнопку Создать.
Протестируйте интеграцию созданных ресурсов
Чтобы проверить совместную работу созданных ресурсов, откройте датасет forms-integration-dataset
и нажмите кнопку Создать чарт. В открывшемся окне создайте произвольный чарт с данными, полученными из формы. Для большей наглядности постройте чарт по тому полю, в котором есть повторяющиеся значения.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-