a5e276534c
Andra lagret läser nu basens utdata i stället för att upprepa någonting. 05-aws.tf hämtar klustret, domänen, certifikatet, registret, rollerna, hinken och hemligheternas namn — ändras något i basen slår det igenom här utan att en rad ändras. Autentiseringen mot klustret sker med en färsk EKS-token i stället för en kubeconfig på disk: inget att distribuera, inget som går ut. Hemligheterna bor i Secrets Manager och speglas in av External Secrets var timme. Terraform ser aldrig värdena, och det är själva poängen — en hemlighet som passerar Terraform hamnar i tillståndsfilen. Roteras en hemlighet följer klustret efter av sig självt. Plattformstjänsten kör som ett tjänstekonto med IRSA. Rollen är bunden till exakt det kontot i den namnrymden, så grannpodden på samma nod får ingenting på köpet. Bilagorna signeras mot S3 med samma roll — inga nycklar existerar att läcka. Postgres-podden är borta. Händelseloggen ligger i Aurora utanför klustret, i ett subnätlager utan routing ut, med automatisk säkerhetskopiering och PITR. Ingressen är en ALB med ACM-certifikat i stället för nginx, och alla tre tjänsterna delar den genom samma gruppnamn. Gitea med egna Actions-runners kör i samma kluster. Därmed finns inget externt beroende kvar: källkod, bygge, register och driftsättning ligger allt i vår AWS-miljö. Runnern och driftsättningen har varsitt tjänstekonto med skilda roller — bygget får publicera till ECR men inte röra klustret, driften tvärtom. Ett komprometterat bygge kan inte driftsätta. Gitea kör SQLite på en EBS-volym i stället för en egen Aurora-databas. En verkstadsinstallation har en handfull utvecklare, och ytterligare en databas att säkerhetskopiera och övervaka är kostnad utan motsvarande nytta. Verifierat: 96 vitest-tester, rotens lint och format:check, terraform fmt på båda lagren och statisk referenskontroll av vardera (88 respektive 35 resurser, inga dinglande referenser, alla count-resurser indexerade). terraform validate kunde inte köras här — registry.terraform.io är blockerad av sessionens egress-policy — så CI-jobbet kör den. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
116 lines
3.0 KiB
Terraform
116 lines
3.0 KiB
Terraform
# Det lilla som inte kommer från AWS-basen.
|
|
#
|
|
# Domän, register, roller, certifikat, hink och hemligheternas namn läses
|
|
# ur basens utdata (05-aws.tf) — de ska inte anges två gånger.
|
|
|
|
variable "tillstandshink" {
|
|
description = "S3-hinken där AWS-basens Terraform-tillstånd ligger. Basen skriver ut namnet."
|
|
type = string
|
|
}
|
|
|
|
variable "region" {
|
|
description = "Region för tillståndshinken. Samma som basens."
|
|
type = string
|
|
default = "eu-north-1"
|
|
}
|
|
|
|
variable "namnrymd" {
|
|
description = "Namnrymd för arbetslasten."
|
|
type = string
|
|
default = "guidad-felsokning"
|
|
}
|
|
|
|
variable "miljo" {
|
|
description = "Miljöns namn. Sätts som label på allt."
|
|
type = string
|
|
default = "produktion"
|
|
}
|
|
|
|
variable "bildtagg" {
|
|
description = <<-TEXT
|
|
Taggen alla tre bilderna körs med — commit-SHA:t från
|
|
publiceringsflödet. ECR har oföränderliga taggar, så en tagg pekar
|
|
alltid på samma bygge.
|
|
TEXT
|
|
type = string
|
|
|
|
validation {
|
|
condition = var.bildtagg != ""
|
|
error_message = "Ange en bildtagg — helst commit-SHA:t, aldrig tomt."
|
|
}
|
|
}
|
|
|
|
# ---- Drift -------------------------------------------------------------
|
|
|
|
variable "registrering_oppen" {
|
|
description = "Om vem som helst får skapa en ny organisation. Stäng i produktion."
|
|
type = bool
|
|
default = false
|
|
}
|
|
|
|
variable "tillat_interna_uppslag" {
|
|
description = <<-TEXT
|
|
Tillåter märkesspecifika uppslag mot privata nät. Behövs bara när
|
|
verkstaden har en OEM-server på sitt eget nät. Öppnar samtidigt en
|
|
väg från en tenant-administratör in i klustrets interna adresser —
|
|
lämna av om ni inte vet att ni behöver det.
|
|
TEXT
|
|
type = bool
|
|
default = false
|
|
}
|
|
|
|
variable "max_kropp_mb" {
|
|
description = <<-TEXT
|
|
Största tillåtna anropskropp. Bilagor laddas upp separat och kan
|
|
vara upp till 32 MB — lastbalanserarens gräns måste rymma dem,
|
|
annars avvisas dokumentationen redan vid dörren.
|
|
TEXT
|
|
type = number
|
|
default = 64
|
|
}
|
|
|
|
variable "repliker" {
|
|
description = "Grundantal repliker per tjänst (autoskalning tar över uppåt)."
|
|
type = object({
|
|
web = number
|
|
plattform = number
|
|
orkester = number
|
|
})
|
|
default = {
|
|
web = 2
|
|
plattform = 2
|
|
orkester = 2
|
|
}
|
|
}
|
|
|
|
variable "max_repliker" {
|
|
description = "Tak för autoskalningen per tjänst."
|
|
type = object({
|
|
web = number
|
|
plattform = number
|
|
orkester = number
|
|
})
|
|
default = {
|
|
web = 10
|
|
plattform = 10
|
|
orkester = 10
|
|
}
|
|
}
|
|
|
|
# ---- Självhostad git ---------------------------------------------------
|
|
|
|
variable "gitea" {
|
|
description = <<-TEXT
|
|
Gitea med egna Actions-runners i samma kluster. Med den på finns
|
|
inget externt beroende alls: källkod, bygge, register och drift
|
|
ligger i vår egen AWS-miljö.
|
|
TEXT
|
|
type = object({
|
|
aktiv = optional(bool, true)
|
|
doman = optional(string, "")
|
|
runners = optional(number, 2)
|
|
lagring = optional(string, "20Gi")
|
|
})
|
|
default = {}
|
|
}
|