sless-primer/POSTGRES/chaos_marathon.tf
2026-03-22 17:08:18 +04:00

302 lines
9.3 KiB
HCL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 2026-03-21 chaos_marathon.tf: 15 новых сервисов для часового хаос-марафона.
// Три рантайма: python3.11 (9), nodejs20 (2), go1.23 (2).
// Все зависят от sless_job.postgres_table_init_job.
# ── Python: работа с таблицей ─────────────────────────────────────────────────
# Считает строки по prefix — тест concurrent reads + COUNT агрегации.
resource "sless_service" "pg_counter" {
name = "pg-counter"
runtime = "python3.11"
entrypoint = "pg_counter.count"
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-counter"
depends_on = [sless_job.postgres_table_init_job]
}
# DELETE дублей по title — идемпотентный, повторный вызов безопасен.
resource "sless_service" "pg_dedup" {
name = "pg-dedup"
runtime = "python3.11"
entrypoint = "pg_dedup.dedup"
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/pg-dedup"
depends_on = [sless_job.postgres_table_init_job]
}
# Поиск по title с ILIKE + пагинация — тест спецсимволов и SQL injection safety.
resource "sless_service" "pg_search" {
name = "pg-search"
runtime = "python3.11"
entrypoint = "pg_search.search"
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-search"
depends_on = [sless_job.postgres_table_init_job]
}
# Bulk INSERT через execute_values — до 500 строк за раз.
resource "sless_service" "pg_bulk_insert" {
name = "pg-bulk-insert"
runtime = "python3.11"
entrypoint = "pg_bulk_insert.bulk_insert"
memory_mb = 256
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/pg-bulk-insert"
depends_on = [sless_job.postgres_table_init_job]
}
# DELETE строк старше N минут — идемпотентный.
resource "sless_service" "pg_delete_old" {
name = "pg-delete-old"
runtime = "python3.11"
entrypoint = "pg_delete_old.delete_old"
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/pg-delete-old"
depends_on = [sless_job.postgres_table_init_job]
}
# INSERT ON CONFLICT DO UPDATE — повторный вызов с тем же title безопасен.
resource "sless_service" "pg_upsert" {
name = "pg-upsert"
runtime = "python3.11"
entrypoint = "pg_upsert.upsert"
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-upsert"
depends_on = [sless_job.postgres_table_init_job]
}
# ── Python: chaos ─────────────────────────────────────────────────────────────
# Echo: принимает любой ввод и отражает обратно — проверка на мусорный input.
resource "sless_service" "chaos_echo" {
name = "chaos-echo"
runtime = "python3.11"
entrypoint = "chaos_echo.echo"
memory_mb = 128
timeout_sec = 10
source_dir = "${path.module}/code/chaos-echo"
depends_on = [sless_job.postgres_table_init_job]
}
# Валидация плохих параметров — тупой юзер не может уронить сервис.
resource "sless_service" "chaos_badparams" {
name = "chaos-badparams"
runtime = "python3.11"
entrypoint = "chaos_badparams.validate"
memory_mb = 128
timeout_sec = 10
source_dir = "${path.module}/code/chaos-badparams"
depends_on = [sless_job.postgres_table_init_job]
}
# Медленный pg_sleep — тест timeout enforcement.
resource "sless_service" "chaos_slowquery" {
name = "chaos-slowquery"
runtime = "python3.11"
entrypoint = "chaos_slowquery.slowquery"
memory_mb = 128
timeout_sec = 12
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/chaos-slowquery"
depends_on = [sless_job.postgres_table_init_job]
}
# Большой JSON response — тест памяти и серилизации.
resource "sless_service" "chaos_bigpayload" {
name = "chaos-bigpayload"
runtime = "python3.11"
entrypoint = "chaos_bigpayload.bigpayload"
memory_mb = 256
timeout_sec = 15
source_dir = "${path.module}/code/chaos-bigpayload"
depends_on = [sless_job.postgres_table_init_job]
}
# ── Node.js ───────────────────────────────────────────────────────────────────
# Bulk INSERT через параметризованный multi-value query.
resource "sless_service" "js_pg_batch" {
name = "js-pg-batch"
runtime = "nodejs20"
entrypoint = "js_pg_batch.run"
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/js-pg-batch"
depends_on = [sless_job.postgres_table_init_job]
}
# Идемпотентный INSERT — повторный вызов с тем же key = existing, не дубль.
resource "sless_service" "js_idempotent" {
name = "js-idempotent"
runtime = "nodejs20"
entrypoint = "js_idempotent.run"
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/js-idempotent"
depends_on = [sless_job.postgres_table_init_job]
}
# ── Go 1.23 ───────────────────────────────────────────────────────────────────
# Параллельные concurrent INSERTs из N горутин внутри одного пода.
resource "sless_service" "go_pg_race" {
name = "go-pg-race"
runtime = "go1.23"
entrypoint = "handler.Handle"
memory_mb = 256
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/go-pg-race"
depends_on = [sless_job.postgres_table_init_job]
}
# Atomic-счётчик в памяти + PG INSERT на каждый вызов.
resource "sless_service" "go_counter_atomic" {
name = "go-counter-atomic"
runtime = "go1.23"
entrypoint = "handler.Handle"
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/go-counter-atomic"
depends_on = [sless_job.postgres_table_init_job]
}
# ── Python: retry ─────────────────────────────────────────────────────────────
# Запись с retry при transient PG error — тест устойчивости к сбоям.
resource "sless_service" "py_retry_writer" {
name = "py-retry-writer"
runtime = "python3.11"
entrypoint = "py_retry_writer.retry_write"
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/py-retry-writer"
depends_on = [sless_job.postgres_table_init_job]
}