{"id":16130,"date":"2026-07-28T18:25:29","date_gmt":"2026-07-28T15:25:29","guid":{"rendered":"https:\/\/www.ihs.com.tr\/blog\/?p=16130"},"modified":"2026-07-28T18:25:29","modified_gmt":"2026-07-28T15:25:29","slug":"infrastructure-as-code-iac-nedir-terraform-ile-baslangic","status":"publish","type":"post","link":"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/","title":{"rendered":"&#8220;Infrastructure as Code&#8221; (IaC) Nedir? Terraform ile Ba\u015flang\u0131\u00e7"},"content":{"rendered":"<p>Bulut bili\u015fim ve DevOps k\u00fclt\u00fcr\u00fcn\u00fcn h\u0131zla yayg\u0131nla\u015fmas\u0131yla birlikte, altyap\u0131 y\u00f6netimi s\u00fcre\u00e7leri de k\u00f6kl\u00fc bir d\u00f6n\u00fc\u015f\u00fcm ge\u00e7iriyor. Geleneksel y\u00f6ntemlerle sunucu kurman\u0131n, yap\u0131land\u0131rman\u0131n ve y\u00f6netmenin getirdi\u011fi yava\u015fl\u0131k, tutars\u0131zl\u0131k ve y\u00fcksek hata pay\u0131, g\u00fcn\u00fcm\u00fcz\u00fcn dinamik ve \u00f6l\u00e7eklenebilir sistem ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamakta yetersiz kal\u0131yor. Bu noktada &#8220;Infrastructure as Code&#8221; (IaC) veya &#8220;Kod Olarak Altyap\u0131&#8221; kavram\u0131, altyap\u0131y\u0131 bir yaz\u0131l\u0131m projesi gibi ele alarak bu zorluklara modern \u00e7\u00f6z\u00fcmler sunuyor. Bu devrimin \u00f6nc\u00fclerinden olan Terraform ise, altyap\u0131 otomasyonunu basit, okunabilir ve platform ba\u011f\u0131ms\u0131z bir \u015fekilde ger\u00e7ekle\u015ftirerek sekt\u00f6r standard\u0131 haline gelmi\u015ftir. Bu makalede, IaC&#8217;nin temellerinden ba\u015flayarak Terraform&#8217;un g\u00fcc\u00fcn\u00fc nas\u0131l kullanabilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_77 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0130\u00e7erik Tablosu<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a6909e6d6da1\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\" id=\"ez-toc-cssicon-toggle-item-6a6909e6d6da1\" aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Geleneksel-Altyapi-Yonetiminin-Zorluklari\" >Geleneksel Altyap\u0131 Y\u00f6netiminin Zorluklar\u0131<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Manuel-Kurulum-Surecleri-ve-Yavaslik\" >Manuel Kurulum S\u00fcre\u00e7leri ve Yava\u015fl\u0131k<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#%E2%80%9CConfiguration-Drift%E2%80%9D-Yapilandirma-Sapmasi-Sorunu\" >&#8220;Configuration Drift&#8221; (Yap\u0131land\u0131rma Sapmas\u0131) Sorunu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Olceklenebilirlik-ve-Tutarlilik-Eksikligi\" >\u00d6l\u00e7eklenebilirlik ve Tutarl\u0131l\u0131k Eksikli\u011fi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Insan-Hatasina-Aciklik-ve-Yuksek-Risk-Faktoru\" >\u0130nsan Hatas\u0131na A\u00e7\u0131kl\u0131k ve Y\u00fcksek Risk Fakt\u00f6r\u00fc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Infrastructure-as-Code-IaC-Kavrami-ve-Temel-Prensipleri\" >Infrastructure as Code (IaC) Kavram\u0131 ve Temel Prensipleri<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Infrastructure-as-Code-IaC-Nedir\" >Infrastructure as Code (IaC) Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#IaCnin-Temel-Ilkeleri\" >IaC&#8217;nin Temel \u0130lkeleri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#IaC-Yaklasimlari-Deklaratif-Declarative-ve-Emperatif-Imperative\" >IaC Yakla\u015f\u0131mlar\u0131: Deklaratif (Declarative) ve Emperatif (Imperative)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#IaC-Kullanmanin-Sagladigi-Avantajlar\" >IaC Kullanman\u0131n Sa\u011flad\u0131\u011f\u0131 Avantajlar<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraforma-Giris-Modern-Altyapi-Otomasyonu\" >Terraform&#8217;a Giri\u015f: Modern Altyap\u0131 Otomasyonu<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraform-Nedir\" >Terraform Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraformun-Calisma-Mimarisi-ve-Mantigi\" >Terraform&#8217;un \u00c7al\u0131\u015fma Mimarisi ve Mant\u0131\u011f\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraformun-Diger-IaC-Araclarindan-Farklari\" >Terraform&#8217;un Di\u011fer IaC Ara\u00e7lar\u0131ndan Farklar\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Multi-Cloud-ve-Hibrit-Cloud-Ortamlarinda-Terraform\" >Multi-Cloud ve Hibrit-Cloud Ortamlar\u0131nda Terraform<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraform-ile-Calismaya-Baslamak-Kurulum-ve-Temel-Komutlar\" >Terraform ile \u00c7al\u0131\u015fmaya Ba\u015flamak: Kurulum ve Temel Komutlar<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Isletim-Sistemlerine-Gore-Terraform-Kurulumu-Windows-macOS-Linux\" >\u0130\u015fletim Sistemlerine G\u00f6re Terraform Kurulumu (Windows, macOS, Linux)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraform-CLI-Temel-Komutlar-ve-Kullanim-Amaclari\" >Terraform CLI: Temel Komutlar ve Kullan\u0131m Ama\u00e7lar\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#HashiCorp-Configuration-Language-HCL-Sozdizimine-Genel-Bakis\" >HashiCorp Configuration Language (HCL) S\u00f6zdizimine Genel Bak\u0131\u015f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraformun-Temel-Bilesenleri-ve-Yapi-Taslari\" >Terraform&#8217;un Temel Bile\u015fenleri ve Yap\u0131 Ta\u015flar\u0131<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Providers-Saglayicilar-Bulut-Platformlari-ile-Entegrasyon\" >Providers (Sa\u011flay\u0131c\u0131lar): Bulut Platformlar\u0131 ile Entegrasyon<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Resources-Kaynaklar-Altyapi-Bilesenlerini-Tanimlama\" >Resources (Kaynaklar): Altyap\u0131 Bile\u015fenlerini Tan\u0131mlama<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Variables-Degiskenler-Konfigurasyonlari-Esnek-ve-Dinamik-Hale-Getirme\" >Variables (De\u011fi\u015fkenler): Konfig\u00fcrasyonlar\u0131 Esnek ve Dinamik Hale Getirme<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Outputs-Ciktilar-Olusturulan-Kaynaklardan-Deger-Dondurme\" >Outputs (\u00c7\u0131kt\u0131lar): Olu\u015fturulan Kaynaklardan De\u011fer D\u00f6nd\u00fcrme<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#State-File-Durum-Dosyasi-Altyapinin-Mevcut-Durumunun-Takibi\" >State File (Durum Dosyas\u0131): Altyap\u0131n\u0131n Mevcut Durumunun Takibi<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Adim-Adim-Ilk-Terraform-Projesi-Uygulamali-Ornek\" >Ad\u0131m Ad\u0131m \u0130lk Terraform Projesi: Uygulamal\u0131 \u00d6rnek<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Proje-Dizininin-Olusturulmasi-ve-Yapilandirilmasi\" >Proje Dizininin Olu\u015fturulmas\u0131 ve Yap\u0131land\u0131r\u0131lmas\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#maintf-Provider-ve-Resource-Bloklarinin-Yazilmasi\" >`main.tf`: Provider ve Resource Bloklar\u0131n\u0131n Yaz\u0131lmas\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#variablestf-Degiskenlerin-Tanimlanmasi\" >`variables.tf`: De\u011fi\u015fkenlerin Tan\u0131mlanmas\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#outputstf-Cikti-Degerlerinin-Belirlenmesi\" >`outputs.tf`: \u00c7\u0131kt\u0131 De\u011ferlerinin Belirlenmesi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Projenin-Calistirilmasi-init-plan-ve-apply-Adimlari\" >Projenin \u00c7al\u0131\u015ft\u0131r\u0131lmas\u0131: `init`, `plan` ve `apply` Ad\u0131mlar\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Olusturulan-Altyapinin-destroy-Komutu-ile-Kaldirilmasi\" >Olu\u015fturulan Altyap\u0131n\u0131n `destroy` Komutu ile Kald\u0131r\u0131lmas\u0131<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraformda-Ileri-Seviye-Konular-ve-En-Iyi-Uygulamalar\" >Terraform&#8217;da \u0130leri Seviye Konular ve En \u0130yi Uygulamalar<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Modules-Moduller-Kodun-Yeniden-Kullanimi-ve-Organizasyonu\" >Modules (Mod\u00fcller): Kodun Yeniden Kullan\u0131m\u0131 ve Organizasyonu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Remote-State-Yonetimi-Takim-Calismasi-ve-Guvenlik\" >Remote State Y\u00f6netimi: Tak\u0131m \u00c7al\u0131\u015fmas\u0131 ve G\u00fcvenlik<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Provisioners-Kaynaklar-Uzerinde-Konfigurasyon-Calistirma\" >Provisioners: Kaynaklar \u00dczerinde Konfig\u00fcrasyon \u00c7al\u0131\u015ft\u0131rma<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraform-Workspaceler-ile-Farkli-Ortamlarin-Yonetimi\" >Terraform Workspace&#8217;ler ile Farkl\u0131 Ortamlar\u0131n Y\u00f6netimi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Hassas-Verilerin-Yonetimi-Secrets-Management\" >Hassas Verilerin Y\u00f6netimi (Secrets Management)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/www.ihs.com.tr\/blog\/infrastructure-as-code-iac-nedir-terraform-ile-baslangic\/#Terraform-ile-Altyapi-Yonetimi-Icin-Neden-IHS-Telekomu-Tercih-Etmelisiniz\" >Terraform ile Altyap\u0131 Y\u00f6netimi \u0130\u00e7in Neden \u0130HS Telekom&#8217;u Tercih Etmelisiniz?<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Geleneksel-Altyapi-Yonetiminin-Zorluklari\"><\/span>Geleneksel Altyap\u0131 Y\u00f6netiminin Zorluklar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Infrastructure as Code (IaC) ortaya \u00e7\u0131kmadan \u00f6nce, sistem y\u00f6neticileri ve operasyon ekipleri altyap\u0131y\u0131 manuel olarak kurmak ve y\u00f6netmek zorundayd\u0131. Bu yakla\u015f\u0131m, k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli ve statik sistemler i\u00e7in bir dereceye kadar y\u00f6netilebilir olsa da, modern uygulamalar\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 ve h\u0131z\u0131 kar\u015f\u0131s\u0131nda ciddi darbo\u011fazlar yarat\u0131yordu. Geleneksel y\u00f6ntemlerin getirdi\u011fi bu zorluklar, otomasyon ihtiyac\u0131n\u0131 ka\u00e7\u0131n\u0131lmaz k\u0131lm\u0131\u015ft\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Manuel-Kurulum-Surecleri-ve-Yavaslik\"><\/span>Manuel Kurulum S\u00fcre\u00e7leri ve Yava\u015fl\u0131k<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Geleneksel altyap\u0131 y\u00f6netiminde her bir sunucunun, a\u011f cihaz\u0131n\u0131n veya veritaban\u0131n\u0131n kurulumu manuel olarak yap\u0131l\u0131r. \u0130\u015fletim sisteminin kurulmas\u0131, gerekli yaz\u0131l\u0131mlar\u0131n y\u00fcklenmesi, a\u011f ayarlar\u0131n\u0131n yap\u0131lmas\u0131 ve g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131n tan\u0131mlanmas\u0131 gibi i\u015flemler, hem \u00e7ok zaman al\u0131r hem de uzmanl\u0131k gerektirir. Yeni bir ortam (\u00f6rne\u011fin, test veya geli\u015ftirme ortam\u0131) kurma talebi geldi\u011finde, bu s\u00fcre\u00e7lerin tekrarlanmas\u0131 haftalar s\u00fcrebilir, bu da geli\u015ftirme d\u00f6ng\u00fclerini ciddi \u015fekilde yava\u015flat\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E2%80%9CConfiguration-Drift%E2%80%9D-Yapilandirma-Sapmasi-Sorunu\"><\/span>&#8220;Configuration Drift&#8221; (Yap\u0131land\u0131rma Sapmas\u0131) Sorunu<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Manuel olarak y\u00f6netilen sistemlerde zamanla &#8220;Configuration Drift&#8221; ad\u0131 verilen bir sorun ortaya \u00e7\u0131kar. Bu, ba\u015flang\u0131\u00e7ta ayn\u0131 \u015fekilde yap\u0131land\u0131r\u0131lan sunucular\u0131n zamanla birbirinden farkl\u0131la\u015fmas\u0131 durumudur. Bir sunucuya acil bir yama uygulanmas\u0131, di\u011ferine farkl\u0131 bir k\u00fct\u00fcphane s\u00fcr\u00fcm\u00fcn\u00fcn kurulmas\u0131 veya bir yap\u0131land\u0131rma dosyas\u0131n\u0131n elle de\u011fi\u015ftirilmesi gibi nedenlerle ortamlar aras\u0131nda tutars\u0131zl\u0131klar olu\u015fur. Bu sapmalar, \u00f6zellikle &#8220;geli\u015ftirme ortam\u0131nda \u00e7al\u0131\u015fan kodun neden \u00fcretim ortam\u0131nda \u00e7al\u0131\u015fmad\u0131\u011f\u0131&#8221; gibi tespit edilmesi zor sorunlara yol a\u00e7ar.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Olceklenebilirlik-ve-Tutarlilik-Eksikligi\"><\/span>\u00d6l\u00e7eklenebilirlik ve Tutarl\u0131l\u0131k Eksikli\u011fi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Uygulaman\u0131z\u0131n pop\u00fclerli\u011fi artt\u0131\u011f\u0131nda veya ani bir trafik art\u0131\u015f\u0131 ya\u015fand\u0131\u011f\u0131nda, altyap\u0131y\u0131 h\u0131zla \u00f6l\u00e7eklendirmek kritik hale gelir. Geleneksel y\u00f6ntemlerle on veya y\u00fczlerce yeni sunucuyu ayn\u0131 yap\u0131land\u0131rmayla, hatas\u0131z ve h\u0131zl\u0131 bir \u015fekilde devreye almak neredeyse imkans\u0131zd\u0131r. Her manuel kurulum, k\u00fc\u00e7\u00fck de olsa farkl\u0131l\u0131klar i\u00e7erebilir ve bu da sistem genelinde tutars\u0131zl\u0131\u011fa ve karars\u0131zl\u0131\u011fa neden olur.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Insan-Hatasina-Aciklik-ve-Yuksek-Risk-Faktoru\"><\/span>\u0130nsan Hatas\u0131na A\u00e7\u0131kl\u0131k ve Y\u00fcksek Risk Fakt\u00f6r\u00fc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tekrarlayan ve karma\u015f\u0131k manuel i\u015flemler, insan hatas\u0131na son derece a\u00e7\u0131kt\u0131r. Yanl\u0131\u015f girilen bir IP adresi, unutulan bir g\u00fcvenlik kural\u0131 veya yanl\u0131\u015f yap\u0131land\u0131r\u0131lan bir servis, ciddi g\u00fcvenlik a\u00e7\u0131klar\u0131na, veri kay\u0131plar\u0131na veya sistemin tamamen \u00e7\u00f6kmesine neden olabilir. \u00d6zellikle \u00fcretim ortamlar\u0131nda yap\u0131lan manuel de\u011fi\u015fiklikler, geri al\u0131nmas\u0131 zor ve maliyetli hatalara yol a\u00e7ma riski ta\u015f\u0131r. Bu t\u00fcr problemlerle kar\u015f\u0131la\u015f\u0131ld\u0131\u011f\u0131nda, <a href=\"https:\/\/www.ihs.com.tr\/sikayet-cozum-merkezi.html\" target=\"_blank\">\u015fikayet \u00e7\u00f6z\u00fcm merkezi<\/a> gibi yap\u0131lar sorunun kayna\u011f\u0131n\u0131 bulmada \u00f6nemli rol oynar, ancak en iyi \u00e7\u00f6z\u00fcm sorunun hi\u00e7 olu\u015fmamas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Infrastructure-as-Code-IaC-Kavrami-ve-Temel-Prensipleri\"><\/span>Infrastructure as Code (IaC) Kavram\u0131 ve Temel Prensipleri<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Geleneksel altyap\u0131 y\u00f6netiminin getirdi\u011fi zorluklara bir \u00e7\u00f6z\u00fcm olarak do\u011fan Infrastructure as Code (IaC), altyap\u0131 kaynaklar\u0131n\u0131n (sunucular, a\u011flar, veritabanlar\u0131 vb.) manuel s\u00fcre\u00e7ler yerine kod arac\u0131l\u0131\u011f\u0131yla tan\u0131mlanmas\u0131, kurulmas\u0131 ve y\u00f6netilmesi prati\u011fidir. Bu yakla\u015f\u0131mda, altyap\u0131 yap\u0131land\u0131rmalar\u0131 t\u0131pk\u0131 bir uygulama kodu gibi versiyon kontrol sistemlerinde (Git gibi) saklan\u0131r, test edilir ve otomatik olarak uygulan\u0131r. Bu sayede altyap\u0131 y\u00f6netimi daha h\u0131zl\u0131, tutarl\u0131 ve g\u00fcvenilir hale gelir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Infrastructure-as-Code-IaC-Nedir\"><\/span>Infrastructure as Code (IaC) Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>IaC, en temel anlam\u0131yla, sunucular\u0131, y\u00fck dengeleyicileri, a\u011f yap\u0131land\u0131rmalar\u0131n\u0131 ve di\u011fer altyap\u0131 bile\u015fenlerini tan\u0131mlamak i\u00e7in okunabilir ve makine taraf\u0131ndan i\u015flenebilir tan\u0131m dosyalar\u0131 kullanma y\u00f6ntemidir. Bu tan\u0131m dosyalar\u0131, altyap\u0131n\u0131n &#8220;istenen durumunu&#8221; (desired state) belirtir. Otomasyon ara\u00e7lar\u0131 bu dosyalar\u0131 okuyarak mevcut altyap\u0131y\u0131 istenen duruma getirir ve bu durumu korur. B\u00f6ylece &#8220;sunuculara SSH ile ba\u011flan\u0131p komut \u00e7al\u0131\u015ft\u0131rma&#8221; gibi manuel i\u015flemlerin yerini, kodun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131yla t\u00fcm ortam\u0131n saniyeler veya dakikalar i\u00e7inde olu\u015fturulmas\u0131 al\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"IaCnin-Temel-Ilkeleri\"><\/span>IaC&#8217;nin Temel \u0130lkeleri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>IaC felsefesini etkili k\u0131lan ve ba\u015far\u0131s\u0131n\u0131 sa\u011flayan iki temel ilke bulunmaktad\u0131r. Bu ilkeler, altyap\u0131n\u0131n g\u00fcvenilirli\u011fini ve \u00f6ng\u00f6r\u00fclebilirli\u011fini art\u0131r\u0131r.<\/p>\n<h4>Idempotence (Tekrarlanabilirlik)<\/h4>\n<p>Idempotence, bir operasyonun birden \u00e7ok kez uygulanmas\u0131na ra\u011fmen sonucun her zaman ayn\u0131 kalmas\u0131 prensibidir. IaC ba\u011flam\u0131nda bu, bir yap\u0131land\u0131rma kodunu ka\u00e7 kez \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z \u00e7al\u0131\u015ft\u0131r\u0131n, altyap\u0131n\u0131n her zaman ayn\u0131 &#8220;istenen duruma&#8221; ula\u015faca\u011f\u0131 anlam\u0131na gelir. E\u011fer altyap\u0131 zaten istenen durumdaysa, ara\u00e7 hi\u00e7bir de\u011fi\u015fiklik yapmaz. E\u011fer bir sapma varsa, sadece sapmay\u0131 d\u00fczeltecek de\u011fi\u015fiklikleri yapar. Bu \u00f6zellik, hatal\u0131 veya eksik yap\u0131land\u0131rmalar\u0131 g\u00fcvenli bir \u015fekilde d\u00fczeltmeyi sa\u011flar.<\/p>\n<h4>Immutable Infrastructure (De\u011fi\u015fmez Altyap\u0131)<\/h4>\n<p>De\u011fi\u015fmez altyap\u0131, bir sunucu veya kaynak kurulduktan sonra \u00fczerinde asla de\u011fi\u015fiklik yap\u0131lmamas\u0131 ilkesine dayan\u0131r. Bir g\u00fcncelleme, yama veya yap\u0131land\u0131rma de\u011fi\u015fikli\u011fi gerekti\u011finde, mevcut sunucu de\u011fi\u015ftirilmez. Bunun yerine, yeni yap\u0131land\u0131rmay\u0131 i\u00e7eren yeni bir sunucu imaj\u0131 olu\u015fturulur, bu imajdan yeni sunucular ba\u015flat\u0131l\u0131r ve eski sunucular trafikten \u00e7ekilerek yok edilir. Bu yakla\u015f\u0131m, &#8220;Configuration Drift&#8221; sorununu tamamen ortadan kald\u0131r\u0131r ve her zaman temiz, tutarl\u0131 ve \u00f6ng\u00f6r\u00fclebilir bir altyap\u0131 sa\u011flar.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"IaC-Yaklasimlari-Deklaratif-Declarative-ve-Emperatif-Imperative\"><\/span>IaC Yakla\u015f\u0131mlar\u0131: Deklaratif (Declarative) ve Emperatif (Imperative)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>IaC ara\u00e7lar\u0131, altyap\u0131y\u0131 tan\u0131mlamak i\u00e7in genellikle iki farkl\u0131 yakla\u015f\u0131mdan birini benimser. Bu iki yakla\u015f\u0131m\u0131n anla\u015f\u0131lmas\u0131, do\u011fru arac\u0131 se\u00e7mek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><b>Deklaratif (Declarative) Yakla\u015f\u0131m:<\/b> &#8220;Ne istedi\u011finizi&#8221; belirtirsiniz, arac\u0131n bunu &#8220;nas\u0131l yapaca\u011f\u0131na&#8221; kar\u0131\u015fmazs\u0131n\u0131z. \u00d6rne\u011fin, &#8220;5 adet web sunucusu ve 1 adet veritaban\u0131 istiyorum&#8221; dersiniz. Ara\u00e7 (Terraform gibi), bu hedefe ula\u015fmak i\u00e7in mevcut durumu analiz eder ve gerekli ad\u0131mlar\u0131 (olu\u015fturma, g\u00fcncelleme, silme) kendisi belirler. Bu yakla\u015f\u0131m, altyap\u0131n\u0131n nihai durumuna odakland\u0131\u011f\u0131 i\u00e7in daha basit ve y\u00f6netilebilirdir.<\/li>\n<li><b>Emperatif (Imperative) Yakla\u015f\u0131m:<\/b> Hedefe ula\u015fmak i\u00e7in &#8220;at\u0131lmas\u0131 gereken ad\u0131mlar\u0131&#8221; tek tek s\u0131ralars\u0131n\u0131z. \u00d6rne\u011fin, &#8220;\u00d6nce bir sanal a\u011f olu\u015ftur, sonra bir alt a\u011f ekle, ard\u0131ndan g\u00fcvenlik grubunu tan\u0131mla, sonra sunucuyu ba\u015flat&#8230;&#8221; gibi komutlar yazars\u0131n\u0131z. Bu yakla\u015f\u0131m, s\u00fcre\u00e7 \u00fczerinde daha fazla kontrol sunsa da kodun karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r ve durum takibini zorla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<div class=\"karsilastirma\">\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Deklaratif Yakla\u015f\u0131m (Ne?)<\/th>\n<th>Emperatif Yakla\u015f\u0131m (Nas\u0131l?)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><b>Odak Noktas\u0131<\/b><\/td>\n<td>Nihai durum (Sonu\u00e7)<\/td>\n<td>S\u00fcre\u00e7 (Ad\u0131mlar)<\/td>\n<\/tr>\n<tr>\n<td><b>\u00d6rnek Ara\u00e7lar<\/b><\/td>\n<td>Terraform, AWS CloudFormation, Puppet<\/td>\n<td>Ansible (k\u0131smen), Chef (k\u0131smen), Bash script&#8217;leri<\/td>\n<\/tr>\n<tr>\n<td><b>Karma\u015f\u0131kl\u0131k<\/b><\/td>\n<td>Daha d\u00fc\u015f\u00fck, soyutlama seviyesi y\u00fcksek<\/td>\n<td>Daha y\u00fcksek, detayl\u0131 komutlar gerektirir<\/td>\n<\/tr>\n<tr>\n<td><b>Durum Y\u00f6netimi<\/b><\/td>\n<td>Ara\u00e7 durumu otomatik y\u00f6netir<\/td>\n<td>Kullan\u0131c\u0131n\u0131n durumu takip etmesi gerekir<\/td>\n<\/tr>\n<tr>\n<td><b>Esneklik<\/b><\/td>\n<td>Daha az esnek, araca g\u00fcvenir<\/td>\n<td>S\u00fcre\u00e7 \u00fczerinde tam kontrol sa\u011flar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"IaC-Kullanmanin-Sagladigi-Avantajlar\"><\/span>IaC Kullanman\u0131n Sa\u011flad\u0131\u011f\u0131 Avantajlar<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Infrastructure as Code yakla\u015f\u0131m\u0131n\u0131 benimsemek, kurumlara ve ekiplere say\u0131s\u0131z avantaj sa\u011flar. Bu avantajlar, sadece teknik verimlili\u011fi de\u011fil, ayn\u0131 zamanda i\u015f s\u00fcre\u00e7lerini de olumlu y\u00f6nde etkiler. H\u0131z, maliyet optimizasyonu, g\u00fcvenlik ve i\u015f birli\u011fi gibi alanlarda somut faydalar sunar. Altyap\u0131y\u0131 kod olarak y\u00f6netmek, <a href=\"https:\/\/www.ihs.com.tr\/web-hosting\/windows-hosting.html\" target=\"_blank\">Windows hosting<\/a> gibi platformlara \u00f6zel yap\u0131land\u0131rmalar\u0131n bile standartla\u015ft\u0131r\u0131lmas\u0131n\u0131 ve otomatikle\u015ftirilmesini m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Terraforma-Giris-Modern-Altyapi-Otomasyonu\"><\/span>Terraform&#8217;a Giri\u015f: Modern Altyap\u0131 Otomasyonu<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Infrastructure as Code d\u00fcnyas\u0131nda bir\u00e7ok ara\u00e7 bulunmas\u0131na ra\u011fmen, HashiCorp taraf\u0131ndan geli\u015ftirilen Terraform, esnekli\u011fi, platform ba\u011f\u0131ms\u0131z yap\u0131s\u0131 ve g\u00fc\u00e7l\u00fc topluluk deste\u011fi ile \u00f6ne \u00e7\u0131kmaktad\u0131r. Deklaratif yakla\u015f\u0131m\u0131 benimseyen Terraform, altyap\u0131n\u0131z\u0131 basit ve okunabilir bir dille tan\u0131mlaman\u0131za ve y\u00f6netmenize olanak tan\u0131r. Bu b\u00f6l\u00fcmde Terraform&#8217;un ne oldu\u011funu, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve di\u011fer ara\u00e7lardan neden farkl\u0131 oldu\u011funu inceleyece\u011fiz.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Terraform-Nedir\"><\/span>Terraform Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform, a\u00e7\u0131k kaynakl\u0131 bir &#8220;Kod Olarak Altyap\u0131&#8221; (IaC) arac\u0131d\u0131r. Kullan\u0131c\u0131lar\u0131n, HashiCorp Configuration Language (HCL) ad\u0131 verilen bir dil kullanarak altyap\u0131lar\u0131n\u0131n &#8220;istenen durumunu&#8221; (desired state) tan\u0131mlamas\u0131na olanak tan\u0131r. Terraform, bu tan\u0131m dosyalar\u0131n\u0131 okuyarak AWS, Google Cloud, Microsoft Azure gibi pop\u00fcler bulut sa\u011flay\u0131c\u0131lar\u0131ndan \u015firket i\u00e7i (on-premise) \u00e7\u00f6z\u00fcmlere kadar y\u00fczlerce farkl\u0131 platform \u00fczerinde altyap\u0131 kaynaklar\u0131n\u0131 olu\u015fturur, g\u00fcnceller ve y\u00f6netir. Temel amac\u0131, altyap\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir bir \u015fekilde otomatikle\u015ftirmektir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Terraformun-Calisma-Mimarisi-ve-Mantigi\"><\/span>Terraform&#8217;un \u00c7al\u0131\u015fma Mimarisi ve Mant\u0131\u011f\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform&#8217;un \u00e7al\u0131\u015fma mant\u0131\u011f\u0131 \u00fc\u00e7 ana ad\u0131mdan olu\u015fur: Yaz (Write), Planla (Plan) ve Uygula (Apply).<\/p>\n<ul>\n<li><b>Yaz (Write):<\/b> \u0130lk ad\u0131mda, HCL s\u00f6zdizimini kullanarak altyap\u0131 kaynaklar\u0131n\u0131z\u0131 (\u00f6rne\u011fin, sanal sunucular, a\u011flar, DNS kay\u0131tlar\u0131) `.tf` uzant\u0131l\u0131 dosyalarda tan\u0131mlars\u0131n\u0131z. Bu kod, altyap\u0131n\u0131z\u0131n nihai olarak nas\u0131l g\u00f6r\u00fcnmesini istedi\u011finizi belirtir.<\/li>\n<li><b>Planla (Plan):<\/b> `terraform plan` komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Terraform yazd\u0131\u011f\u0131n\u0131z kodu mevcut altyap\u0131n\u0131z\u0131n durumuyla kar\u015f\u0131la\u015ft\u0131r\u0131r. Mevcut durum, &#8220;state file&#8221; ad\u0131 verilen bir dosyada tutulur. Kar\u015f\u0131la\u015ft\u0131rma sonucunda Terraform, istenen duruma ula\u015fmak i\u00e7in hangi kaynaklar\u0131n olu\u015fturulaca\u011f\u0131n\u0131, g\u00fcncellenece\u011fini veya silinece\u011fini g\u00f6steren bir y\u00fcr\u00fctme plan\u0131 olu\u015fturur. Bu ad\u0131m, de\u011fi\u015fiklikleri uygulamadan \u00f6nce ne olaca\u011f\u0131n\u0131 g\u00f6rmenizi sa\u011flayarak s\u00fcrprizleri \u00f6nler.<\/li>\n<li><b>Uygula (Apply):<\/b> `terraform apply` komutu ile plan\u0131 onaylad\u0131\u011f\u0131n\u0131zda, Terraform olu\u015fturulan plan\u0131 y\u00fcr\u00fct\u00fcr. \u0130lgili bulut sa\u011flay\u0131c\u0131s\u0131n\u0131n veya platformun API&#8217;lar\u0131 ile ileti\u015fime ge\u00e7erek kaynaklar\u0131 planland\u0131\u011f\u0131 gibi olu\u015fturur, g\u00fcnceller veya siler. \u0130\u015flem tamamland\u0131\u011f\u0131nda, altyap\u0131n\u0131n yeni durumunu state file&#8217;a kaydeder.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Terraformun-Diger-IaC-Araclarindan-Farklari\"><\/span>Terraform&#8217;un Di\u011fer IaC Ara\u00e7lar\u0131ndan Farklar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform, Ansible, Chef, Puppet gibi di\u011fer pop\u00fcler otomasyon ara\u00e7lar\u0131ndan baz\u0131 temel \u00f6zellikleriyle ayr\u0131l\u0131r. \u00d6zellikle altyap\u0131 olu\u015fturma (provisioning) ve yap\u0131land\u0131rma y\u00f6netimi (configuration management) aras\u0131ndaki fark burada kilit rol oynar.<\/p>\n<div class=\"karsilastirma\">\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Terraform<\/th>\n<th>Ansible \/ Chef \/ Puppet<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><b>Ana Odak<\/b><\/td>\n<td>Altyap\u0131 Olu\u015fturma (Provisioning)<\/td>\n<td>Yap\u0131land\u0131rma Y\u00f6netimi (Configuration Management)<\/td>\n<\/tr>\n<tr>\n<td><b>Yakla\u015f\u0131m<\/b><\/td>\n<td>Deklaratif<\/td>\n<td>Genellikle Prosed\u00fcrel\/Emperatif (Ansible daha deklaratife yak\u0131n)<\/td>\n<\/tr>\n<tr>\n<td><b>Durum Y\u00f6netimi<\/b><\/td>\n<td>State file ile explicit (a\u00e7\u0131k) durum takibi<\/td>\n<td>Genellikle hedeflenen sistemden durum bilgisi al\u0131r<\/td>\n<\/tr>\n<tr>\n<td><b>Platform Deste\u011fi<\/b><\/td>\n<td>\u00c7ok geni\u015f (Multi-cloud), eklenti tabanl\u0131 mimari<\/td>\n<td>Genellikle sunucu ve yaz\u0131l\u0131m yap\u0131land\u0131rmas\u0131na odakl\u0131<\/td>\n<\/tr>\n<tr>\n<td><b>Kullan\u0131m Alan\u0131<\/b><\/td>\n<td>Sunucu, a\u011f, veritaban\u0131 gibi temel kaynaklar\u0131 olu\u015fturma<\/td>\n<td>Olu\u015fturulmu\u015f sunuculara yaz\u0131l\u0131m y\u00fckleme, servisleri yap\u0131land\u0131rma<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>K\u0131sacas\u0131, Terraform daha \u00e7ok altyap\u0131n\u0131n temel ta\u015flar\u0131n\u0131 (VM&#8217;ler, a\u011flar) s\u0131f\u0131rdan olu\u015fturmak i\u00e7in kullan\u0131l\u0131rken, Ansible gibi ara\u00e7lar genellikle bu olu\u015fturulmu\u015f sunucular\u0131n \u00fczerine yaz\u0131l\u0131m kurmak ve yap\u0131land\u0131rmak i\u00e7in kullan\u0131l\u0131r. Ancak bu iki ara\u00e7 birbirinin rakibi de\u011fil, tamamlay\u0131c\u0131s\u0131d\u0131r ve genellikle birlikte kullan\u0131l\u0131rlar.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Multi-Cloud-ve-Hibrit-Cloud-Ortamlarinda-Terraform\"><\/span>Multi-Cloud ve Hibrit-Cloud Ortamlar\u0131nda Terraform<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform&#8217;un en b\u00fcy\u00fck g\u00fc\u00e7lerinden biri, platformdan ba\u011f\u0131ms\u0131z olmas\u0131d\u0131r. &#8220;Provider&#8221; ad\u0131 verilen eklenti tabanl\u0131 mimarisi sayesinde tek bir dil (HCL) ve ara\u00e7 seti ile birden fazla bulut sa\u011flay\u0131c\u0131s\u0131n\u0131 (AWS, Azure, GCP) ayn\u0131 anda y\u00f6netebilirsiniz. Bu, bir bulut sa\u011flay\u0131c\u0131s\u0131na ba\u011f\u0131ml\u0131 kalmay\u0131 \u00f6nler (vendor lock-in) ve \u015firketlerin i\u015f y\u00fckleri i\u00e7in en uygun platformu se\u00e7me esnekli\u011fi sunar. Ayr\u0131ca, hem genel bulut kaynaklar\u0131n\u0131 hem de \u015firket i\u00e7i (on-premise) veri merkezlerindeki kaynaklar\u0131 (\u00f6rne\u011fin VMware vSphere) birlikte y\u00f6neterek hibrit bulut stratejilerini kolayca uygulaman\u0131za olanak tan\u0131r.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Terraform-ile-Calismaya-Baslamak-Kurulum-ve-Temel-Komutlar\"><\/span>Terraform ile \u00c7al\u0131\u015fmaya Ba\u015flamak: Kurulum ve Temel Komutlar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Terraform&#8217;un teorik altyap\u0131s\u0131n\u0131 anlad\u0131ktan sonra, pratik kullan\u0131ma ge\u00e7menin zaman\u0131 geldi. Terraform, tek bir y\u00fcr\u00fct\u00fclebilir dosyadan olu\u015ftu\u011fu i\u00e7in kurulumu olduk\u00e7a basittir. Bu b\u00f6l\u00fcmde, farkl\u0131 i\u015fletim sistemlerine Terraform&#8217;u nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve en s\u0131k kullan\u0131lan temel komutlar\u0131 \u00f6\u011freneceksiniz.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Isletim-Sistemlerine-Gore-Terraform-Kurulumu-Windows-macOS-Linux\"><\/span>\u0130\u015fletim Sistemlerine G\u00f6re Terraform Kurulumu (Windows, macOS, Linux)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform&#8217;u kurman\u0131n en kolay yolu, resmi web sitesinden i\u015fletim sisteminize uygun paketi indirmektir. Kurulum, indirilen dosyan\u0131n sisteminizin &#8220;PATH&#8221; ortam de\u011fi\u015fkeninde bulunan bir dizine kopyalanmas\u0131ndan ibarettir.<\/p>\n<ul>\n<li><b>Windows:<\/b> Terraform web sitesinden Windows i\u00e7in olan ZIP dosyas\u0131n\u0131 indirin. Ar\u015fivden `terraform.exe` dosyas\u0131n\u0131 \u00e7\u0131kar\u0131n ve `C:\\Windows\\System32` gibi PATH&#8217;e dahil bir klas\u00f6re ta\u015f\u0131y\u0131n veya kendi olu\u015fturdu\u011funuz bir klas\u00f6re koyup bu klas\u00f6r\u00fc PATH&#8217;e ekleyin.<\/li>\n<li><b>macOS:<\/b> macOS kullan\u0131c\u0131lar\u0131 i\u00e7in en pop\u00fcler y\u00f6ntem Homebrew paket y\u00f6neticisini kullanmakt\u0131r. Terminalde `brew install terraform` komutunu \u00e7al\u0131\u015ft\u0131rmak yeterlidir. Alternatif olarak, resmi siteden dosyay\u0131 indirip `\/usr\/local\/bin` dizinine ta\u015f\u0131yabilirsiniz.<\/li>\n<li><b>Linux:<\/b> Linux da\u011f\u0131t\u0131mlar\u0131 i\u00e7in de paket y\u00f6neticileri kullan\u0131labilir (\u00f6rne\u011fin, `apt` veya `yum` i\u00e7in HashiCorp repositor&#8217;unu ekleyerek) veya macOS&#8217;ta oldu\u011fu gibi ZIP dosyas\u0131n\u0131 indirip `\/usr\/local\/bin` gibi bir dizine ta\u015f\u0131yabilirsiniz.<\/li>\n<\/ul>\n<p>Kurulumu do\u011frulamak i\u00e7in komut sat\u0131r\u0131n\u0131 veya terminali a\u00e7\u0131p `terraform &#8211;version` komutunu \u00e7al\u0131\u015ft\u0131r\u0131n. E\u011fer versiyon bilgisi g\u00f6r\u00fcn\u00fcyorsa, kurulum ba\u015far\u0131l\u0131d\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Terraform-CLI-Temel-Komutlar-ve-Kullanim-Amaclari\"><\/span>Terraform CLI: Temel Komutlar ve Kullan\u0131m Ama\u00e7lar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform ile t\u00fcm etkile\u015fim, `terraform` komutu \u00fczerinden y\u00fcr\u00fct\u00fcl\u00fcr. \u0130\u015fte altyap\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6netmek i\u00e7in bilmeniz gereken en temel be\u015f komut:<\/p>\n<h4>`terraform init`<\/h4>\n<p>Bir Terraform projesini ba\u015flatmak i\u00e7in kullan\u0131lan ilk komuttur. Bu komut, \u00e7al\u0131\u015fma dizinini analiz eder, yap\u0131land\u0131rma dosyalar\u0131n\u0131zda belirtilen &#8220;provider&#8221;lar\u0131 (AWS, Azure vb.) tespit eder ve gerekli eklentileri indirir. Ayr\u0131ca, e\u011fer yap\u0131land\u0131r\u0131lm\u0131\u015fsa, backend (uzak durum dosyas\u0131) ba\u011flant\u0131s\u0131n\u0131 kurar. Yeni bir projeye ba\u015flarken veya mevcut bir projeyi klonlad\u0131ktan sonra mutlaka \u00e7al\u0131\u015ft\u0131r\u0131lmal\u0131d\u0131r.<\/p>\n<h4>`terraform plan`<\/h4>\n<p>Yaz\u0131lan kodun mevcut altyap\u0131ya g\u00f6re ne gibi de\u011fi\u015fiklikler yapaca\u011f\u0131n\u0131 g\u00f6steren bir \u00f6nizleme veya &#8220;kuru \u00e7al\u0131\u015fma&#8221; (dry run) olu\u015fturur. `plan` komutu, kaynaklar\u0131 ger\u00e7ekten olu\u015fturmadan, g\u00fcncellemeden veya silmeden \u00f6nce yap\u0131lacak i\u015flemlerin bir listesini sunar. Bu, hatalar\u0131 ve beklenmedik de\u011fi\u015fiklikleri \u00f6nlemek i\u00e7in son derece \u00f6nemli bir g\u00fcvenlik ad\u0131m\u0131d\u0131r.<\/p>\n<h4>`terraform apply`<\/h4>\n<p>`plan` komutu taraf\u0131ndan olu\u015fturulan y\u00fcr\u00fctme plan\u0131n\u0131 uygular. Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Terraform size plan\u0131 tekrar g\u00f6sterir ve de\u011fi\u015fiklikleri onaylaman\u0131z\u0131 ister. Onaylad\u0131ktan sonra, altyap\u0131 kaynaklar\u0131 olu\u015fturulur, g\u00fcncellenir veya silinir. Altyap\u0131n\u0131zda ger\u00e7ek de\u011fi\u015fiklikleri yapan komut budur.<\/p>\n<h4>`terraform destroy`<\/h4>\n<p>Mevcut Terraform projesi taraf\u0131ndan y\u00f6netilen t\u00fcm altyap\u0131 kaynaklar\u0131n\u0131 yok eder, yani siler. Bu komut, \u00f6zellikle test veya ge\u00e7ici ortamlar\u0131 temizlemek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. `destroy` komutu da `apply` gibi tehlikeli bir i\u015flem oldu\u011fu i\u00e7in, silinecek kaynaklar\u0131n bir listesini g\u00f6sterir ve sizden onay ister.<\/p>\n<h4>`terraform fmt` ve `terraform validate`<\/h4>\n<p>Bu iki komut, kod kalitesini ve tutarl\u0131l\u0131\u011f\u0131n\u0131 art\u0131rmak i\u00e7in kullan\u0131l\u0131r. `terraform fmt`, `.tf` uzant\u0131l\u0131 dosyalar\u0131n\u0131z\u0131 standart HashiCorp format\u0131na g\u00f6re otomatik olarak bi\u00e7imlendirir. `terraform validate` ise, yazd\u0131\u011f\u0131n\u0131z kodun s\u00f6zdizimsel olarak do\u011fru olup olmad\u0131\u011f\u0131n\u0131 ve mant\u0131ksal hatalar i\u00e7erip i\u00e7ermedi\u011fini kontrol eder, ancak d\u0131\u015f sistemlere (\u00f6rne\u011fin bulut API&#8217;lar\u0131na) ba\u011flanmaz.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"HashiCorp-Configuration-Language-HCL-Sozdizimine-Genel-Bakis\"><\/span>HashiCorp Configuration Language (HCL) S\u00f6zdizimine Genel Bak\u0131\u015f<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform, altyap\u0131y\u0131 tan\u0131mlamak i\u00e7in HCL (HashiCorp Configuration Language) kullan\u0131r. HCL, insanlar taraf\u0131ndan kolayca okunabilir ve yaz\u0131labilir olacak \u015fekilde tasarlanm\u0131\u015ft\u0131r. JSON ile de uyumludur. Temel s\u00f6zdizimi &#8220;blok&#8221; ve &#8220;arg\u00fcman&#8221; yap\u0131lar\u0131ndan olu\u015fur.<\/p>\n<p>\u00d6rne\u011fin, bir kaynak tan\u0131mlama blo\u011fu \u015f\u00f6yle g\u00f6r\u00fcn\u00fcr: `resource &#8220;resource_type&#8221; &#8220;resource_name&#8221; { argument1 = &#8220;value1&#8221; argument2 = value2 }`. Burada `resource` bir blok t\u00fcr\u00fc, `&#8221;aws_instance&#8221;` (\u00f6rne\u011fin) bir kaynak t\u00fcr\u00fc ve `&#8221;web_server&#8221;` da bizim verdi\u011fimiz mant\u0131ksal bir isimdir. S\u00fcsl\u00fc parantezler i\u00e7indekiler ise o kayna\u011f\u0131 yap\u0131land\u0131rmak i\u00e7in kullan\u0131lan arg\u00fcmanlard\u0131r.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Terraformun-Temel-Bilesenleri-ve-Yapi-Taslari\"><\/span>Terraform&#8217;un Temel Bile\u015fenleri ve Yap\u0131 Ta\u015flar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Terraform kodunun g\u00fcc\u00fc, altyap\u0131y\u0131 mod\u00fcler ve anla\u015f\u0131l\u0131r par\u00e7alara ay\u0131ran temel bile\u015fenlerinden gelir. Bu yap\u0131 ta\u015flar\u0131n\u0131 anlamak, esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir IaC projeleri olu\u015fturman\u0131n anahtar\u0131d\u0131r. Her bir bile\u015fen, Terraform&#8217;un altyap\u0131n\u0131z\u0131 nas\u0131l anlad\u0131\u011f\u0131n\u0131 ve y\u00f6netti\u011fini \u015fekillendiren belirli bir amaca hizmet eder.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Providers-Saglayicilar-Bulut-Platformlari-ile-Entegrasyon\"><\/span>Providers (Sa\u011flay\u0131c\u0131lar): Bulut Platformlar\u0131 ile Entegrasyon<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Provider&#8217;lar, Terraform&#8217;un kalbidir. AWS, Azure, Google Cloud, Kubernetes ve hatta GitHub gibi belirli bir teknoloji veya platformun API&#8217;lar\u0131 ile nas\u0131l etkile\u015fim kurulaca\u011f\u0131n\u0131 tan\u0131mlayan eklentilerdir. Kodunuzda bir kaynak olu\u015fturmak istedi\u011finizde, Terraform bu kayna\u011f\u0131n hangi provider&#8217;a ait oldu\u011funu anlar ve ilgili provider eklentisini kullanarak platformun API&#8217;si ile konu\u015fur. Projenizin ba\u015f\u0131nda hangi sa\u011flay\u0131c\u0131lar\u0131 kullanaca\u011f\u0131n\u0131z\u0131 `required_providers` blo\u011fu i\u00e7inde belirtmeniz gerekir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Resources-Kaynaklar-Altyapi-Bilesenlerini-Tanimlama\"><\/span>Resources (Kaynaklar): Altyap\u0131 Bile\u015fenlerini Tan\u0131mlama<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Resource&#8217;lar, altyap\u0131n\u0131z\u0131n en temel yap\u0131 ta\u015flar\u0131d\u0131r. Bir sanal <a href=\"https:\/\/www.ihs.com.tr\/sunucu-kiralama\/\" target=\"_blank\">sunucu<\/a>, bir S3 bucket, bir DNS kayd\u0131 veya bir veritaban\u0131 gibi y\u00f6netmek istedi\u011finiz her bir altyap\u0131 bile\u015feni bir &#8220;resource&#8221; blo\u011fu ile tan\u0131mlan\u0131r. Her resource blo\u011fu, ait oldu\u011fu provider taraf\u0131ndan belirlenen bir &#8220;t\u00fcr&#8221; (\u00f6rne\u011fin, `aws_instance`) ve kod i\u00e7inde ona referans vermek i\u00e7in kullan\u0131lan yerel bir &#8220;ad&#8221; i\u00e7erir. Blok i\u00e7indeki arg\u00fcmanlar, o kayna\u011f\u0131n \u00f6zelliklerini (\u00f6rne\u011fin, sunucunun tipi, imaj ID&#8217;si) belirler.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Variables-Degiskenler-Konfigurasyonlari-Esnek-ve-Dinamik-Hale-Getirme\"><\/span>Variables (De\u011fi\u015fkenler): Konfig\u00fcrasyonlar\u0131 Esnek ve Dinamik Hale Getirme<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Variables (de\u011fi\u015fkenler), kodunuzu daha esnek ve yeniden kullan\u0131labilir hale getirmek i\u00e7in kullan\u0131l\u0131r. Altyap\u0131 kodunuzdaki sunucu boyutu, b\u00f6lge (region), IP adresi gibi de\u011ferleri sabit olarak yazmak yerine, bunlar\u0131 de\u011fi\u015fken olarak tan\u0131mlayabilirsiniz. Bu sayede ayn\u0131 kodu farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in farkl\u0131 de\u011ferlerle kolayca \u00e7al\u0131\u015ft\u0131rabilirsiniz. De\u011fi\u015fkenlere varsay\u0131lan de\u011ferler atanabilir, komut sat\u0131r\u0131ndan girilebilir veya `.tfvars` uzant\u0131l\u0131 dosyalardan okunabilir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Outputs-Ciktilar-Olusturulan-Kaynaklardan-Deger-Dondurme\"><\/span>Outputs (\u00c7\u0131kt\u0131lar): Olu\u015fturulan Kaynaklardan De\u011fer D\u00f6nd\u00fcrme<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Outputs (\u00e7\u0131kt\u0131lar), Terraform projeniz \u00e7al\u0131\u015ft\u0131ktan sonra olu\u015fturulan kaynaklardan belirli bilgileri (\u00f6rne\u011fin, bir sunucunun genel IP adresi, bir veritaban\u0131n\u0131n ba\u011flant\u0131 adresi) d\u0131\u015far\u0131ya aktarmak i\u00e7in kullan\u0131l\u0131r. Bu de\u011ferler, terminal ekran\u0131nda g\u00f6sterilir ve otomasyon script&#8217;leri taraf\u0131ndan veya ba\u015fka Terraform projeleri taraf\u0131ndan kullan\u0131labilir. \u00c7\u0131kt\u0131lar, altyap\u0131n\u0131z hakk\u0131nda \u00f6nemli bilgileri kolayca eri\u015filebilir k\u0131lar.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"State-File-Durum-Dosyasi-Altyapinin-Mevcut-Durumunun-Takibi\"><\/span>State File (Durum Dosyas\u0131): Altyap\u0131n\u0131n Mevcut Durumunun Takibi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform&#8217;un en kritik bile\u015fenlerinden biri &#8220;state file&#8221; (durum dosyas\u0131), genellikle `terraform.tfstate` ad\u0131nda bir JSON dosyas\u0131d\u0131r. Bu dosya, Terraform&#8217;un y\u00f6netti\u011fi kaynaklar\u0131n bir kayd\u0131n\u0131 tutar ve kodunuzdaki tan\u0131mlamalar ile ger\u00e7ek d\u00fcnyadaki altyap\u0131 aras\u0131nda bir haritalama yapar. `terraform plan` veya `apply` komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Terraform \u00f6nce bu dosyay\u0131 okuyarak mevcut durumu anlar ve ard\u0131ndan kodunuzdaki istenen duruma ula\u015fmak i\u00e7in ne yapmas\u0131 gerekti\u011fini belirler. Bu dosya hassas bilgiler i\u00e7erebilece\u011fi ve tak\u0131m \u00e7al\u0131\u015fmalar\u0131nda tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak i\u00e7in merkezi bir yerde (\u00f6rne\u011fin bir S3 bucket) saklanmas\u0131 gerekti\u011fi i\u00e7in y\u00f6netimi \u00e7ok \u00f6nemlidir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Adim-Adim-Ilk-Terraform-Projesi-Uygulamali-Ornek\"><\/span>Ad\u0131m Ad\u0131m \u0130lk Terraform Projesi: Uygulamal\u0131 \u00d6rnek<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Teorik bilgileri prati\u011fe d\u00f6kmenin en iyi yolu uygulamal\u0131 bir \u00f6rnek yapmakt\u0131r. Bu b\u00f6l\u00fcmde, basit bir altyap\u0131 par\u00e7as\u0131n\u0131 (\u00f6rne\u011fin, bir bulut sa\u011flay\u0131c\u0131s\u0131nda bir sanal makine) olu\u015fturmak i\u00e7in s\u0131f\u0131rdan bir Terraform projesi haz\u0131rlayaca\u011f\u0131z. Bu \u00f6rnek, Terraform&#8217;un temel bile\u015fenlerinin birlikte nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 somut bir \u015fekilde g\u00f6sterecektir. \u00d6rnek olarak AWS \u00fczerinde bir EC2 instance olu\u015fturaca\u011f\u0131z.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Proje-Dizininin-Olusturulmasi-ve-Yapilandirilmasi\"><\/span>Proje Dizininin Olu\u015fturulmas\u0131 ve Yap\u0131land\u0131r\u0131lmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0130lk olarak, bilgisayar\u0131n\u0131zda projeniz i\u00e7in yeni bir klas\u00f6r olu\u015fturun. \u00d6rne\u011fin, `ilk-terraform-projem`. Ard\u0131ndan terminal veya komut istemcisini kullanarak bu dizine gidin. Terraform, komutlar\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z dizindeki t\u00fcm `.tf` uzant\u0131l\u0131 dosyalar\u0131 tek bir konfig\u00fcrasyon olarak kabul eder. Bu nedenle, projemizin yap\u0131 ta\u015flar\u0131n\u0131 farkl\u0131 dosyalara ay\u0131rmak iyi bir pratiktir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"maintf-Provider-ve-Resource-Bloklarinin-Yazilmasi\"><\/span>`main.tf`: Provider ve Resource Bloklar\u0131n\u0131n Yaz\u0131lmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Projemizin ana mant\u0131\u011f\u0131n\u0131 i\u00e7erecek olan `main.tf` dosyas\u0131n\u0131 olu\u015fturun. Bu dosyada, kullanaca\u011f\u0131m\u0131z bulut sa\u011flay\u0131c\u0131s\u0131n\u0131 (provider) ve olu\u015fturmak istedi\u011fimiz kayna\u011f\u0131 (resource) tan\u0131mlayaca\u011f\u0131z.<\/p>\n<p><b>main.tf i\u00e7eri\u011fi:<\/b><br \/>\n<code>terraform {<br \/>\n required_providers {<br \/>\n aws = {<br \/>\n source = \"hashicorp\/aws\"<br \/>\n version = \"~> 5.0\"<br \/>\n }<br \/>\n }<br \/>\n}<\/p>\n<p>provider \"aws\" {<br \/>\n region = var.aws_region<br \/>\n}<\/p>\n<p>resource \"aws_instance\" \"web_server\" {<br \/>\n ami = \"ami-0c55b159cbfafe1f0\" # \u00d6rnek bir AMI ID'si, b\u00f6lgenize g\u00f6re de\u011fi\u015febilir<br \/>\n instance_type = var.instance_type<\/p>\n<p> tags = {<br \/>\n Name = \"Ilk-Terraform-Sunucum\"<br \/>\n }<br \/>\n}<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"variablestf-Degiskenlerin-Tanimlanmasi\"><\/span>`variables.tf`: De\u011fi\u015fkenlerin Tan\u0131mlanmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Konfig\u00fcrasyonumuzu esnek hale getirmek i\u00e7in `main.tf` i\u00e7inde kulland\u0131\u011f\u0131m\u0131z `aws_region` ve `instance_type` gibi de\u011ferleri bir de\u011fi\u015fken dosyas\u0131nda tan\u0131mlayal\u0131m. `variables.tf` ad\u0131nda yeni bir dosya olu\u015fturun.<\/p>\n<p><b>variables.tf i\u00e7eri\u011fi:<\/b><br \/>\n<code>variable \"aws_region\" {<br \/>\n description = \"AWS b\u00f6lgesi\"<br \/>\n type = string<br \/>\n default = \"us-east-1\"<br \/>\n}<\/p>\n<p>variable \"instance_type\" {<br \/>\n description = \"EC2 instance tipi\"<br \/>\n type = string<br \/>\n default = \"t2.micro\"<br \/>\n}<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"outputstf-Cikti-Degerlerinin-Belirlenmesi\"><\/span>`outputs.tf`: \u00c7\u0131kt\u0131 De\u011ferlerinin Belirlenmesi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sunucumuz olu\u015fturulduktan sonra onun genel IP adresini \u00f6\u011frenmek isteyebiliriz. Bu bilgiyi almak i\u00e7in bir `outputs.tf` dosyas\u0131 olu\u015ftural\u0131m.<\/p>\n<p><b>outputs.tf i\u00e7eri\u011fi:<\/b><br \/>\n<code>output \"instance_public_ip\" {<br \/>\n description = \"Olu\u015fturulan EC2 instance'in genel IP adresi\"<br \/>\n value = aws_instance.web_server.public_ip<br \/>\n}<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Projenin-Calistirilmasi-init-plan-ve-apply-Adimlari\"><\/span>Projenin \u00c7al\u0131\u015ft\u0131r\u0131lmas\u0131: `init`, `plan` ve `apply` Ad\u0131mlar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Art\u0131k t\u00fcm dosyalar\u0131m\u0131z haz\u0131r oldu\u011funa g\u00f6re, Terraform&#8217;un \u00fc\u00e7 ad\u0131ml\u0131 sihrini ger\u00e7ekle\u015ftirme zaman\u0131 geldi.<\/p>\n<ol>\n<li><b>`terraform init`<\/b>: Terminalde bu komutu \u00e7al\u0131\u015ft\u0131r\u0131n. Terraform, `main.tf` dosyas\u0131ndaki `required_providers` blo\u011funu okuyacak ve AWS provider eklentisini indirecektir.<\/li>\n<li><b>`terraform plan`<\/b>: Bu komut, AWS hesab\u0131n\u0131za ba\u011flanarak (kimlik bilgilerinizin yap\u0131land\u0131r\u0131lm\u0131\u015f olmas\u0131 gerekir) ne yap\u0131laca\u011f\u0131n\u0131 size g\u00f6sterecektir. \u00c7\u0131kt\u0131da, bir adet `aws_instance` kayna\u011f\u0131n\u0131n olu\u015fturulaca\u011f\u0131n\u0131 g\u00f6rmelisiniz.<\/li>\n<li><b>`terraform apply`<\/b>: Plan\u0131 inceleyip onaylad\u0131ktan sonra bu komutu \u00e7al\u0131\u015ft\u0131r\u0131n. Terraform sizden son bir onay isteyecek (`yes` yaz\u0131p Enter&#8217;a bas\u0131n). Birka\u00e7 dakika i\u00e7inde AWS EC2 sunucunuz olu\u015fturulacak ve sonunda `instance_public_ip` \u00e7\u0131kt\u0131s\u0131 ekran\u0131n\u0131zda belirecektir.<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"Olusturulan-Altyapinin-destroy-Komutu-ile-Kaldirilmasi\"><\/span>Olu\u015fturulan Altyap\u0131n\u0131n `destroy` Komutu ile Kald\u0131r\u0131lmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u00d6rne\u011fi tamamlad\u0131ktan ve olu\u015fturulan kayna\u011fa art\u0131k ihtiyac\u0131n\u0131z kalmad\u0131\u011f\u0131nda, altyap\u0131y\u0131 temizlemek \u00e7ok kolayd\u0131r. Proje dizinindeyken terminale `terraform destroy` komutunu yazman\u0131z yeterlidir. Terraform, yine bir plan g\u00f6stererek hangi kaynaklar\u0131n silinece\u011fini belirtir. Onaylad\u0131ktan sonra (`yes`) olu\u015fturdu\u011funuz EC2 sunucusu kal\u0131c\u0131 olarak silinecektir. Bu, IaC&#8217;nin en b\u00fcy\u00fck avantajlar\u0131ndan biridir: kaynaklar\u0131 olu\u015fturmak kadar yok etmek de basit ve g\u00fcvenilirdir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Terraformda-Ileri-Seviye-Konular-ve-En-Iyi-Uygulamalar\"><\/span>Terraform&#8217;da \u0130leri Seviye Konular ve En \u0130yi Uygulamalar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Terraform&#8217;un temellerini \u00f6\u011frendikten sonra, daha karma\u015f\u0131k ve b\u00fcy\u00fck \u00f6l\u00e7ekli altyap\u0131lar\u0131 verimli bir \u015fekilde y\u00f6netmek i\u00e7in ileri seviye kavramlar\u0131 ve en iyi uygulamalar\u0131 anlamak \u00f6nemlidir. Bu konular, kodunuzu daha mod\u00fcler, g\u00fcvenli ve tak\u0131m \u00e7al\u0131\u015fmas\u0131na uygun hale getirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Modules-Moduller-Kodun-Yeniden-Kullanimi-ve-Organizasyonu\"><\/span>Modules (Mod\u00fcller): Kodun Yeniden Kullan\u0131m\u0131 ve Organizasyonu<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Mod\u00fcller, Terraform kodunu organize etmenin ve yeniden kullanman\u0131n temel yoludur. Bir mod\u00fcl, belirli bir amaca hizmet eden (\u00f6rne\u011fin, bir web sunucusu altyap\u0131s\u0131 veya bir veritaban\u0131 k\u00fcmesi olu\u015fturan) bir dizi `.tf` dosyas\u0131n\u0131n bir araya getirildi\u011fi bir klas\u00f6rd\u00fcr. Ana projenizden bu mod\u00fclleri, farkl\u0131 parametreler (de\u011fi\u015fkenler) ge\u00e7irerek \u00e7a\u011f\u0131rabilirsiniz. Bu sayede, ayn\u0131 altyap\u0131 desenini (\u00f6rne\u011fin, bir <a href=\"https:\/\/www.ihs.com.tr\/sunucu-kiralama\/vds-sunucu.html\" target=\"_blank\">VDS<\/a> sunucu k\u00fcmesi) projenizin farkl\u0131 yerlerinde veya farkl\u0131 projelerde tekrar tekrar yazmak yerine tek bir yerden y\u00f6netebilirsiniz.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Remote-State-Yonetimi-Takim-Calismasi-ve-Guvenlik\"><\/span>Remote State Y\u00f6netimi: Tak\u0131m \u00c7al\u0131\u015fmas\u0131 ve G\u00fcvenlik<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Varsay\u0131lan olarak Terraform, `terraform.tfstate` dosyas\u0131n\u0131 yerel makinenizde olu\u015fturur. Ancak bir ekiple \u00e7al\u0131\u015f\u0131yorsan\u0131z bu durum sorun yarat\u0131r. Herkesin altyap\u0131n\u0131n en g\u00fcncel durumunu g\u00f6rmesi ve ayn\u0131 anda \u00e7ak\u0131\u015fan de\u011fi\u015fiklikler yapmamas\u0131 gerekir. &#8220;Remote State&#8221; (Uzak Durum), state dosyas\u0131n\u0131 AWS S3, Azure Blob Storage veya Terraform Cloud gibi payla\u015f\u0131lan bir depolama alan\u0131nda saklama prati\u011fidir. Bu yakla\u015f\u0131m, state dosyas\u0131n\u0131 kilitleme (state locking) \u00f6zelli\u011fi sayesinde ayn\u0131 anda yaln\u0131zca bir ki\u015finin de\u011fi\u015fiklik yapabilmesini sa\u011flar ve state dosyas\u0131n\u0131n yanl\u0131\u015fl\u0131kla silinmesini veya kaybolmas\u0131n\u0131 \u00f6nler.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Provisioners-Kaynaklar-Uzerinde-Konfigurasyon-Calistirma\"><\/span>Provisioners: Kaynaklar \u00dczerinde Konfig\u00fcrasyon \u00c7al\u0131\u015ft\u0131rma<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Provisioner&#8217;lar, bir kaynak olu\u015fturulduktan veya silinmeden \u00f6nce o kaynak \u00fczerinde belirli eylemleri (script \u00e7al\u0131\u015ft\u0131rma, dosya kopyalama vb.) ger\u00e7ekle\u015ftirmenizi sa\u011flar. \u00d6rne\u011fin, bir sanal sunucu olu\u015fturulduktan sonra \u00fczerinde bir yap\u0131land\u0131rma y\u00f6netimi arac\u0131 (Ansible gibi) \u00e7al\u0131\u015ft\u0131rmak i\u00e7in provisioner kullanabilirsiniz. Ancak HashiCorp, provisioner&#8217;lar\u0131 son \u00e7are olarak kullan\u0131lmas\u0131n\u0131 \u00f6nerir. Genellikle, sunucu imajlar\u0131n\u0131 (AMI gibi) \u00f6nceden yap\u0131land\u0131rmak veya `user_data` script&#8217;leri gibi bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131n yerel mekanizmalar\u0131n\u0131 kullanmak daha iyi bir pratiktir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Terraform-Workspaceler-ile-Farkli-Ortamlarin-Yonetimi\"><\/span>Terraform Workspace&#8217;ler ile Farkl\u0131 Ortamlar\u0131n Y\u00f6netimi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Workspace&#8217;ler (\u00e7al\u0131\u015fma alanlar\u0131), tek bir Terraform konfig\u00fcrasyonunu kullanarak birden fazla ortam\u0131 (\u00f6rne\u011fin `dev`, `staging`, `prod`) y\u00f6netmenizi sa\u011flar. Her workspace, kendi state dosyas\u0131na sahip olur. Bu sayede ayn\u0131 kod taban\u0131n\u0131 kullanarak, farkl\u0131 de\u011fi\u015fken de\u011ferleri ile her ortam i\u00e7in ba\u011f\u0131ms\u0131z altyap\u0131lar olu\u015fturabilirsiniz. Bu, `dev` ortam\u0131nda yapt\u0131\u011f\u0131n\u0131z bir de\u011fi\u015fikli\u011fin `prod` ortam\u0131n\u0131 etkilemesini engeller ve ortamlar aras\u0131 tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Hassas-Verilerin-Yonetimi-Secrets-Management\"><\/span>Hassas Verilerin Y\u00f6netimi (Secrets Management)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Terraform kodunuzun i\u00e7inde veya de\u011fi\u015fken dosyalar\u0131nda API anahtarlar\u0131, parolalar veya <a href=\"https:\/\/www.ihs.com.tr\/ssl\/\" target=\"_blank\">SSL<\/a> sertifikas\u0131 \u00f6zel anahtarlar\u0131 gibi hassas verileri d\u00fcz metin olarak saklamak ciddi bir g\u00fcvenlik riskidir. Bu t\u00fcr verileri y\u00f6netmek i\u00e7in en iyi pratik, HashiCorp Vault, AWS Secrets Manager veya Azure Key Vault gibi harici bir &#8220;secrets management&#8221; arac\u0131 kullanmakt\u0131r. Terraform, bu sistemlerle entegre olabilir ve ihtiya\u00e7 duyuldu\u011funda bu hassas verileri do\u011frudan bu g\u00fcvenli kasalardan okuyabilir. Bu, hassas bilgilerin versiyon kontrol sistemine (Git gibi) asla kaydedilmemesini sa\u011flar.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Terraform-ile-Altyapi-Yonetimi-Icin-Neden-IHS-Telekomu-Tercih-Etmelisiniz\"><\/span>Terraform ile Altyap\u0131 Y\u00f6netimi \u0130\u00e7in Neden \u0130HS Telekom&#8217;u Tercih Etmelisiniz?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Terraform&#8217;un sundu\u011fu otomasyon, h\u0131z ve tutarl\u0131l\u0131k, modern altyap\u0131 y\u00f6netiminin temel ta\u015flar\u0131d\u0131r. Ancak bu g\u00fc\u00e7l\u00fc arac\u0131 en verimli \u015fekilde kullanmak, \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131 sa\u011flam, esnek ve y\u00fcksek performansl\u0131 bir altyap\u0131 gerektirir. \u0130HS Telekom, Terraform ile otomatize edece\u011finiz altyap\u0131n\u0131z i\u00e7in ihtiya\u00e7 duydu\u011funuz t\u00fcm temel hizmetleri ve g\u00fcvenilirli\u011fi sunar. \u0130ster basit bir <a href=\"https:\/\/www.ihs.com.tr\/web-hosting\/\" target=\"_blank\">hosting<\/a> paketi y\u00f6netiyor olun, ister karma\u015f\u0131k <a href=\"https:\/\/www.ihs.com.tr\/sunucu-kiralama\/vps-server.html\" target=\"_blank\">VPS<\/a> k\u00fcmeleri kuruyor olun, do\u011fru altyap\u0131 sa\u011flay\u0131c\u0131s\u0131 ba\u015far\u0131n\u0131z i\u00e7in kritiktir. <a href=\"https:\/\/www.ihs.com.tr\" target=\"_blank\">\u0130HS Telekom<\/a>&#8216;un sundu\u011fu \u00e7e\u015fitli hizmetler, Terraform projelerinizi hayata ge\u00e7irmek i\u00e7in ideal bir zemin haz\u0131rlar. \u00d6zellikle <a href=\"https:\/\/www.ihs.com.tr\/web-hosting\/wordpress-hosting.html\" target=\"_blank\">WordPress hosting<\/a> gibi y\u00f6netilen hizmetlerden, tam kontrol sa\u011flayan dedike sunuculara kadar geni\u015f bir yelpazede, otomasyon hedeflerinize uygun \u00e7\u00f6z\u00fcmler bulabilirsiniz. Yeni projeniz i\u00e7in bir <a href=\"https:\/\/www.ihs.com.tr\/domain\/alan-adi-domain-tescili.html\" target=\"_blank\">alan ad\u0131<\/a> kayd\u0131ndan ba\u015flayarak t\u00fcm altyap\u0131n\u0131z\u0131 kod ile y\u00f6netme yolculu\u011funuzda, \u0130HS Telekom&#8217;un sundu\u011fu kaliteli hizmetler ve uzman deste\u011fi ile projelerinizi g\u00fcvenle \u00f6l\u00e7eklendirebilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bulut bili\u015fim ve DevOps k\u00fclt\u00fcr\u00fcn\u00fcn h\u0131zla yayg\u0131nla\u015fmas\u0131yla birlikte, altyap\u0131 y\u00f6netimi s\u00fcre\u00e7leri de k\u00f6kl\u00fc bir d\u00f6n\u00fc\u015f\u00fcm ge\u00e7iriyor. Geleneksel y\u00f6ntemlerle sunucu kurman\u0131n, yap\u0131land\u0131rman\u0131n ve&hellip;<\/p>\n","protected":false},"author":3,"featured_media":16131,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[414],"tags":[],"class_list":["post-16130","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sunucu"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/16130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=16130"}],"version-history":[{"count":1,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/16130\/revisions"}],"predecessor-version":[{"id":16132,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/16130\/revisions\/16132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/media\/16131"}],"wp:attachment":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=16130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=16130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=16130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}