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.
Co z tego wyniesiesz
Dział zatytułowany „Co z tego wyniesiesz”- 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
Najpierw skonfiguruj reguły i serwery MCP
Dział zatytułowany „Najpierw skonfiguruj reguły i serwery MCP”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:
# AWS — wybierz konkretny serwer awslabs, którego potrzebujesz (Python, przez uvx)claude mcp add aws-api -- uvx awslabs.aws-api-mcp-server@latestclaude 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-serverW 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.
-
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.
-
Każ agentowi zrelacjonować plan. Niech uruchomi
terraform plani 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. -
Wykonaj apply za bramką. Nigdy nie pozwalaj agentowi wykonywać apply autonomicznie na prawdziwym koncie. Uruchom
applysamodzielnie 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 hardcodedCIDR and region into variables.tf with sensible defaults. Add an S3backend with a DynamoDB lock table in backend.tf. Tag every resourcewith Environment and ManagedBy. Show me the module boundaries beforewriting 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.
Claude Code edytuje pliki i uruchamia plan w jednej sesji terminala, co jest idealne dla pętli recenzji:
claude "Refactor main.tf into network, data, and compute modules.Move hardcoded CIDRs and regions into variables. Add an S3 backendwith DynamoDB state locking. Then run 'terraform plan' and walk methrough every resource that will be replaced or destroyed — I havenot approved an apply."Ponieważ sam uruchamia plan i czyta jego wynik, oznaczy na przykład, że zmiana engine_version w RDS wymusza wymianę — zanim przekonasz się o tym w bolesny sposób.
Użyj Codex CLI z bramką akceptacji, by nie mógł wykonać apply bez Ciebie, albo przekaż refaktoryzację do Codex Cloud na worktree, żeby dostać PR do recenzji:
codex --ask-for-approval on-request \ "Split main.tf into network/data/compute modules, extract CIDRs and regions into variables, add an S3 + DynamoDB locked backend, then run terraform plan and explain every replace/destroy. Do not apply."W przypadku większych repozytoriów odpal go w Codex Cloud na worktree gałęzi — produkuje podział na moduły jako pull request, który recenzujesz jak każdy inny, trzymając apply za istniejącymi regułami ochrony gałęzi.
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.
Prompty gotowe do skopiowania
Dział zatytułowany „Prompty gotowe do skopiowania”MCP i Skille, które zmieniają ten przepływ pracy
Dział zatytułowany „MCP i Skille, które zmieniają ten przepływ pracy”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:
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ą.
Kiedy to się sypie
Dział zatytułowany „Kiedy to się sypie”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.