Wdrażanie AWS — krok po kroku
deploy/aws = moduł Terraform: ECS Fargate (Web + MCP) za ALB, RDS Postgres, dzienniki CloudWatch.
1. Wymagania wstępne
- Terraform ≥ 1.5 + poświadczenia AWS (
aws configure/ zmienne env) z prawami do zasobów VPC-scoped, ECS, RDS, ALB, IAM. - Trzy obrazy w rejestrze, który ECS może pobrać (ECR, lub GHCR public).
2. Zainicjalizuj
cd deploy/aws
terraform init
3. Zastosuj
terraform apply \
-var image_registry=ghcr.io/your-org/cmind \
-var image_tag=1.0.0 \
-var owner_email=you@example.com \
-var owner_password='Change-Me-Str0ng!' \
-var pg_password="$(openssl rand -hex 16)" \
-var discovery_join_token="$(openssl rand -hex 24)"
Robi: RDS Postgres (appdb), klaster ECS, usługi Fargate dla Web + MCP, ALB (Web na /, MCP na /mcp), grupy bezpieczeństwa, grupę dzienników CloudWatch, sidecar kolektora ADOT (AWS Distro for OpenTelemetry) w każdym zadaniu. Aplikacja eksportuje OTLP do sidecara, który wysyła ślady do X-Ray, metryki do CloudWatch (EMF, przestrzeń nazw cmind); dzienniki pozostają na sterowniku awslogs jako kompaktowy JSON. Odkrycie włączone dla Web. Rola zadania przyznaje sidecarowi dostęp do zapisu X-Ray + CloudWatch — nie ma kolektora do uruchomienia sam.
Używa domyślnych VPC konta/podsieci dla zwięzłości. Dla produkcji, przewód własny VPC, prywatne podsieci, słuchacz HTTPS (cert ACM).
4. Uzyskaj adresy URL
terraform output web_url # ALB root
terraform output mcp_url # ALB /mcp
Otwórz web_url, zaloguj się właścicielem (zmuszony zmiana hasła przy pierwszym logowaniu).
5. Dodaj agentów węzłów (oddzielnie)
Fargate zabrania uprzywilejowanych/DinD, więc uruchom agentów indziej wskazując na web_url:
- ECS on EC2 — dostawca pojemności z
privileged = truedefinicjami zadań uruchamiającymicmind-node-agent. - EKS — Helm chart (kubernetes.md) z
nodeAgent.privileged=true.
Ustaw NodeAgent__MainUrl=<web_url>, NodeAgent__AdvertiseUrl=<agent reachable url>, NodeAgent__JwtSecret=<discovery_join_token>. Agenci samodzielnie rejestrują się — patrz ../operations/node-discovery.md.
6. Zweryfikuj
aws logs tail /ecs/cmind --since 5m # kompaktowe dzienniki JSON
curl -s "$(terraform output -raw web_url)/version"
Notatki produkcyjne
- Dodaj słuchacz HTTPS + certyfikat ACM; ogranicz grupę bezpieczeństwa ALB.
- Przechowuj sekrety w AWS Secrets Manager / SSM, wtryskuj poprzez
secretsdefinicji zadań zamiast plaintextenvironment. - Włącz RDS Multi-AZ + kopie zapasowe.
- Ślady (X-Ray), metryki (CloudWatch EMF), dzienniki (CloudWatch Logs) przewodowała automatycznie poprzez sidecar ADOT; korelyuj na
trace_id. Patrz ../operations/logging.md. - Aplikacja już wskazuje
OTEL_EXPORTER_OTLP_ENDPOINTna sidecar w-zadań; wskaż do kolektora zewnętrznego, jeśli wolisz scentralizować.
Agent kopii + Secrets Manager (S5)
deploy/aws/copy-agent.tf dodaje usługę copy-agent ECS Fargate hosting CopyEngineSupervisor (App:Copy:Enabled=true, App:Features:CopyTrading=true) z bez ALB — pracownik trzymający długotrwałe gniazda cTrader. Ciąg połączenia DB przechowywany w AWS Secrets Manager, wtryskiwany poprzez blok secrets zadania (rola wykonawcza przyznana secretsmanager:GetSecretValue tylko na tym sekrecie), nie plaintext env. NodeName każdego zadania domyślnie wynosi jej nazwę hosta kontenera (unikalna na Fargate zadanie), więc atrybuty leasingu DB profilami biegającymi na zadanie — dwa zadania nigdy nie gośćią jeden. Skaluj copy_agent_count do dodania pojemności kopii; pierścień klucza DataProtection współdzielony przez Postgres, więc każde zadanie może odszyfrować przechowywane tokeny Open API.