45 lines
1.9 KiB
HCL
45 lines
1.9 KiB
HCL
# 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)"
|
|
]
|
|
})
|
|
}
|