Terraform — infratuzilmani deklarativ konfiguratsiya orqali yaratish va boshqarishga mo‘ljallangan Infrastructure as Code vositasi. U virtual mashina, network, storage, DNS, database va boshqa resurslarni provider APIlari orqali boshqaradi.
Terraform foydalanuvchiga yakuniy kerakli holatni yozish imkonini beradi. Vosita joriy infratuzilma bilan konfiguratsiyani solishtirib, kerakli o‘zgarishlar rejasini yaratadi.
Infrastructure as Code
Infrastructure as Code infratuzilma ta’rifini version control’da saqlanadigan kodga aylantiradi.
Afzalliklari:
- o‘zgarishlar tarixi;
- code review;
- takroriy environment;
- avtomatlashtirilgan tekshiruv;
- dokumentatsiyaga yaqin konfiguratsiya;
- qo‘lda yaratilgan resurslarni kamaytirish.
Kod mavjudligi infratuzilmani avtomatik xavfsiz yoki to‘g‘ri qilmaydi. Review va policy talab qilinadi.
Deklarativ model
Terraform’da foydalanuvchi “qanday buyruqlar bajarilsin”dan ko‘ra “qanday resurslar mavjud bo‘lsin”ni yozadi.
Masalan:
ikki application server
bitta private network
bitta database
Terraform dependency graph orqali yaratish tartibini aniqlaydi.
Provider
Provider Terraform va tashqi platforma APIlari orasidagi adapter.
Provider resource va data source turlarini taqdim etadi.
Misollar:
- cloud platforma;
- DNS;
- Kubernetes;
- monitoring;
- source control;
- SaaS service.
Provider versiyasi pin qilinadi, chunki schema va xatti-harakat o‘zgarishi mumkin.
Resource
Resource boshqariladigan infratuzilma obyektini ifodalaydi.
Misollar:
- virtual machine;
- subnet;
- firewall rule;
- load balancer;
- database instance;
- object storage bucket.
Resource block argumentlari kerakli holatni belgilaydi.
Data source
Data source mavjud, lekin joriy konfiguratsiya tomonidan boshqarilmaydigan ma’lumotni o‘qiydi.
Masalan:
Data source resource yaratmaydi, faqat query qiladi.
State
Terraform state faylida konfiguratsiyadagi resource bilan real platformadagi obyekt o‘rtasidagi bog‘lanishni saqlaydi.
State ichida:
- resource ID;
- attribute;
- dependency;
- metadata;
- ayrim maxfiy qiymatlar
bo‘lishi mumkin.
State yo‘qolsa yoki buzilsa boshqaruv qiyinlashadi.
Remote state
Jamoaviy ishlashda state remote backend’da saqlanadi.
Talablar:
- encryption;
- access control;
- locking;
- versioning;
- backup;
- audit.
State repositoryga oddiy fayl sifatida qo‘shilmaydi, ayniqsa maxfiy qiymatlar mavjud bo‘lsa.
State lock
Bir vaqtning o‘zida ikki kishi apply qilsa state va infratuzilma nomuvofiq bo‘lishi mumkin.
Lock parallel yozuvni cheklaydi.
Lock qolib ketganda uni majburan ochishdan oldin boshqa apply haqiqatan tugaganini tekshirish kerak.
Plan
plan joriy state va konfiguratsiya asosida rejalashtirilgan o‘zgarishlarni ko‘rsatadi.
Natijada:
- create;
- update;
- replace;
- destroy
amallari ko‘rinadi.
Plan code review va approval uchun muhim.
Ammo plan va apply orasida tashqi holat o‘zgarsa yakuniy amallar farq qilishi mumkin.
Apply
apply rejalashtirilgan o‘zgarishlarni provider APIlari orqali bajaradi.
- partial failure;
- timeout;
- rate limit;
- permission;
- provider xatosi
bilan to‘xtashi mumkin.
Shundan keyin state va real resurslar tekshiriladi.
Dependency graph
Resource bir-birining attribute’iga murojaat qilsa Terraform dependency’ni avtomatik aniqlaydi.
Masalan, server subnet ID’dan foydalansa subnet oldin yaratiladi.
Yashirin dependency explicit ko‘rsatilishi mumkin.
Keraksiz dependency parallelizmni kamaytiradi.
Module
Module qayta ishlatiladigan Terraform konfiguratsiyasi.
U:
ga ega.
Module network, application stack yoki database kabi standart komponentni ifodalashi mumkin.
Public module ishlatilganda source va versiya tekshiriladi.
Variable
Variable environmentga mos qiymatlarni parametr qiladi.
Misollar:
Maxfiy qiymat variable orqali berilsa ham state yoki logda ko‘rinishi mumkin. Secret handling alohida tekshiriladi.
Output
Output yaratilgan resurs ma’lumotini chiqaradi.
Masalan:
- load balancer address;
- database endpoint;
- network ID.
Sensitive output terminalda yashirilishi mumkin, ammo state ichida saqlanishi ehtimoli bor.
Import
Avval qo‘lda yaratilgan resource Terraform state’iga import qilinadi.
Importning o‘zi to‘liq configuration yaratmasligi mumkin.
Importdan keyin:
moslashtiriladi.
Drift
Real infratuzilma Terraform’dan tashqarida o‘zgarsa drift yuz beradi.
Keyingi plan farqni ko‘rsatadi.
Terraform:
- tashqi o‘zgarishni qaytarishi;
- configga moslashtirishni talab qilishi;
- resource’ni almashtirishi
mumkin.
Lifecycle
Resource lifecycle sozlamalari:
- destroy’dan himoya;
- almashtirishdan oldin yangi yaratish;
- ayrim attributdagi tashqi o‘zgarishni e’tiborsiz qoldirish
uchun ishlatiladi.
Bunday qoidalar noto‘g‘ri qo‘llansa driftni yashirishi mumkin.
Workspace
Workspace bitta konfiguratsiya uchun alohida state instance’lari yaratadi.
U kichik environment farqlari uchun ishlatilishi mumkin.
Katta va security jihatdan alohida environmentlar uchun alohida account, backend va konfiguratsiya kuchliroq isolation beradi.
Replace amali
Ayrim resource attributini joyida yangilab bo‘lmaydi. Terraform eski resource’ni yo‘q qilib yangisini yaratishni rejalashtiradi. Plan ichidagi replace production downtime yoki data yo‘qolishi nuqtai nazaridan alohida ko‘rib chiqiladi.
Taint o‘rniga boshqariladigan almashtirish
Buzilgan resource’ni keyingi apply’da qayta yaratish uchun explicit replace ko‘rsatmasi berilishi mumkin. Bu config’ni o‘zgartirmasdan aniq resource lifecycle’ini boshqaradi.
Policy as Code
CI plan faylini policy bilan tekshirishi mumkin. Misollar:
- public storage taqiqlangan;
- barcha disk encrypted;
- majburiy taglar mavjud;
- juda katta instance ruxsatsiz yaratilmaydi.
Policy reviewni almashtirmaydi, takroriy qoidalarni avtomatlashtiradi.
Destroy
destroy state’dagi boshqariladigan resource’larni olib tashlaydi. Production backend, workspace va account aniq tekshiriladi. Prevent-destroy yoki approval muhim ma’lumotli resurslarni tasodifiy o‘chirishdan himoya qiladi.
Bog‘liq tushunchalar
Infrastructure as Code, Provider, Resource, Data source, State, Remote state, Plan, Apply, Module, Drift, Dependency graph