125 lines
4.2 KiB
Terraform
125 lines
4.2 KiB
Terraform
// 2026-03-20 — удалены stress_* функции (oneshot/Job). Архив: git history.
|
|
// 2026-03-20 — выделено из resources.tf: sless функции, сервисы и джобы.
|
|
// 2026-03-19 — миграция: sless_function (oneshot/Job) + sless_service (long-running Deployment).
|
|
// sless_trigger(type=http) удалены — HTTP URL теперь автоматически в sless_service.
|
|
// postgres_sql_runner_create_table остаётся sless_function (oneshot/Job).
|
|
// pg-info, pg-table-reader, pg-table-writer → sless_service.
|
|
|
|
# Служебная функция выполняет SQL-операторы из event_json.
|
|
# Credentials берутся из locals (vault_secrets) — без хардкода.
|
|
# Для сверки хардкод остаётся в terraform.tfvars.
|
|
resource "sless_function" "postgres_sql_runner_create_table" {
|
|
name = "pg-create-table-runner"
|
|
runtime = "python3.11"
|
|
entrypoint = "sql_runner.run_sql"
|
|
memory_mb = 128
|
|
timeout_sec = 30
|
|
|
|
env_vars = {
|
|
PGHOST = local.pg_host
|
|
PGPORT = "5432"
|
|
PGDATABASE = local.pg_database
|
|
PGUSER = local.pg_username
|
|
PGPASSWORD = local.pg_password
|
|
PGSSLMODE = "require"
|
|
# Для сверки (должно совпадать с vault):
|
|
# PGUSER = var.pg_user
|
|
# PGPASSWORD = var.pg_password
|
|
}
|
|
|
|
source_dir = "${path.module}/code/sql-runner"
|
|
}
|
|
|
|
resource "sless_job" "postgres_table_init_job" {
|
|
name = "pg-create-table-job-main-v13"
|
|
function = sless_function.postgres_sql_runner_create_table.name
|
|
wait_timeout_sec = 180
|
|
run_id = 13
|
|
|
|
event_json = jsonencode({
|
|
statements = [
|
|
"CREATE TABLE IF NOT EXISTS terraform_demo_table (id serial PRIMARY KEY, title text NOT NULL, created_at timestamp DEFAULT now())"
|
|
]
|
|
})
|
|
|
|
depends_on = [nubes_postgres_database.db]
|
|
}
|
|
|
|
# Long-running сервис на NodeJS: возвращает версию PG-сервера и счётчик строк в таблице.
|
|
# Единственная функция примера на nodejs20 — проверка что JS runtime работает.
|
|
# URL автоматически: https://sless.kube5s.ru/fn/<namespace>/pg-info
|
|
resource "sless_service" "pg_info" {
|
|
name = "pg-info"
|
|
runtime = "nodejs20"
|
|
entrypoint = "pg_info.info"
|
|
memory_mb = 128
|
|
timeout_sec = 15
|
|
|
|
env_vars = {
|
|
PGHOST = local.pg_host
|
|
PGPORT = "5432"
|
|
PGDATABASE = local.pg_database
|
|
PGUSER = local.pg_username
|
|
PGPASSWORD = local.pg_password
|
|
PGSSLMODE = "require"
|
|
}
|
|
|
|
source_dir = "${path.module}/code/pg-info"
|
|
|
|
depends_on = [sless_job.postgres_table_init_job]
|
|
}
|
|
|
|
# Long-running сервисы чтения и записи строк terraform_demo_table — в одном файле table_rw.py.
|
|
# list_rows (GET) — читает все строки; add_row (POST {title}) — вставляет строку.
|
|
# URL автоматически: https://sless.kube5s.ru/fn/<namespace>/pg-table-reader
|
|
# https://sless.kube5s.ru/fn/<namespace>/pg-table-writer
|
|
resource "sless_service" "postgres_table_reader" {
|
|
name = "pg-table-reader"
|
|
runtime = "python3.11"
|
|
entrypoint = "table_rw.list_rows"
|
|
memory_mb = 128
|
|
timeout_sec = 30
|
|
|
|
env_vars = {
|
|
PGHOST = local.pg_host
|
|
PGPORT = "5432"
|
|
PGDATABASE = local.pg_database
|
|
PGUSER = local.pg_username
|
|
PGPASSWORD = local.pg_password
|
|
PGSSLMODE = "require"
|
|
}
|
|
|
|
source_dir = "${path.module}/code/table-rw"
|
|
|
|
depends_on = [sless_job.postgres_table_init_job]
|
|
}
|
|
|
|
output "table_reader_url" {
|
|
value = sless_service.postgres_table_reader.url
|
|
}
|
|
|
|
resource "sless_service" "postgres_table_writer" {
|
|
name = "pg-table-writer"
|
|
runtime = "python3.11"
|
|
entrypoint = "table_rw.add_row"
|
|
memory_mb = 256
|
|
timeout_sec = 45
|
|
|
|
env_vars = {
|
|
PGHOST = local.pg_host
|
|
PGPORT = "5432"
|
|
PGDATABASE = local.pg_database
|
|
PGUSER = local.pg_username
|
|
PGPASSWORD = local.pg_password
|
|
PGSSLMODE = "require"
|
|
}
|
|
|
|
source_dir = "${path.module}/code/table-rw"
|
|
|
|
depends_on = [sless_job.postgres_table_init_job]
|
|
}
|
|
|
|
output "table_writer_url" {
|
|
value = sless_service.postgres_table_writer.url
|
|
}
|