Skriptet deploy/paketera.sh skär plattformen i numrerade paket i driftsättningsordning: plan med SHA256-summor, AWS-basen, backend- bilderna, webbilden, arbetslasten och slutkontrollen. Varje paket bär sin egen ANVISNING-AGENT.md med steg, verifiering och stoppvillkor, plus fillista och versionsstämpel under paketunik väg så att alla paket kan packas upp i samma arbetskatalog. Ordningen är motiverad i planen: basen före bilderna (registret måste finnas), bilderna före arbetslasten (apply drar dem), verifieringen sist. 02 och 03 är utpekat parallelliserbara med samma bildtagg. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2.9 KiB
Paket 01 · AWS-basen
Detta paket lägger grunden: nätverk i tre lager, EKS-klustret, Aurora PostgreSQL, S3 för bilagor, ECR, KMS-nycklar, Secrets Manager, Route 53 och larm. Allt efterföljande läser den här basens utdata.
Förutsättningar
AWS-behörighet i målkontot, Terraform enligt infra/aws/versions.tf.
Läs infra/aws/README.md — den förklarar varje val; denna anvisning
är utförandeordningen.
Steg
cd infra/aws
terraform init
terraform validate
terraform plan -out plan.ut # granska: inga destruktiva ändringar väntas i en ny miljö
terraform apply plan.ut
terraform output karta # hela basen i klartext — bifoga i rapporten
Variabler som ska sättas medvetet (via -var eller en tfvars-fil som
INTE innehåller hemligheter): doman, zon_id, larm_epost, och
tillatna_api_cidr snävat till de adresser som ska nå API-servern.
Standardvärdet är öppet enbart för att en ny miljö ska gå att nå alls.
Efter apply — fyra saker Terraform inte gör
- Claude-nyckeln in i Secrets Manager (Terraform ska inte känna
den):
aws secretsmanager put-secret-value \ --secret-id felsokning-produktion/app \ --secret-string "$(aws secretsmanager get-secret-value --secret-id felsokning-produktion/app \ --query SecretString --output text | jq '.anthropic_api_key = "sk-ant-…"')" - Databasschemat. Aurora ligger i ett datalager utan routing ut;
kör
infra/postgres-init.sqlinifrån klustret:Det är samma fil som integrationstestet kör — de kan inte glida isär.aws eks update-kubeconfig --name <klusternamn ur karta> kubectl run psql --rm -i --image=postgres:16 --restart=Never -- \ psql "<databas_url ur terraform output databas_url>" < ../postgres-init.sql - Verifiera att
tillatna_api_cidrär snävat om det inte gjordes före apply. - Bekräfta larmprenumerationen — SNS skickar ett
bekräftelsemejl till
larm_epost; utan klick går larmen ingenstans.
Verifiering — allt ska vara sant innan steget rapporteras klart
terraform output karta # kvar_att_gora ska vara tomt utom det som uttryckligen skjutits upp
kubectl get nodes # samtliga Ready
aws ecr describe-repositories \
--query 'repositories[].repositoryName' # tre repon: web, plattform, ai-orkester
kubectl run schema --rm -i --image=postgres:16 --restart=Never -- \
psql "<databas_url>" -c "\dt" # tabellerna ur postgres-init.sql finns
Rapportera terraform output karta ordagrant, registeradressen och
klusternamnet — steg 02–04 behöver dem.
Stoppvillkor
Faller terraform apply, kör inte om i blindo: läs felet, åtgärda
orsaken, kör plan igen och granska. Ett kluster utan Ready-noder
eller ett kvar_att_gora med oförklarade punkter betyder stopp, inte
vidare till paket 02.