Kod kimi infrastruktur (IaC) nədir və əl ilə idarə olunan serverlər niyə miqyaslanmır?
Hər infrastruktur eyni cür başlayır: kimsə bulud konsoluna daxil olur, bir neçə formanı doldurur və server yaradır. Bu, işləyir. Altı ay sonra isə həmin serveri yenidən qurmaq lazım gəlir — nasazlıqdan sonra və ya ona uyğun test mühiti yaratmaq üçün — və heç kim ilk dəfə klikləyib seçilmiş hər parametri tam xatırlamır. Kod kimi infrastruktur (Infrastructure as Code) məhz belə ssenarini qeyri-mümkün etmək üçün mövcuddur.
Əsas ideya
Kod kimi infrastruktur, qısaca IaC, o deməkdir ki, serverləriniz, şəbəkələriniz, verilənlər bazalarınız və digər bulud resurslarınız veb-konsolda əl ilə konfiqurasiya edilmək əvəzinə konfiqurasiya fayllarında təsvir olunur və tətbiq kodu kimi versiya nəzarəti sisteminə əlavə edilir. «Create instance» düyməsini basıb açılan siyahılardan parametrlər seçmək əvəzinə, nəyin mövcud olmalı olduğunu dəqiq təsvir edən fayl yazırsınız, alət isə həmin faylı oxuyub real infrastrukturu ona uyğunlaşdırır.
Bunun üçün ən geniş istifadə olunan alət eyni yanaşma ilə bütün əsas bulud provayderlərində işləyən Terraform-dur; hər böyük bulud provayderinin öz nativ variantı da var (AWS CloudFormation, Azure Resource Manager şablonları). Alətdən asılı olmayaraq əsas ideya eynidir: həqiqət mənbəyi hazırda konsolda təsadüfən mövcud olan vəziyyət deyil, fayldır.
Bu, göründüyündən niyə daha vacibdir
- Təkrarlana bilmə. Eyni test mühiti lazımdır və ya fəlakətdən sonra canlı mühiti bərpa etmək lazımdır? Eyni konfiqurasiyanı yenidən icra edin. Bu, hər parametri xatırladığınıza ümid deyil — tərifinə görə zəmanətdir.
- İnfrastruktur dəyişiklikləri üçün kod icmalı. Firewall qaydasının və ya verilənlər bazasının ölçüsünün dəyişdirilməsi heç kimin görmədiyi konsol klikinə deyil, tətbiq olunmazdan əvvəl komanda yoldaşının nəzərdən keçirdiyi pull request-ə çevrilir — eynilə tətbiq kodundakı dəyişiklik kimi.
- Real audit izi. Versiya nəzarəti sistemi nəyin, nə vaxt və kim tərəfindən dəyişdirildiyini dəqiq göstərir. «Bu security group niyə bütün internetə açıqdır» sualı arxeoloji qazıntıya deyil, sadə git blame əmrinə çevrilir.
- Uyğunsuzluğun (drift) aşkarlanması. IaC alətləri konfiqurasiya faylını real işləyən vəziyyətlə müqayisə edib fərqləri göstərə bilər — kiminsə birbaşa konsolda etdiyi, fayllara heç vaxt qayıtmayan və əks halda ya səssizcə üzərinə yazılacaq, ya da, daha pisi, getdikcə daha çox fərqlənəcək əl ilə «tez düzəlişi» aşkar edir.
Komandalar adətən haradan başlayır
Heç kim ilk gündən bütün infrastrukturunu Terraform-da yazmır və bu, normaldır. Geniş yayılmış, ağlabatan yol itirilməsi ağrılı və ya əl ilə yenidən qurulması uzun çəkən hissələrdən — şəbəkə quruluşu, verilənlər bazası, əsas hesablama resursları — başlamaq və yeni problemlər üzə çıxdıqca əhatəni zamanla genişləndirməkdir. Məqsəd konsoldan əl ilə istifadəni hərfi mənada sıfra endirmək deyil; məqsəd odur ki, itirməyə həqiqətən imkanınız olmayan və ya etibarlı şəkildə təkrar yaratmalı olduğunuz resurslar yalnız kiminsə nəyi kliklədiyi barədə xatirəsində deyil, faylda təsvir olunsun.
Diqqət edilməli tələ
IaC-nin tətbiqi ən çox alətlər üzündən deyil, səssizcə «çürüyən» yarımçıq tətbiq üzündən uğursuz olur. Komanda ilkin quruluş üçün Terraform yazır, sonra insident zamanı təcili düzəlişləri birbaşa konsolda edir (bu, həmin an çox vaxt düzgün qərardır) və həmin dəyişiklikləri fayllara əks etdirmək üçün heç vaxt geri qayıtmır. Altı ay sonra fayllar artıq reallığa uyğun gəlməyən infrastrukturu təsvir edir və heç kim onlara tam etibar etmir — bu isə IaC-nin həll etməli olduğu problemin məhz özüdür. «Fayllar reallığı təsvir edir» prinsipinə arzu kimi deyil, daimi qayda kimi yanaşmaq onu həqiqətən davamlı edən şeydir.
İnfrastrukturu əvvəldən bu şəkildə qurmaq Burncode-da gördüyümüz bulud və DevOps işlərində standart təcrübədir — məhz bu, mühiti yenidən qurmağı, miqyaslandırmağı və ya başqa mühəndisə təhvil verməyi təxmin oyunu deyil, adi, sakit bir işə çevirir.