# Det arbetslastlagret behöver, och kartan i klartext. # # terraform output karta hela AWS-basen # terraform output -json for_arbetslast matas in i felsokning/infra/terraform output "karta" { description = "AWS-basen: nät, kluster, data, hemligheter och gränser." value = { region = var.region miljo = var.miljo doman = "https://${var.doman}" nat = { vpc = "${aws_vpc.denna.id} (${var.vpc_cidr})" zoner = local.zoner publikt = "bara lastbalanserare och NAT" privat = "noderna — inga publika adresser" data = "Aurora — ingen väg ut alls" nat_gateways = var.nat_per_zon ? "en per zon" : "en delad (ej produktion)" endpoints = "S3 via gateway; ECR, loggar, Secrets Manager, STS och ELB via gränssnitt — trafiken lämnar aldrig nätet" } kluster = { namn = aws_eks_cluster.denna.name version = aws_eks_cluster.denna.version slutpunkt = aws_eks_cluster.denna.endpoint noder = "${var.noder.minsta}–${var.noder.hogsta} × ${join(", ", var.nod_typer)} (arm64)" auth = "IRSA — varje tjänstekonto har egen roll; noderna delar inga rättigheter" loggar = "api, audit, authenticator, controllerManager, scheduler" metadata = "IMDSv2 obligatoriskt, hoppgräns 1 — podar kan inte låna nodens roll" } databas = { motor = "Aurora PostgreSQL ${aws_rds_cluster.denna.engine_version} Serverless v2" kapacitet = "${var.databas.min_kapacitet}–${var.databas.max_kapacitet} ACU × ${var.databas.instanser} instanser" slutpunkt = aws_rds_cluster.denna.endpoint backup = "${var.databas.backup_dagar} dagar med PITR ned till sekunden" kryptering = "KMS med egen nyckel, i vila och över nätet (sslmode=require)" atkomst = "endast från klustrets noder, i ett subnätlager utan routing ut" } bilagor = { hink = aws_s3_bucket.bilagor.id kryptering = "SSE-KMS med egen nyckel" skydd = "publik åtkomst blockerad, TLS obligatoriskt, versionshantering på" atkomst = "plattformens roll får läsa och skriva — men aldrig radera" } register = { for namn, r in aws_ecr_repository.denna : namn => "${r.repository_url} (oföränderliga taggar, sårbarhetsskanning)" } hemligheter = { databas = aws_secretsmanager_secret.databas.name app = "${aws_secretsmanager_secret.app.name} — Claude-nyckeln fylls i för hand efter första apply" lasare = "endast rollen ${aws_iam_role.plattform.name}, via IRSA" } roller = { plattform = aws_iam_role.plattform.arn lastbalanserare = aws_iam_role.lastbalanserare.arn bygg = "${aws_iam_role.bygg.arn} — får publicera till ECR, får inte röra klustret" drift = "${aws_iam_role.drift.arn} — får röra klustret, får inte publicera bilder" } observation = { instrumentpanel = "https://${var.region}.console.aws.amazon.com/cloudwatch/home?region=${var.region}#dashboards:name=${aws_cloudwatch_dashboard.denna.dashboard_name}" larm = var.larm_epost != "" ? "till ${var.larm_epost}" : "INGEN mottagare satt — larm går ingenstans" flodesloggar = "avvisad trafik, 30 dagar" sparning = "W3C traceparent genom hela kedjan; varje anrop loggas som en JSON-rad med nedbrytning av tiden" matvarden = "CloudWatch EMF från tjänsterna själva — ingen agent, ingen SDK" larm_pa_app = "svarstid p95 > 3 s, serverfel, modellen avböjer" } kvar_att_gora = compact([ "Fyll i Claude-nyckeln: aws secretsmanager put-secret-value --secret-id ${aws_secretsmanager_secret.app.name}", "Kör felsokning/infra/postgres-init.sql mot databasen — schemat med append-only-triggarna.", "Kör arbetslastlagret: cd ../terraform && terraform apply", var.larm_epost == "" ? "Sätt larm_epost — annars larmar ingenting till någon." : "", var.tillatna_api_cidr == ["0.0.0.0/0"] ? "Begränsa tillatna_api_cidr — API-servern är öppen mot hela internet." : "", ]) } } # Matas in i arbetslastlagret så det inte behöver upprepa någonting. output "for_arbetslast" { description = "Värden som felsokning/infra/terraform behöver." value = { region = var.region kluster = aws_eks_cluster.denna.name kluster_slutpunkt = aws_eks_cluster.denna.endpoint kluster_ca = aws_eks_cluster.denna.certificate_authority[0].data doman = var.doman certifikat_arn = aws_acm_certificate_validation.denna.certificate_arn register = split("/", aws_ecr_repository.denna["guidad-felsokning-web"].repository_url)[0] plattform_roll = aws_iam_role.plattform.arn lastbalanserar_roll = aws_iam_role.lastbalanserare.arn bilage_hink = aws_s3_bucket.bilagor.id hemlighet_databas = aws_secretsmanager_secret.databas.name hemlighet_app = aws_secretsmanager_secret.app.name zon_id = local.zon } } output "databas_url" { description = "Anslutningssträng. Hämtas normalt ur Secrets Manager — den här är för engångskörning av schemat." sensitive = true value = "postgresql://${aws_rds_cluster.denna.master_username}:${random_password.databas.result}@${aws_rds_cluster.denna.endpoint}:5432/${aws_rds_cluster.denna.database_name}?sslmode=require" }