Przejdź do głównej zawartości

Wzorce infrastruktury jako kod

Dziedziczysz repozytorium Terraform z jednym 900-liniowym plikiem main.tf, zaszytymi na sztywno blokami CIDR, bez zdalnego backendu i z terraform apply, które chce wymienić produkcyjną instancję RDS. Agent AI z radością dołoży do tego kolejne 900 linii, jeśli mu na to pozwolisz. Umiejętnością, która pozwala dostarczać stabilną infrastrukturę, nie jest „zmuszenie AI do pisania HCL” — jest nią pokierowanie AI tak, by produkowało małe, łatwe do recenzji diffy, a następnie przeczytanie każdej linii planu, zanim cokolwiek dotknie prawdziwego konta.

Ten przepis pokazuje prompty i mechanizmy zabezpieczające, które zamieniają Cursor, Claude Code i Codex w ostrożnego partnera do IaC — dla Terraform, CloudFormation i Pulumi.

  • Wielokrotnego użytku prompt, który refaktoryzuje monolityczny plik Terraform na moduły ze zdalnym, blokowanym backendem
  • Prompt „recenzji planu”, który zmusza agenta do wyjaśnienia każdej operacji destroy/replace przed wykonaniem apply
  • Przepływ wykrywania dryfu i importu, który możesz uruchomić, gdy konsola i stan się rozjeżdżają
  • Konfigurację MCP dla AWS/Azure/Kubernetes, dzięki której agent czyta żywe zasoby zamiast zgadywać
  • Playbook naprawczy na trzy awarie, które naprawdę wyrywają ze snu: blokady stanu, dryf i przypadkowy zasięg rażenia

Zanim wpiszesz jakikolwiek prompt, daj agentowi dwie rzeczy: plik z regułami, by przestał wymyślać Twoje konwencje na nowo, oraz dostęp przez MCP, by mógł czytać żywy stan chmury zamiast halucynować nazwy zasobów.

Konfiguracja MCP jest identyczna we wszystkich trzech narzędziach — wszystkie czytają ten sam rejestr serwerów. Zestaw AWS to grupa wyspecjalizowanych serwerów w Pythonie (uruchamianych przez uvx), a nie pojedynczy obraz Dockera:

Okno terminala
# AWS — wybierz konkretny serwer awslabs, którego potrzebujesz (Python, przez uvx)
claude mcp add aws-api -- uvx awslabs.aws-api-mcp-server@latest
claude mcp add aws-core -- uvx awslabs.core-mcp-server@latest
# Przekazuj poświadczenia przez profil, nigdy klucze wpisane wprost:
# AWS_PROFILE=prod claude mcp add aws-api -- uvx awslabs.aws-api-mcp-server@latest
# Azure (npm)
claude mcp add azure -- npx -y @azure/mcp@latest
# Kubernetes (npm)
claude mcp add k8s -- npx -y kubernetes-mcp-server

W Cursorze i Codeksie te same serwery trafiają do .mcp.json (lub ustawień MCP w IDE) z identycznymi command/args. Po podłączeniu serwera AWS zapytanie „wylistuj instancje RDS na tym koncie wraz z wersjami silnika” zwraca prawdziwe dane, dzięki czemu refaktoryzacja agenta celuje w zasoby, które naprawdę istnieją.

W przypadku reguł pomiń przestarzały plik .cursorrules (Cursor go wycofał). Użyj .cursor/rules/iac.mdc dla Cursora oraz CLAUDE.md / AGENTS.md dla Claude Code i Codeksa:

# .cursor/rules/iac.mdc (CLAUDE.md / AGENTS.md dla Claude Code i Codex)
- Wyłącznie zdalny stan: backend S3 + tabela blokad DynamoDB. Nigdy stan lokalny.
- Przypinaj providery (~> 5.0) i przypinaj wersje silnika do aktualnie wspieranego wydania.
- Taguj każdy zasób etykietami Environment i ManagedBy.
- Żadnych zaszytych na sztywno bloków CIDR, regionów ani sekretów — używaj zmiennych i menedżera sekretów.
- Zaproponuj plan i poczekaj na akceptację przed jakimkolwiek apply.

