A repó vázának létrehozásától az OpenTofu modulok elkészítésén át a konvenciók betartatásáig ismerj meg 5 Kiro-munkafolyamatot az IaC-fejlesztéshez.
Az OpenTofu modulok előállításától és a dokumentációk elkészítésétől kezdve a tesztelés automatizálásáig az AI-alapú fejlesztői eszközök egyre fontosabb szerepet töltenek be az Infrastructure as Code világában. Ahhoz azonban, hogy valódi értéket teremtsenek, nem elegendő néhány ügyesen megfogalmazott prompt. Jól felépített folyamatokra és konzisztens struktúrára van szükség.
Ebben a cikkben öt gyakorlati eszközt és folyamatot mutatunk be, amelyek segítségével a Kiro hatékonyan integrálható a mindennapi IaC fejlesztésbe. Legyen szó egy új projekt felépítéséről, OpenTofu modulok generálásáról vagy névkonvenciók betartásáról egy többfiókos landing zone környezetben, ezek a módszerek segítenek abban, hogy többet hozhass ki a Kiro-ból, miközben a kódod tiszta, jól dokumentált és hosszú távon is karbantartható marad.
Kiro alapfogalmak
A Kiro egy AWS által fejlesztett, mesterséges intelligenciával támogatott IDE, amely jóval többet nyújt az egyszerű kódgenerálásnál. A steering file-ok, hook-ok, specifikációk (specs) és skill-ek segítségével egy olyan rendszert ad, amellyel egyedi fejlesztési szabványok alakíthatók ki, automatizálhatók az ismétlődő feladatok és végig biztosítható a konzisztencia az infrastruktúrakód teljes életciklusa során.
Kiro szolgáltatások összehasonlítása
Az ebben a cikkben ismertetett tippeken felül ezt a nyilvános skill-t az AWS API és a Terragrunt Docs MCP szerverekkel együtt használjuk.
1. A projekt vázának felhúzása
Egy új IaC projekt indítása általában mindig ugyanazoknak az alapfájloknak a másolgatásával kezdődik: mappastruktúra, gyökérkonfigurációk, CI pipeline-ok és pre-commit hookok. Ez önmagában nem bonyolult feladat, viszont időigényes, monoton, és ha manuálisan végezzük, könnyű is hibázni benne.
Ennek megoldására egy felhasználói szintű (user-level) steering fájlt használunk. Az ilyen steering fájlok a ~/.kiro/steering/ könyvtárban találhatók, és minden workspace-re érvényesek, nemcsak egyetlen projektre. A mi konfigurációnk olyan utasításokat tartalmaz, amelyek egy helyi sablonkönyvtárra irányítják a Kirót, ahol a szabványos projektszerkezetünk található.
Amikor megnyitunk egy új workspace-t és megkérjük a Kirót a projekt inicializálására, az beolvassa a steering fájlt, átmásolja a szükséges fájlokat a sablonkönyvtárból, majd automatikusan létrehozza a teljes projektvázat. A mappastruktúra, a mise.toml, a root.hcl, a project.hcl, a GitHub Actions workflow-k és a pre-commit konfigurációk egyetlen lépésben kerülnek a helyükre, már a kezdetektől követve a konvenciókat.
Ennek legnagyobb előnye a következetesség. Minden új projekt ugyanarról az alapokról indul, és nem kell fejben tartani, hogy mely fájlokat kell átmásolni vagy mely értékeket kell módosítani. Ha időközben változik a projekt-sablonunk, elegendő azt egy helyen frissíteni, és minden jövőbeli projekt automatikusan az új verzióval indul.
inclusion
manual
Terragrunt Project Template
When asked to scaffold a new Terragrunt project, copy the structure from ~/templates/terragrunt/ into the current workspace.
A legtöbb esetben, amikor egy projekthez új infrastruktúrát építünk ki, szívesen támaszkodunk már meglévő, nyilvános modulokra. Így nem kell saját modulokat fejlesztenünk és karbantartanunk, hanem olyan megoldásokra építhetünk, amelyek már bizonyítottak éles környezetben.
Vannak azonban olyan esetek, amikor jelentős testreszabásra és speciális erőforrásokra van szükség. Ilyenkor egyedi modult adunk hozzá az infrastruktúránkhoz. Az OpenTofu-modulok létrehozása viszonylag egyszerű és ismétlődő feladat, ezért ideális jelölt a mesterséges intelligenciával támogatott automatizálásra. Ahelyett, hogy manuálisan készítenénk el a modulstruktúrát, a változókat, a kimeneteket, a dokumentációt és a teszteket, a Kiro segítségével automatizálhatjuk a sablonjellegű részeket, és a figyelmünket azokra a részletekre fordíthatjuk, amelyek épp az adott projekt szempontjából fontosak és egyediek.
A folyamat megbízhatóbbá tétele érdekében két komponenst vezettünk be:
1. Kiro steering file, amely tartalmazza az összes irányelvet és konvenciót
Bár a Skill, amit alkalmazunk, már magában foglalja az IaC fejlesztéséhez kapcsolódó best practice-eket, fenntartunk egy külön steering file-t is, ami a saját követelményeit és szabványait definiálja. Ez biztosítja, hogy a generált kód ne csak az általános IaC-ajánlásoknak feleljen meg, hanem a belső szabványainknak, elnevezési konvencióinknak és architekturális irányelveinknek is.
2. Kiro hook a folyamat gyors indításához
Ez az egyedi hook úgy van konfigurálva, hogy csak manuális indításkor fusson le. Ahelyett, hogy egy hosszú és részletes promptot tartalmazna, a steering file-ban meghatározott konvenciókra hivatkozik. Ennek az az előnye, hogy a hook karbantartása egyszerűbbé válik: a kódolási szabványok vagy projektkövetelmények változásait csak egyetlen helyen kell frissíteni. Emellett biztosítja, hogy az ellenőrzések mindig a legfrissebb irányelvekkel legyenek összhangban, anélkül, hogy magát a hookot módosítani kellene.
Kiro steering:
inclusion
manual
Module Creation Workflow
When creating a fully implemented OpenTofu module, follow this workflow.
Steps
Ask: "What should this module do?" — get a description of AWS resources and behavior
Ask for a module name (kebab-case, validate against ^[a-z][a-z0-9]*(-[a-z0-9]+)*$, no conflicts with existing modules/ dirs)
Create all 5 files in modules/{name}/
Run tofu fmt on the module directory
Ask if deployment wiring is needed
File Generation Rules
versions.tf
Use the standard provider pinning block from opentofu.md steering
variables.tf
All variables needed for the resources
Always include tags variable (map(string), default {})
Add validation blocks for constrained inputs (CIDRs, enums, ranges)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
"description": "Creates a fully implemented custom OpenTofu module with real resource definitions based on user requirements.",
"version": "1",
"when": {
"type": "userTriggered"
},
"then": {
"type": "askAgent",
"prompt": "Follow the module-creation steering file (#module-creation.md) to create a fully implemented OpenTofu module. Start by asking what the module should do."
Ahogy egy projekt növekszik, egyre nehezebb fenntartani a konvenciók következetességét. A Kiro segítségével ezeket a konvenciókat is tárolhatjuk közvetlenül steering file-okban. A Kiro arra is képes, hogy elemezzen egy meglévő kódbázist és kinyerje belőle a megfelelő szabályokat. Megvizsgálja a már használt mintákat, például a változók elnevezését, a tag-struktúrákat és a modulok felépítését, majd ezekből egy Markdown dokumentumot készít, amely szabályként rögzíti őket.
Terragrunt is the deployment orchestrator. It handles remote state, provider generation, and multi-account role assumption.
Agent Instructions
Always use terragrunt CLI commands — never call tofu directly for deployment
When running commands across all modules: terragrunt run-all <command>
When targeting a single module: run terragrunt <command> from within its live/ directory
Terragrunt version managed by mise (terragrunt = "1.0.0")
Config Hierarchy
project.hcl — single source of truth for org-wide values (project name, account IDs, emails, org/OU IDs)
root.hcl — remote state config (S3 bucket naming: {project}-{env}-terraform-state) and provider generation with role assumption (terragrunt-execution-role)
account.hcl — account name and AWS account ID only
env.hcl — all module configuration values for a given account+region scope; includes skip_module map and tags block
Module Deployment Pattern
Each module deployment is a thin terragrunt.hcl that:
Sources either a local module (../../../../modules/{name}) or external git module with pinned ref
Includes root.hcl (for backend/provider)
Includes env.hcl with expose = true and merge_strategy = "no_merge"
Passes inputs from include.env.locals.*
Uses exclude block with include.env.locals.skip_module.{name} for conditional deployment
When Writing terragrunt.hcl Files
Always include root.hcl for backend/provider
Include env.hcl with expose = true and merge_strategy = "no_merge"
Pass inputs from include.env.locals.*
Add exclude block referencing skip_module map
Source local modules as ../../../../modules/{name} or external with pinned ref
Skip Module Pattern
Each env.hcl defines a skip_module map with boolean values per module. Set to true to exclude a module from deployment without removing its directory:
skip_module={
vpc =false
s3 =true# skipped
}
External Module References
Pin external modules with exact git refs (no latest, no branch names):
S3 state buckets: {project}-{account}-terraform-state
Variable names in env.hcl: snake_case, prefixed by module context (vpc_cidr, budget_limit_amount)
State Locking
This project uses S3 native state locking (use_lockfile = true) instead of DynamoDB. This requires OpenTofu >= 1.10 (we use 1.11.2). S3 creates a .tflock file next to the state file using conditional writes — no DynamoDB table needed.
Do NOT use dynamodb_table in backend config — it is deprecated
Do NOT create DynamoDB lock tables for new accounts
If migrating an existing account from DynamoDB locking, remove the dynamodb_table argument and add use_lockfile = true
Tagging Strategy
All resources must be tagged. Tags are defined once in env.hcl and passed to modules via inputs.
Required Tags
Every resource must include these tags (no exceptions):
Tag
Value
Description
AccountType
platform or workload
Distinguishes shared infra accounts from workload accounts
CreatedBy
terragrunt
Always this value for IaC-managed resources
Environment
{account_name}
Matches the account name (e.g., production, development)
Owner
{project}
Project name from project.hcl
Project
{project}
Project name from project.hcl
Version
{project_version}
Semantic version from project.hcl
Tag Block Template (in env.hcl)
tags={
AccountType ="platform"# or "workload"
CreatedBy ="terragrunt"
Environment ="${local.env}"
Owner ="${local.project}"
Project ="${local.project}"
Version ="${local.project_version}"
}
Agent Instructions for Tagging
When creating a new env.hcl, always include the full tags block — copy from existing env files
When creating a new module, accept a tags variable of type map(string) and apply it to all resources
Never hardcode tag values inside modules — they must come from env.hcl via inputs
AccountType must be "platform" for shared accounts (management, security, shared-services, monitoring) and "workload" for application accounts (development, production, sandbox)
Never add tags that contain sensitive info (account IDs, secrets, internal URLs)
If a resource supports tags_all (e.g., AWS provider default tags), prefer passing tags via the provider; otherwise pass explicitly per resource
Module Variable Pattern
Every module that creates taggable resources must include:
variable"tags" {
description="Tags to apply to all resources"type=map(string)
default={}
}
# Plan all modules in an account/region
terragrunt run-all plan
# Apply a single module
terragrunt apply # (from within live/{account}/{region}/{module}/)# Format all HCL
terragrunt run-all fmt
# Validate all modules
terragrunt run-all validate
Versioning
Semantic versioning via semantic-release
Conventional commits required (enforced by commitizen)
Korábban a legjobb gyakorlatok ellenőrzését általában külső eszközök, például a checkov vagy a tfsec végezték. Természetesen ezek használatát nem hagytuk el. Továbbra is megbízható eszközök lokális használatra és CI-folyamatokba egyaránt. Ugyanakkor most már a Kiro képességeit is kihasználjuk.
Például úgy, hogy hook-okat hoztunk létre. Amikor egy OpenTofu vagy Terragrunt fájlt módosítunk, a hook megkéri az agentet, hogy vizsgálja át a változtatásokat az ismert bevált gyakorlatok alapján. Ez olyan dolgokat foglal magában, mint például:
túlságosan nyitott ingress szabályok security groupoknál
hiányzó lifecycle policy-k vagy backup konfigurációk
A hookok egy askAgent műveletet használnak, amely egy prompton keresztül hivatkozik a steering file-jainkra és a Terraform skillre. Ez nem helyettesíti a CI-ben futó valódi security scanereket, de segít időben kiszűrni a nyilvánvaló hibákat, és megakadályozza, hogy olyan kód kerüljön commitálásra, amit később javítani kellene.
Az alábbi egy egyszerű példa. Ez a hook minden mentéskor automatikusan ellenőrzi a fájlokat a bevált gyakorlatok alapján:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
"description": "Reviews saved Terraform and Terragrunt files against IaC best practices, checking for security issues, missing encryption, overly permissive IAM, missing tags, and other common mistakes.",
"version": "1",
"when": {
"type": "fileEdited",
"patterns": [
"**/*.tf",
"**/*.hcl"
]
},
"then": {
"type": "askAgent",
"prompt": "Review the saved file against IaC best practices. Check for:\n- Missing encryption at rest (S3, EBS, RDS, DynamoDB)\n- Overly permissive IAM policies (wildcard actions or resources)\n- Security groups with wide-open ingress (0.0.0.0/0 on sensitive ports)\n- Missing tags (all resources must have tags applied via var.tags)\n- Missing lifecycle policies or backup configurations\n- Hardcoded values that should be variables\n- Resources without descriptions on variables/outputs\n- Missing validation blocks on constrained inputs\n\nFollow the project's OpenTofu and Terragrunt conventions from steering. If issues are found, list them concisely with suggested fixes. If the file looks good, say so briefly."
A fentebbi példát aktív fejlesztés közben viszont nem ajánlott így alkalmazni, mert minden mentésnél lefut, és így túl sok tokent fogyaszt.
5. Dokumentáció
A dokumentáció az első dolog, ami elavul, amikor az infrastruktúra gyorsan változik. A modulok README-jei könnyen elavulnak, a változók leírásai nem követik a módosításokat, és az architekturális döntések gyakran csak valakinek a fejében maradnak meg.
A Kiro-t arra használjuk, hogy a dokumentációt szinkronban tartsuk a kóddal két megközelítés kombinálásával:
Először egy hook segítségével, amely akkor fut le, amikor a modul fájljai módosulnak. Amikor a main.tf, variables.tf vagy outputs.tf fájlok változnak, a hook automatikusan lefuttatja a terraform-docs-ot és újragenerálja a modul README-jét. Ez biztosítja, hogy a változók leírásai, típusai, alapértékei és kimenetei mindig naprakészek legyenek manuális beavatkozás nélkül.
Másodszor, a magasabb szintű dokumentációhoz közvetlenül az agentet használjuk. Egy jelentősebb módosítás után megkérjük a Kiro-t, hogy dokumentálja, mi történt és miért. Mivel a steering file-ok és az éppen módosított fájlok révén teljes kontextussal rendelkezik a kódbázisról, az így létrehozott dokumentáció nem általános sablon, hanem pontos és specifikus leírás.
A két megközelítés együtt biztosítja, hogy a dokumentáció mindkét szinten naprakész maradjon: a modulok technikai dokumentációja (ami automatikusan generálódik) és az emberi olvasásra szánt, magyarázó jellegű leírások (amelyek kontextus alapján készülnek).
Kérdésed van? Írj nekünk és mi segítünk megtalálni a számodra ideális megoldást.