Salam dostlar. Bu qısa məqalədə sizə Terraform haqqında bəhs edəcəm. Beləliklə,
Terraform nədir?
Terraform (infrastructure as code (IaC), kod kimi infrastruktur), "HashiCorp" tərəfindən yaradılan, fiziki resursları-yəni infrastruktur tələbləri və asıllığını kod şəklində (IaC) təmin edən, səmərəli, təhlükəsiz və sürətli şəkildə yazma, quraşdırma, dəyişiklik, təkmilləşdirmə, kodlaşdırma, versiya etmə, avtomatlaşdırma, yoxlanış, və s. imkanı verən, (open source) açıq qaynaq kodlu bir avtomatlaşdırma (alət/tool) vasitəsidir. Beləliklə, (IaC) kod kimi infrastruktur adlanan bu avtomatlaşdırma sayəsində, bir neçə dəqiqə ərzində terraform ilə bütün infrastrukturu qaldırmaq, eləcə də sistem, şəbəkə, saxlanc (storage) və s. bütün əməliyyat və tənzimləmələrin (ümumiyyətlə bütün infrasturkturun) mərkəzdən idarə edilməsini həyata keçirmək mümkün olur. Lisenziyası MPL (Mozilla Public License) əsaslı olan və "Go" proqramlaşdırma dilində yazılan Terraform, 2014-cü ildə yaradılmışdır və "Windows", "Linux", "MacOs", "FreeBsd", "OpenBsd", "Solaris" əməliyyat sistemlərini dəstəkləyir. Terraform açıq mənbəli olduğundan, "developer"-lər hər zaman yeni "plugin"-lər yazaraq və ya mövcud "plugin"-lərin fərqli versiyalarını tərtib edərək, alətin (tool-un) faydalılığını daha da genişləndirə bilirlər. Terraform arxitekturası aşağıdakı vacib komponentlərdən ibarətdir: "Terraform Core", "Terraform Plugins" və "Upstream APIs".
- Terraform Core - resurslara aid qrafikin qurulması və planın icrası, idarəetmə və konfiqurasiya fayllarının oxunması və interpolasiyasına nəzarət edir. Yeri gəlmişkən qeyd edim ki, Terraform konfiqurasiya faylları HCL (Hashicorp Configuration Language) konfqiruasiya dilinin köməyi ilə yazılmışdır. Terraform, asılılıqların idarə edilməsi üçün müasir qraf nəzəriyyəsinə çox güvənir. TC (Terraform Core) tərtib edilmiş ikili fayllardan ibarətdir ki, həmin ikili fayllar planlaşdırma və tətbiqetmə mərhələsində "remote procedure call" interfeysi (RPC) vasitəsilə plugin-lərlə əlaqənin qurulmasını həyata keçirir. RPC interfeysilə bağlı məlumatlı deyilsinizsə, onda fərz edək ki, plugin bir server-dir və Terraform Core isə bu serverə API sorğuları edir. Terraform Core ayrıca olaraq aşağıdakı üsülları da həyata keçirir: Diff (fərq) - istədiyiniz vəziyyətlə cari vəziyyət arasındakı fərqi əldə edir; Apply (tətbiq) - cari vəziyyəti istənilən vəziyyətə gətirmək üçün konfiqurasiyanı tətbiq edir; Refresh (yeniləmə) - cari vəziyyəti yeniləyir.
- Terraform Plugins - xüsusi "service" üçün resursların təyin edilməsində məsul işi həyata keçirir. Buraya, infrastruktur provayderlərinin müəyyən edilməsi, və "API Calls" üçün istifadə olunan kitabxanaların işə salınması daxildir. Terraform plugins ya xüsusi "service" ya da "provisioner" kimi istifadə edilə bilər. "Provisioner" plugin-lər əmrlərin icrası ilə təyin edilmiş resurslar üçün istifadə olunur;
- Upstream APIs - Terraformun çox sayda qoşula bilən hissəsi var ki, ən çox yayılmış plugin növü Terraform Provider Plugin-dir. Terraform Provider Plugin, üçüncü tərəf service-lər ilə əlaqə qurmaq üçün CRUD (Create-yaratmaq, Read-oxumaq, Update-yeniləmək və Delete-silmək) API ilə resursların funksionallığını həyata keçirir. Qeyd edim ki, Terraform Core heç vaxt API ilə birbaşa əlaqə qurmur. Bunun əvəzinə Terraform Core, Terraform Provider Plugin-dən bir əməliyyatın yerinə yetirilməsini istəyir ki, bu zaman plugin yuxarı (upstream) API ilə əlaqəni qurmuş olur.
Terraform modulları
Terraform modulları mürəkkəb resursların istifadəsinə imkan yaradır. Belə ki hər bir modul mahiyyət etibarilə "developer"-in bir araya toplamaq istədiyi çoxsaylı infrastruktur resursları üçün bir konteynerdir. Modulların həm giriş, həm də çıxış dəyişənləri var ki, giriş (input) dəyişənləri bir moduldan dəyərləri qəbul etdiyi halda, çıxış (output) dəyişənləri isə məlumatları həmin modula geri qaytarır. Modullar bir-biriləri ilə əlaqə saxlaya bilər ki, bu da konfiqurasiyaları daha sürətli etməyə kömək edir. Terraform Registry-nin hər modulunda adlandırma və standard modul quruluşu, "repository" təsviri, dəstəklənən (versiya) idarəetmə sistemi və "release" üçün etiketlər olmalıdır. Terraform Registry, modul paylaşımı üçün mərkəzləşdirilmiş bir "repository" rolunu oynayır, eləcə də Terraform modullarının kəşfini və istifadəçilərə paylanmasını təmin edir. Registry (2) iki variantda mövcuddur:
- Public Registry - müəyyən bir resurs və "community" tərəfindən verilən modulları idarə etmək üçün API ilə qarşılıqlı-əlaqəli service-ləri saxlayır;
- Private Registry - bir şirkət və ya təşkilat daxilində modullar üçün istifadə olunan service-ləri saxlayır.
Terraform istifadəsinin üstünlükləri və çətinlikləri vardır:
Üstünlükləri:
- HCL kodunu JSON-a tərcümə edə bilir;
- Bir çox bulud platformasını dəstəkləyə bilir;
- Resurslarda dəyişikliklər edə bilir;
- Mövcud resursları Terraform-un vəziyyətinə uyğunlaşdıra bilir;
- Yalnız bir nəfərin dəyişiklik edə biləcəyini təmin etmək üçün vəziyyətə uyğun dəyişiklikləri tətbiq etməzdən əvvəl modulları kilidləyə bilir.
Çətinlikləri:
- Yeni buraxılış versiyaları və yeniləmələrdə səhv ola bilər;
- İstifadəçilər seçimə görə JSON istifadə edə bilməsələr, yeni bir dil - HCL öyrənmək məcburiyyətində qala bilərlər;
- Resursların adını dəyişdirmək və onları modulların içərisinə daxil etmək çətin ola bilər.
Dostlar,
Fikrimcə, Terraform haqqında məqaləmin ilk (I) hissəsində bu qədər, növbəti (II) hissədə bəzi nəzəri və praktiki məlumatları sizə təqdim edəcəm. Güman edirəm ki, bu qısa məqaləm bilgilənmə istiqamətində işinizə yarayacaqdır.
Təşəkkür edirəm və uğurlar!
Hörmətlə,
Müəllif
Araz Əhmədov
Comments
Post a Comment