Вы можете передавать ответы на форму в базу данных PostgreSQL, созданную в Yandex Cloud, и хранить их там.
Шаг 1. Создать базу данных
Перейдите в консоль Yandex Cloud и выберите каталог, в котором хотите создать базу данных.
На панели слева нажмите и выберите сервис Managed Service for PostgreSQL.
В правом верхнем углу нажмите Создать кластер.
Настройте кластер:
В разделе Базовые параметры заполните поле Имя кластера. Оно может содержать строчные и прописные буквы латинского алфавита, цифры, нижние подчеркивания и дефисы.
В разделе База данных заполните поля Имя БД и Имя пользвателя. Они могут содержать строчные и прописные буквы латинского алфавита, цифры, нижние подчеркивания и дефисы.
В разделе База данных заполните поле Пароль.
В разделе База данных в полях Локаль сортировки (LC_COLLATE) и Локаль набора символов (LC_CTYPE) установите значение en_US.UTF8. После создания базы данных изменить эти параметры не получится.
В разделе Дополнительные настройки включите опции Доступ из консоли управления и Доступ из Serverless.
При желании настройте другие параметры. Подробнее в разделе {#T}.
Нажмите Создать кластер.
Дождитесь, когда в у нового кластера поле Доступность примет значение Alive.
Шаг 2. Создать таблицу
Перейдите на страницу созданного кластера.
На панели слева нажмите SQL.
Выберите подходящее имя пользователя и базу данных, введите пароль и нажмите Подключиться.
Выберите схему public.
В редакторе SQL выполните следующий запрос:
create table answers(
id serial primary key,
answer jsonb,
created timestampwithtime zone default now()
);
Шаг 3. Создать подключение к базе данных
В консоли перейдите обратно в каталог, в котором находится созданный кластер.
На панели слева нажмите и выберите сервис Cloud Functions.
На панели слева нажмите .
В правом верхнем углу нажмите Создать подключение.
Настройте подключение:
Заполните поле Имя. Оно может содержать только строчные буквы латинского алфавита, цифры и дефисы.
В поле Тип выберите PostgreSQL.
Запоните поля Кластер, База данных, Пользователь и Пароль. Введите в них те значения, которые устанавливали при создании кластера в шаге 1.
Нажмите Создать.
Перейдите на страницу подключения и скопируйте значение поля Точка входа.
Шаг 4. Создать сервисный аккаунт
В консоли перейдите обратно в каталог, в котором находится созданный кластер.
В правом верхнем углу нажмите → Создать сервисный аккаунт.
В окне создания сервисного аккаунта заполните поля:
Имя может содержать только строчные буквы латинского алфавита, цифры и дефисы.
Описание может содержать любые символы.
В поле Роли в каталоге добавьте следующие роли:
serverless.functions.invoker
serverless.mdbProxies.user
Нажмите Создать.
Шаг 5. Создать ключ сервисного аккаунта
В консоли перейдите обратно в каталог, в котором находится созданный кластер.
Перейдите на вкладку Сервисные аккаунты.
Выберите нужный аккаунт.
На странице аккаунта на верхней панели нажмите Создать новый ключ → Создать API-ключ.
Напишите краткое описание ключа.
Нажмите Создать.
Откроется окно с идентификатором ключа и секретным ключом. Сохраните их в безопасном месте. После закрытия окна доступ к ним получить нельзя.
Шаг 6. Создать облачную функцию
В консоли перейдите обратно в каталог, в котором находится созданный кластер.
На панели слева нажмите и выберите сервис Cloud Functions.
В правом верхнем углу нажмите Создать функцию.
На странице создания функции заполните поля:
Имя может содержать только строчные буквы латинского алфавита, цифры и дефисы.
Описание может содержать любые символы.
Выберите язык программирования Python.
Создайте файл requirements.txt и напишите в нем строку:
psycopg2
Создайте или отредактируйте файл index.py:
import json
import psycopg2
defrun_function(connection, answer, **params) -> int:
data = {
'answer': answer,
'params': params,
}
args = (json.dumps(data), )
with connection.cursor() as c:
c.execute('insert into answers(answer) values(%s) returning id', args)
rs = c.fetchone()
connection.commit()
return rs[0]
defget_connection(context):
return psycopg2.connect(
database="<идентификатор_подключения>",
user="<имя_пользователя>",
password=context.token["access_token"],
host="<точка_входа>",
port=6432,
sslmode="require",
)
defhandler(event, context):
body = json.loads(event.get('body'))
params = {
name: value
for name, value in body.items()
if name != 'answer'
}
connection = get_connection(context)
result = {
'id': run_function(connection, body.get('answer'), **params),
}
return {
'statusCode': 200,
'body': result,
'headers': {
'Content-Type': 'application/json',
}
}
В этой функции подставьте значения:
<идентификатор_подключения> — значение поля Идентификатор подключения к базе данных, которое вы создавали в шаге 3. Скопировать его можно на странице подключения.
<имя_пользователя> — имя пользователя базы данных, которое вы вводили при настройке кластера в шаге 1. Найти его можно на странице кластера во вкладке Пользователи.
<точка_входа> — значение поля Точка входа в подключении к базе данных, которое вы создавали в шаге 3. Скопировать его можно на странице подключения.
Нажмите Сохранить изменения.
На странице функции скопируйте значение ее поля Идентификатор.
Шаг 7. Настроить интеграцию
Перейдите в форму, ответы на которую хотите передавать в базу данных, и выберите вкладку Интеграции.
Выберите группу действий, в которой хотите настроить создание задачи, и внизу группы нажмите кнопку Cloud Functions.
В поле Код функции вставьте идентификатор функции, который скопировали в предыдущем шаге.
При желании в разделе Параметры выберите дополнительные параметры, которые хотите передать в функцию.
Нажмите Сохранить.
Теперь все ответы на эту форму будут дополнительно сохраняться в вашей базе данных в таблице answers.