Bosh sahifa Wiki Terraform

Terraform

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:

Provider versiyasi pin qilinadi, chunki schema va xatti-harakat o‘zgarishi mumkin.

Resource

Resource boshqariladigan infratuzilma obyektini ifodalaydi.

Misollar:

Resource block argumentlari kerakli holatni belgilaydi.

Data source

Data source mavjud, lekin joriy konfiguratsiya tomonidan boshqarilmaydigan ma’lumotni o‘qiydi.

Masalan:

  • mavjud network IDsi;
  • image identifikatori;
  • account ma’lumoti;
  • DNS zone.

Data source resource yaratmaydi, faqat query qiladi.

State

Terraform state faylida konfiguratsiyadagi resource bilan real platformadagi obyekt o‘rtasidagi bog‘lanishni saqlaydi.

State ichida:

bo‘lishi mumkin.

State yo‘qolsa yoki buzilsa boshqaruv qiyinlashadi.

Remote state

Jamoaviy ishlashda state remote backend’da saqlanadi.

Talablar:

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.

Apply:

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:

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