Przepływ pracy: refaktoryzuj, zrecenzuj, wykonaj apply

Dział zatytułowany „Przepływ pracy: refaktoryzuj, zrecenzuj, wykonaj apply”

Niebezpieczny moment w IaC wspomaganym przez AI to luka między „agent napisał HCL” a „uruchomiłem apply”. Zamknij ją trzema krokami: zakreśl zakres refaktoryzacji, wymuś recenzję planu, a potem wykonaj apply za bramką wymagającą człowieka.

  1. Zrefaktoryzuj monolit na moduły. Wskaż agentowi konkretny plik i jawnie nazwij providery oraz backend, by dostać diff, który możesz recenzować moduł po module, zamiast przepisania od zera.

  2. Każ agentowi zrelacjonować plan. Niech uruchomi terraform plan i wyjaśni każdą linię ~ (aktualizacja w miejscu), -/+ (wymiana) i - (zniszczenie). Wymiany na zasobach stanowych (RDS, EBS) to miejsce, gdzie zaczynają się incydenty o trzeciej w nocy.

  3. Wykonaj apply za bramką. Nigdy nie pozwalaj agentowi wykonywać apply autonomicznie na prawdziwym koncie. Uruchom apply samodzielnie albo zabezpiecz go w CI za wymaganą recenzją.

Oto krok refaktoryzacji we wszystkich trzech narzędziach. To prompt jest elementem nośnym — narzędzia różnią się tylko tym, jak przekazujesz im plik i jak agent uruchamia plan.

W trybie Agent dodaj plik do kontekstu i pozwól mu edytować w nowych plikach modułów z checkpointami, dzięki czemu możesz cofnąć błędny podział:

@main.tf Refactor this into modules: network (VPC, subnets, NAT),
data (RDS, ElastiCache), and compute (ASG, ALB). Move every hardcoded
CIDR and region into variables.tf with sensible defaults. Add an S3
backend with a DynamoDB lock table in backend.tf. Tag every resource
with Environment and ManagedBy. Show me the module boundaries before
writing files.

Gdy zapisze pliki, poproś Cursora, by uruchomił terraform plan w zintegrowanym terminalu i podsumował zmiany. Zrób checkpoint przed zaakceptowaniem, dzięki czemu błędny podział podsieci to jedno kliknięcie do cofnięcia.

Ta sama pętla działa dla CloudFormation (aws cloudformation deploy --no-execute-changeset, by uzyskać change set, który agent wyjaśni) i Pulumi (pulumi preview zamiast terraform plan). Narzędzie się zmienia; dyscyplina „wyjaśnij diff, zanim dotkniesz konta” pozostaje ta sama.

Zestaw MCP dla AWS (awslabs/mcp) to dodatek o największej dźwigni: serwery aws-api i cost-analysis pozwalają agentowi czytać żywe zasoby i cenniki, dzięki czemu wykrywanie dryfu i dobór rozmiaru zasobów opierają się na Twoim prawdziwym koncie, a nie na założeniach. Serwery Azure i Kubernetes robią to samo dla tych platform.

Gdy potrzebujesz tylko jednozadaniowego wzbogacenia — powiedzmy, konwencji układu modułów Terraform z określonym zdaniem — Agent Skill jest lżejszy niż trwałe połączenie MCP. Skille instalują się jednym uniwersalnym poleceniem i działają w Claude Code, Cursorze i Codeksie:

Okno terminala
npx skills add <owner/repo>

Zasada kciuka: sięgaj po serwer MCP, gdy agent potrzebuje żywego, trwałego połączenia (odczyt konta, zapytanie o cennik); sięgaj po Skill, gdy chcesz po prostu wstrzyknąć wielokrotnego użytku konwencje lub listę kontrolną.

CloudFormation ma ten sam kształt awarii z innej strony: stos utknięty w UPDATE_ROLLBACK_FAILED zwykle wymaga continue-update-rollback z problematycznym zasobem w --resources-to-skip. Poproś agenta, by najpierw przeczytał zdarzenia stosu i wskazał zasób, który zablokował wycofanie, zanim go ruszysz.