sless-examples/notes-python/init.tf
2026-03-09 17:57:29 +04:00

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)"
]
})
}