Bosh sahifa Wiki Infrastructure as Code

Infrastructure as Code

Infrastructure as Code (IaC) — server, tarmoq, identity, database va boshqa infratuzilmani qo‘lda bosishlar bilan emas, mashina o‘qiydigan deklaratsiya yoki dastur kodi orqali boshqarish usuli. Kod versiya nazoratida saqlanadi, review va avtomatik pipeline orqali qo‘llanadi. IaC infratuzilmani takrorlanuvchi qiladi, lekin noto‘g‘ri kod ham katta miqyosda takrorlanishi mumkin.

Deklarativ va imperativ model

Deklarativ yondashuv desired state’ni bildiradi: “uchta instance va bitta private network bo‘lsin”. Tool joriy holat bilan farqni hisoblab, zarur amallarni bajaradi. Imperativ yondashuv esa “network yarat, so‘ng instance och” kabi qadamlarni yozadi.

Model Asosiy ifoda Xususiyat
Deklarativ Yakuniy holat Plan va reconciliationga qulay
Imperativ Amal ketma-ketligi Nozik workflow nazorati
Procedural DSL Kod orqali resurslar Abstraksiya va shartlar

Ko‘p vosita amalda ikkala elementni birlashtiradi. Deklarativ resurs ichida provisioning script imperativ bo‘lishi mumkin.

Resurs grafigi

IaC tool resurslar orasidagi dependency’ni graph sifatida quradi. Subnet yaratilmasdan unga instance ulanmaydi; mustaqil resurslar parallel yaratilishi mumkin. Explicit reference dependency’ni aniq qiladi, sun’iy ketma-ketlik esa parallelismni kamaytiradi.

Provider cloud yoki xizmat API’si bilan gaplashadi. Resource block desired atributlarni beradi, data source esa mavjud tashqi ma’lumotni o‘qiydi. Provider versioni mahkamlanmasa upgrade behaviorni o‘zgartirishi mumkin.

State

Ba’zi IaC vositalari konfiguratsiyadagi logical resource bilan real API obyektini bog‘lash uchun state saqlaydi. State resource ID, atribut va dependency’larni o‘z ichiga olishi mumkin. U maxfiy qiymatlarni ham saqlab qolishi ehtimoli bor, shuning uchun shifrlash va access zarur.

Remote state jamoa uchun yagona authoritative nusxa va locking beradi. Ikki pipeline bir vaqtda apply qilsa race va yo‘qotilgan update yuz berishi mumkin. Lock release jarayoni crashdan keyin ehtiyotkor bajariladi.

Plan va apply

Plan desired konfiguratsiya, state va real provider ma’lumotidan taxminiy o‘zgarishlar ro‘yxatini tuzadi. Create, update, replace va destroy alohida ko‘rinadi. Review critical resource o‘chishi, public exposure yoki region almashishini aniqlaydi.

Plan kelajakni mutlaq kafolatlamaydi. Plan va apply orasida tashqi holat o‘zgarishi, API defaulti yoki unknown qiymat natijani farqlashi mumkin. Apply output va post-deployment policy qayta tekshiriladi.

Modul va muhitlar

Module qayta ishlatiladigan resurs to‘plamini encapsulate qiladi. Uning input, output va version contracti bo‘ladi. Juda universal modul yuzlab option bilan tushunarsiz bo‘lishi, copy-paste esa siyosatni parchalashi mumkin.

Development va production bir module’dan turli parametr bilan foydalanadi. Ularni bitta shared state’da aralashtirish blast radius’ni oshiradi. Account, project, subscription va state boundary muhit izolatsiyasiga mos belgilanadi.

Xavfsizlik

Pipeline identity’siga faqat boshqaradigan resurslar uchun ruxsat beriladi. Plan yaratish va apply qilish huquqi ajratilishi, production apply approval talab qilishi mumkin. Static cloud key CI secretida uzoq saqlanmasdan workload identity yoki qisqa token ishlatiladi.

Policy as Code public storage, ochiq firewall, shifrlanmagan database yoki noto‘g‘ri tagni plan vaqtida rad etadi. Secret kodga literal yozilmaydi; secret manager reference’i ishlatiladi. State va plan artefakti ham sensitive deb qaraladi.

Drift va import

Infratuzilma console yoki boshqa tool bilan qo‘lda o‘zgarsa drift paydo bo‘ladi. Refresh va plan farqni ko‘rsatadi. Avtomatik qaytarishdan oldin emergency o‘zgarish sababi va uni kodga kiritish kerakligi tekshiriladi.

Oldindan mavjud resource import orqali state’ga bog‘lanadi, so‘ng unga mos konfiguratsiya yoziladi. Import resource yaratmaydi va barcha atributni avtomatik sifatli kodga aylantirmasligi mumkin.

Bog‘liq tushunchalar

Declarative configuration, Provider, Resource, Remote state, Plan, Apply, Configuration drift