# 2026-03-09 # init.tf — однократная инициализация схемы БД через sless_job. # # Джобы запускаются один раз при terraform apply и ждут завершения. # Использует функцию sql_runner (без HTTP-триггера) для безопасного DDL. # # Порядок выполнения гарантирован через depends_on: # 1. notes_table_init — создаём таблицу # 2. notes_index_init — создаём индекс (требует таблицу) # # Для повторного запуска (например, после DROP TABLE) — увеличь run_id. # run_id отслеживается в state: при изменении terraform перезапустит джоб. # Джоб создания таблицы notes. # CREATE TABLE IF NOT EXISTS — безопасно запускать повторно, таблица не пересоздаётся. resource "sless_job" "notes_table_init" { name = "notes-create-table" function = sless_function.sql_runner.name wait_timeout_sec = 120 run_id = 1 event_json = jsonencode({ statements = [ "CREATE TABLE IF NOT EXISTS notes (id serial PRIMARY KEY, title text NOT NULL, body text, created_at timestamp DEFAULT now())" ] }) } # Джоб создания индекса для сортировки по дате. # depends_on гарантирует, что таблица уже создана до создания индекса. resource "sless_job" "notes_index_init" { depends_on = [sless_job.notes_table_init] name = "notes-create-index" function = sless_function.sql_runner.name wait_timeout_sec = 60 run_id = 1 event_json = jsonencode({ statements = [ "CREATE INDEX IF NOT EXISTS notes_created_idx ON notes(created_at DESC)" ] }) }