{"id":33372,"date":"2025-11-02T04:31:33","date_gmt":"2025-11-02T01:31:33","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/"},"modified":"2025-11-02T04:31:33","modified_gmt":"2025-11-02T01:31:33","slug":"terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/","title":{"rendered":"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<p>Azure&#8217;da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, bulut altyap\u0131s\u0131 y\u00f6netimi hi\u00e7 olmad\u0131\u011f\u0131 kadar kritik bir rol oynamaktad\u0131r. \u015eirketler, uygulamalar\u0131n\u0131 ve hizmetlerini h\u0131zl\u0131, g\u00fcvenilir ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tma ihtiyac\u0131 duyuyorlar. Geleneksel yakla\u015f\u0131mlar, yani bulut sa\u011flay\u0131c\u0131n\u0131n aray\u00fcz\u00fcnden (GUI) veya komut sat\u0131r\u0131ndan (CLI) manuel olarak kaynak olu\u015fturma, zaman al\u0131c\u0131 olmas\u0131n\u0131n yan\u0131 s\u0131ra insan hatas\u0131na da a\u00e7\u0131kt\u0131r. Ayr\u0131ca, b\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131larda tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak neredeyse imkans\u0131z hale gelebilir. \u0130\u015fte tam da bu noktada, Altyap\u0131 Kod Olarak (Infrastructure as Code &#8211; IaC) kavram\u0131 devreye giriyor ve oyunun kurallar\u0131n\u0131 de\u011fi\u015ftiriyor.<\/p>\n<p>IaC, sunucular, veritabanlar\u0131, a\u011f yap\u0131land\u0131rmalar\u0131 ve sanal makineler (VM&#8217;ler) gibi altyap\u0131 bile\u015fenlerini, t\u0131pk\u0131 yaz\u0131l\u0131m kodu gibi metin dosyalar\u0131nda tan\u0131mlamam\u0131z\u0131 sa\u011flar. Bu yakla\u015f\u0131m, altyap\u0131n\u0131z\u0131n versiyon kontrol\u00fcn\u00fc yapabilmenize, de\u011fi\u015fiklikleri izlemenize ve hatta otomatik test s\u00fcre\u00e7lerine dahil etmenize olanak tan\u0131r. D\u00fc\u015f\u00fcnsenize, bir kod deposunda altyap\u0131n\u0131z\u0131n t\u00fcm ge\u00e7mi\u015fini g\u00f6rebiliyor, eski bir versiyona geri d\u00f6nebiliyor veya farkl\u0131 ortamlara (geli\u015ftirme, test, \u00fcretim) ayn\u0131 yap\u0131land\u0131rmay\u0131 sorunsuz bir \u015fekilde uygulayabiliyorsunuz. Bu, geli\u015ftirme ekipleri i\u00e7in b\u00fcy\u00fck bir esneklik ve operasyonel tutarl\u0131l\u0131k anlam\u0131na gelir.<\/p>\n<p>Manuel s\u00fcre\u00e7lerin aksine, IaC ile altyap\u0131 da\u011f\u0131t\u0131m\u0131 ve y\u00f6netimi \u00e7ok daha verimli hale gelir. \u00d6rne\u011fin, yeni bir test ortam\u0131 kurman\u0131z gerekti\u011finde, daha \u00f6nce tan\u0131mlanm\u0131\u015f kod bloklar\u0131n\u0131 kullanarak saniyeler i\u00e7inde tamamen yeni bir altyap\u0131y\u0131 aya\u011fa kald\u0131rabilirsiniz. Bu otomasyon yetene\u011fi, operasyonel y\u00fck\u00fc azalt\u0131rken, ekiplerin daha stratejik g\u00f6revlere odaklanmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, g\u00fcvenlik ve uyumluluk denetimlerini de kolayla\u015ft\u0131r\u0131r; \u00e7\u00fcnk\u00fc altyap\u0131 tan\u0131mlar\u0131 a\u00e7\u0131k ve denetlenebilir bir formattad\u0131r. Bu makalede, IaC&#8217;nin \u00f6nde gelen ara\u00e7lar\u0131ndan biri olan Terraform&#8217;u kullanarak, Microsoft Azure bulut platformunda ilk sanal makinenizi (Azure VM) nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Terraform&#8217;un g\u00fcc\u00fcyle, Azure altyap\u0131n\u0131z\u0131 kodla y\u00f6netmenin kolayl\u0131\u011f\u0131n\u0131 ve avantajlar\u0131n\u0131 ilk elden deneyimleyeceksiniz. Ba\u015flang\u0131\u00e7 seviyesindeki bir kullan\u0131c\u0131n\u0131n bile rahatl\u0131kla takip edebilece\u011fi bu rehber, Terraform ve Azure yolculu\u011funuzun ilk ad\u0131m\u0131 olacak.<\/p>\n<h2 id=\"terraform-ve-iac-temelleri-neden-kullanmaliyiz\">Terraform ve IaC Temelleri: Neden Kullanmal\u0131y\u0131z?<\/h2>\n<p>Altyap\u0131 Kod Olarak (IaC) felsefesi, bulut ve on-premise altyap\u0131lar\u0131n\u0131 kod dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netme ve sa\u011flama prati\u011fidir. Geleneksel el ile yap\u0131lan yap\u0131land\u0131rmalar\u0131n aksine, IaC ile altyap\u0131 tekrarlanabilir, tutarl\u0131 ve otomatiktir. Bu, altyap\u0131n\u0131n bir yaz\u0131l\u0131m \u00fcr\u00fcn\u00fc gibi ele al\u0131nmas\u0131n\u0131 sa\u011flar; yani versiyon kontrol sistemleri (\u00f6rne\u011fin Git) ile y\u00f6netilebilir, test edilebilir ve s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) s\u00fcre\u00e7lerine dahil edilebilir.<\/p>\n<p>IaC&#8217;nin sundu\u011fu temel avantajlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Tutarl\u0131l\u0131k ve Tekrarlanabilirlik:<\/strong> Farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda ayn\u0131 altyap\u0131 yap\u0131land\u0131rmas\u0131n\u0131 kolayca sa\u011flayabilirsiniz. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sorunlar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7er.<\/li>\n<li><strong>H\u0131z ve Verimlilik:<\/strong> Yeni ortamlar\u0131 veya mevcut altyap\u0131 de\u011fi\u015fikliklerini \u00e7ok daha h\u0131zl\u0131 bir \u015fekilde da\u011f\u0131tabilir ve y\u00f6netebilirsiniz. Manuel s\u00fcre\u00e7ler g\u00fcnler s\u00fcrerken, IaC ile bu s\u00fcre dakikalara inebilir.<\/li>\n<li><strong>Hata Azaltma:<\/strong> \u0130nsan hatalar\u0131n\u0131 en aza indirir. Kod, her zaman ayn\u0131 \u015fekilde yorumlan\u0131r ve uygulan\u0131r, bu da manuel yap\u0131land\u0131rmalardan kaynaklanan hatalar\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>Versiyon Kontrol\u00fc:<\/strong> Altyap\u0131 tan\u0131mlar\u0131n\u0131 Git gibi bir versiyon kontrol sisteminde saklayarak, de\u011fi\u015fiklikleri izleyebilir, eski s\u00fcr\u00fcmlere geri d\u00f6nebilir ve ekipler aras\u0131nda i\u015fbirli\u011fini kolayla\u015ft\u0131rabilirsiniz.<\/li>\n<li><strong>Maliyet Tasarrufu:<\/strong> Otomasyon sayesinde operasyonel maliyetler d\u00fc\u015fer ve kaynaklar daha etkin kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Peki, IaC ara\u00e7lar\u0131 aras\u0131nda Terraform nerede duruyor?<\/p>\n<p>HashiCorp taraf\u0131ndan geli\u015ftirilen <a href=\"https:\/\/www.terraform.io\/\">Terraform<\/a>, IaC prensiplerini benimsemi\u015f, a\u00e7\u0131k kaynakl\u0131 ve buluttan ba\u011f\u0131ms\u0131z (cloud-agnostic) bir ara\u00e7t\u0131r. Bu &#8220;buluttan ba\u011f\u0131ms\u0131z&#8221; \u00f6zelli\u011fi, Terraform&#8217;u rakiplerinden ay\u0131ran en \u00f6nemli noktalardan biridir. AWS, Azure, Google Cloud, Oracle Cloud Infrastructure (OCI) gibi bir\u00e7ok farkl\u0131 bulut sa\u011flay\u0131c\u0131s\u0131n\u0131n yan\u0131 s\u0131ra VMware, Kubernetes ve hatta GitHub gibi servisler i\u00e7in de kaynaklar\u0131 y\u00f6netebilir. Terraform, altyap\u0131y\u0131 tan\u0131mlamak i\u00e7in HashiCorp Configuration Language (HCL) ad\u0131 verilen, okunmas\u0131 ve yazmas\u0131 kolay kendi deklaratif dilini kullan\u0131r. Deklaratif olmas\u0131, sizin &#8220;nas\u0131l&#8221; de\u011fil, &#8220;ne&#8221; istedi\u011finizi belirtmeniz anlam\u0131na gelir. Yani, Terraform&#8217;a bir sanal makine istedi\u011finizi s\u00f6ylersiniz, o da bu makineyi olu\u015fturmak i\u00e7in gerekli ad\u0131mlar\u0131 kendisi belirler ve uygular.<\/p>\n<p>Terraform&#8217;un i\u015f ak\u0131\u015f\u0131 genellikle \u00fc\u00e7 ana ad\u0131mdan olu\u015fur:<\/p>\n<ol>\n<li><strong>Yazma (Write):<\/strong> HCL kullanarak altyap\u0131n\u0131z\u0131 tan\u0131mlayan <code>.tf<\/code> uzant\u0131l\u0131 dosyalar olu\u015fturursunuz.<\/li>\n<li><strong>Planlama (Plan):<\/strong> <code>terraform plan<\/code> komutuyla, Terraform&#8217;un mevcut altyap\u0131n\u0131zla yap\u0131land\u0131rma dosyalar\u0131n\u0131z aras\u0131ndaki fark\u0131 analiz etmesini ve uygulayaca\u011f\u0131 de\u011fi\u015fiklikleri size g\u00f6stermesini sa\u011flars\u0131n\u0131z. Bu ad\u0131m, herhangi bir ger\u00e7ek de\u011fi\u015fiklik yapmadan \u00f6nce ne olaca\u011f\u0131n\u0131 g\u00f6rmenizi sa\u011flar ve olas\u0131 hatalar\u0131 \u00f6nlemeye yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Uygulama (Apply):<\/strong> <code>terraform apply<\/code> komutuyla, planlanan de\u011fi\u015fiklikleri ger\u00e7ek bulut ortam\u0131n\u0131za uygulars\u0131n\u0131z. Terraform, tan\u0131mlad\u0131\u011f\u0131n\u0131z kaynaklar\u0131 olu\u015fturur, g\u00fcnceller veya siler.<\/li>\n<\/ol>\n<p>Terraform&#8217;un bu basit ama g\u00fc\u00e7l\u00fc i\u015f ak\u0131\u015f\u0131, altyap\u0131 y\u00f6netimini hem karma\u015f\u0131k projeler i\u00e7in hem de k\u00fc\u00e7\u00fck ekipler i\u00e7in ula\u015f\u0131labilir ve y\u00f6netilebilir k\u0131lar. \u0130lk Azure sanal makinenizi da\u011f\u0131t\u0131rken bu ad\u0131mlar\u0131 tek tek uygulayarak, Terraform&#8217;un temel prensiplerini ve g\u00fcc\u00fcn\u00fc bizzat deneyimleyeceksiniz. Bulut altyap\u0131n\u0131z\u0131n gelece\u011fi, IaC ile kodlan\u0131yor ve Terraform bu gelece\u011fin en \u00f6nemli temsilcilerinden biri.<\/p>\n<h2 id=\"azure-ortamini-hazirlama-ve-terraform-kurulumu-nasil-yapilir\">Azure Ortam\u0131n\u0131 Haz\u0131rlama ve Terraform Kurulumu Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>\u0130lk Azure VM&#8217;inizi Terraform ile da\u011f\u0131tmadan \u00f6nce, \u00e7al\u0131\u015fma ortam\u0131m\u0131z\u0131 haz\u0131rlamam\u0131z gerekiyor. Bu s\u00fcre\u00e7 iki ana b\u00f6l\u00fcmden olu\u015fuyor: Azure hesab\u0131m\u0131z\u0131 yap\u0131land\u0131rmak ve yerel makinemize Terraform&#8217;u kurmak. Her iki ad\u0131m da kritik \u00f6neme sahip olup, sorunsuz bir ba\u015flang\u0131\u00e7 i\u00e7in dikkatle takip edilmelidir.<\/p>\n<h3>Azure Hesab\u0131n\u0131z\u0131 ve Kimlik Do\u011frulamas\u0131n\u0131 Nas\u0131l Yap\u0131land\u0131r\u0131rs\u0131n\u0131z?<\/h3>\n<p>Terraform&#8217;un Azure kaynaklar\u0131n\u0131z\u0131 y\u00f6netebilmesi i\u00e7in, Azure hesab\u0131n\u0131za eri\u015fim yetkisine sahip olmas\u0131 gerekir. Bu eri\u015fimi sa\u011flaman\u0131n en yayg\u0131n ve g\u00fcvenli yolu, Azure CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc) kullanarak kimlik do\u011frulamas\u0131 yapmakt\u0131r. Azure CLI, hem Terraform i\u00e7in kimlik do\u011frulama sa\u011flar hem de Terraform kullanmadan \u00f6nce Azure kaynaklar\u0131n\u0131 manuel olarak do\u011frulaman\u0131za yard\u0131mc\u0131 olabilir.<\/p>\n<p><strong>1. Azure CLI Kurulumu:<\/strong><\/p>\n<p>\u00d6ncelikle, yerel makinenize Azure CLI&#8217;yi kurman\u0131z gerekiyor. Kurulum talimatlar\u0131 i\u015fletim sisteminize g\u00f6re de\u011fi\u015fiklik g\u00f6sterir:<\/p>\n<ul>\n<li><strong>Windows:<\/strong> <a href=\"https:\/\/docs.microsoft.com\/tr-tr\/cli\/azure\/install-azure-cli-windows\">Microsoft Docs &#8211; Windows i\u00e7in Azure CLI y\u00fckleme<\/a><\/li>\n<li><strong>macOS:<\/strong> <a href=\"https:\/\/docs.microsoft.com\/tr-tr\/cli\/azure\/install-azure-cli-macos\">Microsoft Docs &#8211; macOS i\u00e7in Azure CLI y\u00fckleme<\/a><\/li>\n<li><strong>Linux:<\/strong> <a href=\"https:\/\/docs.microsoft.com\/tr-tr\/cli\/azure\/install-azure-cli-linux\">Microsoft Docs &#8211; Linux i\u00e7in Azure CLI y\u00fckleme<\/a><\/li>\n<\/ul>\n<p>Kurulumu tamamlad\u0131ktan sonra, bir terminal veya komut istemcisi a\u00e7arak a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak do\u011fru \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">az --version\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Azure CLI'nin s\u00fcr\u00fcm bilgilerini g\u00f6sterecektir.<\/p>\n<p><strong>2. Azure Hesab\u0131n\u0131zda Oturum A\u00e7ma:<\/strong><\/p>\n<p>Terraform'un Azure ile etkile\u015fime ge\u00e7ebilmesi i\u00e7in, Azure CLI \u00fczerinden hesab\u0131n\u0131zda oturum a\u00e7man\u0131z gerekmektedir. Terminalinizde \u015fu komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">az login\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, web taray\u0131c\u0131n\u0131z otomatik olarak a\u00e7\u0131lacak ve Azure kimlik bilgilerinizle oturum a\u00e7man\u0131z istenecektir. Oturum a\u00e7ma i\u015flemi tamamland\u0131ktan sonra, terminalinizde abonelik bilgileriniz listelenecektir. E\u011fer birden fazla Azure aboneli\u011finiz varsa, Terraform'un hangi aboneli\u011fi kullanaca\u011f\u0131n\u0131 belirtmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullanarak varsay\u0131lan aboneli\u011fi ayarlayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">az account set --subscription \"Abonelik Ad\u0131n\u0131z veya ID'niz\"\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: G\u00fcvenlik ve otomasyon senaryolar\u0131 i\u00e7in, <code>az login<\/code> yerine bir Hizmet Prensibi (Service Principal) kullanarak kimlik do\u011frulamas\u0131n\u0131 sa\u011flamak daha g\u00fcvenlidir. Bu y\u00f6ntem, \u00fcretim ortamlar\u0131 ve CI\/CD pipeline'lar\u0131 i\u00e7in \u00f6nerilir.\n<\/div>\n<p>Bu ad\u0131mlarla, Terraform'un Azure kaynaklar\u0131n\u0131z\u0131 y\u00f6netmesi i\u00e7in gerekli olan kimlik do\u011frulama altyap\u0131s\u0131n\u0131 kurmu\u015f oluyorsunuz. Art\u0131k Terraform'un kendisini kurmaya ge\u00e7ebiliriz.<\/p>\n<h3>Yerel Makinenize Terraform Nas\u0131l Kurulur?<\/h3>\n<p>Terraform kurulumu olduk\u00e7a basittir ve HashiCorp'un resmi web sitesinden indirilebilir. \u0130\u015fletim sisteminize uygun paketi indirip PATH'inize eklemeniz yeterlidir.<\/p>\n<p><strong>1. Terraform'u \u0130ndirme:<\/strong><\/p>\n<p>Terraform'un en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc <a href=\"https:\/\/www.terraform.io\/downloads\">Terraform \u0130ndirme Sayfas\u0131<\/a> adresinden indirin. \u0130\u015fletim sisteminize (Windows, macOS, Linux) uygun olan paketi se\u00e7ti\u011finizden emin olun.<\/p>\n<p><strong>2. Kurulum ve PATH Yap\u0131land\u0131rmas\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Windows:<\/strong> \u0130ndirdi\u011finiz ZIP dosyas\u0131n\u0131 a\u00e7\u0131n ve <code>terraform.exe<\/code> dosyas\u0131n\u0131 bilgisayar\u0131n\u0131zda kolayca eri\u015febilece\u011finiz bir yere (\u00f6rne\u011fin <code>C:\\terraform<\/code>) kopyalay\u0131n. Ard\u0131ndan, bu dizini sisteminizin PATH ortam de\u011fi\u015fkenine eklemeniz gerekiyor. Bunu \"Sistem \u00d6zellikleri\" -> \"Ortam De\u011fi\u015fkenleri\" \u00fczerinden yapabilirsiniz.<\/li>\n<li><strong>macOS:<\/strong> \u0130ndirdi\u011finiz ZIP dosyas\u0131n\u0131 a\u00e7\u0131n ve <code>terraform<\/code> ikili dosyas\u0131n\u0131 <code>\/usr\/local\/bin<\/code> gibi PATH'inizde bulunan bir dizine ta\u015f\u0131y\u0131n. \u00d6rne\u011fin:\n<pre><code class=\"language-bash\">unzip terraform_1.x.x_darwin_amd64.zip\nsudo mv terraform \/usr\/local\/bin\/\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>Linux:<\/strong> macOS'e benzer \u015fekilde, indirdi\u011finiz ZIP dosyas\u0131n\u0131 a\u00e7\u0131n ve <code>terraform<\/code> ikili dosyas\u0131n\u0131 PATH'inizdeki bir dizine ta\u015f\u0131y\u0131n (\u00f6rne\u011fin <code>\/usr\/local\/bin<\/code>).\n<pre><code class=\"language-bash\">unzip terraform_1.x.x_linux_amd64.zip\nsudo mv terraform \/usr\/local\/bin\/\n<\/pre>\n<p><\/code>\n    <\/li>\n<\/ul>\n<p><strong>3. Kurulumu Do\u011frulama:<\/strong><\/p>\n<p>Kurulumu tamamlad\u0131ktan sonra, bir terminal veya komut istemcisi a\u00e7arak a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak Terraform'un do\u011fru \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">terraform --version\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Terraform'un s\u00fcr\u00fcm bilgilerini g\u00f6sterecektir. E\u011fer s\u00fcr\u00fcm bilgisi g\u00f6r\u00fcn\u00fcyorsa, Terraform ba\u015far\u0131yla kurulmu\u015f demektir. Art\u0131k Azure altyap\u0131n\u0131z\u0131 kodla tan\u0131mlamak ve ilk sanal makinenizi da\u011f\u0131tmak i\u00e7in haz\u0131rs\u0131n\u0131z!<\/p>\n<p>Bu a\u015famalar\u0131n her biri, Terraform ile Azure'da sorunsuz bir da\u011f\u0131t\u0131m deneyimi ya\u015faman\u0131z i\u00e7in temel olu\u015fturur. Do\u011fru kimlik do\u011frulamas\u0131 ve ara\u00e7 kurulumu olmadan, karma\u015f\u0131k altyap\u0131lar\u0131 y\u00f6netmek m\u00fcmk\u00fcn olmayacakt\u0131r. Dolay\u0131s\u0131yla, bu ad\u0131mlar\u0131 sab\u0131rla ve dikkatle tamamlamak, ba\u015far\u0131l\u0131 bir ba\u015flang\u0131c\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2 id=\"ilk-azure-sanal-makinenizi-terraform-ile-nasil-dagitirsiniz\">\u0130lk Azure Sanal Makinenizi Terraform ile Nas\u0131l Da\u011f\u0131t\u0131rs\u0131n\u0131z?<\/h2>\n<p>Tebrikler! Azure ortam\u0131n\u0131z\u0131 haz\u0131rlad\u0131n\u0131z ve Terraform'u ba\u015far\u0131yla kurdunuz. \u015eimdi, Terraform'un g\u00fcc\u00fcn\u00fc kullanarak ilk Azure sanal makinenizi (VM) da\u011f\u0131tma zaman\u0131 geldi. Bu b\u00f6l\u00fcmde, ad\u0131m ad\u0131m bir sanal makineyi ve ba\u011f\u0131ml\u0131 kaynaklar\u0131n\u0131 (kaynak grubu, sanal a\u011f, alt a\u011f, a\u011f g\u00fcvenlik grubu, genel IP adresi ve a\u011f aray\u00fcz\u00fc) nas\u0131l tan\u0131mlayaca\u011f\u0131m\u0131z\u0131 ve da\u011f\u0131taca\u011f\u0131m\u0131z\u0131 \u00f6\u011freneceksiniz.<\/p>\n<h3>Ad\u0131m 1: Terraform Yap\u0131land\u0131rma Dosyalar\u0131n\u0131 Olu\u015fturma<\/h3>\n<p>Terraform, altyap\u0131n\u0131z\u0131 tan\u0131mlamak i\u00e7in <code>.tf<\/code> uzant\u0131l\u0131 dosyalar kullan\u0131r. Genellikle bu dosyalar\u0131 mant\u0131ksal olarak ay\u0131r\u0131r\u0131z: sa\u011flay\u0131c\u0131 yap\u0131land\u0131rmas\u0131, de\u011fi\u015fkenler, kaynaklar ve \u00e7\u0131kt\u0131lar. Bo\u015f bir dizin olu\u015fturun ve i\u00e7ine bu dosyalar\u0131 ekleyin.<\/p>\n<h4><code>main.tf<\/code>: Sa\u011flay\u0131c\u0131 ve Kaynak Grubunu Tan\u0131mlama<\/h4>\n<p>Bu dosya, Terraform'un Azure ile etkile\u015fim kurmas\u0131n\u0131 sa\u011flayan sa\u011flay\u0131c\u0131y\u0131 (provider) ve t\u00fcm kaynaklar\u0131m\u0131z\u0131 bar\u0131nd\u0131racak olan kaynak grubunu tan\u0131mlar. Azure sa\u011flay\u0131c\u0131s\u0131n\u0131 kullanaca\u011f\u0131m\u0131z\u0131 belirtmeli ve Azure CLI arac\u0131l\u0131\u011f\u0131yla kimlik do\u011frulamas\u0131n\u0131 sa\u011flamal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-hcl\"># Azure Sa\u011flay\u0131c\u0131s\u0131n\u0131 Yap\u0131land\u0131rma\n# Bu blok, Terraform'a Azure kaynaklar\u0131n\u0131 y\u00f6netmek i\u00e7in Azure sa\u011flay\u0131c\u0131s\u0131n\u0131 kullanmas\u0131n\u0131 s\u00f6yler.\n# CLI kimlik do\u011frulamas\u0131 kulland\u0131\u011f\u0131m\u0131z i\u00e7in 'features' blo\u011fu gereklidir.\nterraform {\n  required_providers {\n    azurerm = {\n      source  = \"hashicorp\/azurerm\"\n      version = \"~> 3.0\" # En az 3.0 s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131n\n    }\n  }\n}\n\nprovider \"azurerm\" {\n  features {} # Azure CLI ile kimlik do\u011frulamas\u0131n\u0131 sa\u011flar.\n}\n\n# Kaynak Grubunu Tan\u0131mlama\n# Azure'daki t\u00fcm kaynaklar\u0131m\u0131z bu kaynak grubunun alt\u0131nda toplanacakt\u0131r.\n# Kaynak grubunun ad\u0131n\u0131 ve lokasyonunu belirtiriz.\nresource \"azurerm_resource_group\" \"rg\" {\n  name     = var.resource_group_name\n  location = var.location\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Burada <code>azurerm_resource_group<\/code> kayna\u011f\u0131, Azure'da bir kaynak grubu olu\u015fturur. <code>name<\/code> ve <code>location<\/code> gibi de\u011ferleri de\u011fi\u015fkenlerden al\u0131yoruz, bu da yap\u0131land\u0131rmam\u0131z\u0131 daha esnek hale getiriyor.<\/p>\n<h4><code>variables.tf<\/code>: De\u011fi\u015fkenleri Tan\u0131mlama<\/h4>\n<p>De\u011fi\u015fkenler, Terraform yap\u0131land\u0131rman\u0131z\u0131 daha dinamik ve yeniden kullan\u0131labilir hale getirir. Sanal makine ad\u0131, konum, y\u00f6netici kullan\u0131c\u0131 ad\u0131 ve parola gibi de\u011ferleri bu dosyada tan\u0131mlayaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-hcl\"># location de\u011fi\u015fkeni, kaynaklar\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 Azure b\u00f6lgesini belirler.\nvariable \"location\" {\n  description = \"Azure kaynaklar\u0131n\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 b\u00f6lge.\"\n  type        = string\n  default     = \"West Europe\" # Varsay\u0131lan olarak Bat\u0131 Avrupa'y\u0131 kullanabiliriz.\n}\n\n# resource_group_name de\u011fi\u015fkeni, olu\u015fturulacak kaynak grubunun ad\u0131n\u0131 belirler.\nvariable \"resource_group_name\" {\n  description = \"Olu\u015fturulacak kaynak grubunun ad\u0131.\"\n  type        = string\n  default     = \"my-terraform-rg\"\n}\n\n# vm_name de\u011fi\u015fkeni, olu\u015fturulacak sanal makinenin ad\u0131n\u0131 belirler.\nvariable \"vm_name\" {\n  description = \"Olu\u015fturulacak Sanal Makinenin Ad\u0131.\"\n  type        = string\n  default     = \"my-terraform-vm\"\n}\n\n# admin_username de\u011fi\u015fkeni, sanal makineye SSH\/RDP ile ba\u011flanmak i\u00e7in kullan\u0131lacak kullan\u0131c\u0131 ad\u0131n\u0131 belirler.\nvariable \"admin_username\" {\n  description = \"Sanal Makine i\u00e7in y\u00f6netici kullan\u0131c\u0131 ad\u0131.\"\n  type        = string\n  default     = \"adminuser\"\n}\n\n# admin_password de\u011fi\u015fkeni, sanal makine i\u00e7in y\u00f6netici parolas\u0131n\u0131 belirler.\n# Dikkat: \u00dcretim ortamlar\u0131nda bu \u015fekilde do\u011frudan parola kullanmak yerine Azure Key Vault veya SSH anahtarlar\u0131 tercih edilmelidir.\nvariable \"admin_password\" {\n  description = \"Sanal Makine i\u00e7in y\u00f6netici parolas\u0131.\"\n  type        = string\n  sensitive   = true # Bu de\u011fi\u015fkenin \u00e7\u0131kt\u0131larda g\u00f6r\u00fcnmemesini sa\u011flar.\n}\n\n# vm_size de\u011fi\u015fkeni, sanal makinenin boyutunu (SKU) belirler.\nvariable \"vm_size\" {\n  description = \"Sanal Makinenin boyutu (SKU).\"\n  type        = string\n  default     = \"Standard_B1s\" # D\u00fc\u015f\u00fck maliyetli bir boyut.\n}\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Hassas verileri (parolalar gibi) do\u011frudan Terraform dosyalar\u0131na yazmaktan ka\u00e7\u0131n\u0131n. Bunun yerine Azure Key Vault gibi bir gizli dizi y\u00f6netim hizmetini veya SSH anahtarlar\u0131n\u0131 kullan\u0131n. <code>sensitive = true<\/code> kullan\u0131m\u0131 \u00e7\u0131kt\u0131larda g\u00f6r\u00fcnmesini engeller ama dosyada yine de bulunur.\n<\/div>\n<h3>Ad\u0131m 2: Azure A\u011f Altyap\u0131s\u0131n\u0131 Tasvir Etme<\/h3>\n<p>Sanal makineyi da\u011f\u0131tmadan \u00f6nce, onun ileti\u015fim kurabilece\u011fi bir a\u011f altyap\u0131s\u0131 olu\u015fturmal\u0131y\u0131z. Bu, bir Sanal A\u011f (VNet), bir Alt A\u011f (Subnet), bir A\u011f G\u00fcvenlik Grubu (NSG) ve bir Genel IP adresi i\u00e7erir. A\u011f aray\u00fcz\u00fc (NIC) bu bile\u015fenleri bir araya getiren k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h4><code>network.tf<\/code>: A\u011f Kaynaklar\u0131n\u0131 Tan\u0131mlama<\/h4>\n<p>Bu dosya, sanal makinenizin ba\u011flanaca\u011f\u0131 a\u011f altyap\u0131s\u0131n\u0131 i\u00e7erir.<\/p>\n<pre><code class=\"language-hcl\"># Sanal A\u011f (Virtual Network) Olu\u015fturma\n# T\u00fcm a\u011f kaynaklar\u0131m\u0131z bu sanal a\u011f i\u00e7inde yer alacakt\u0131r.\nresource \"azurerm_virtual_network\" \"vnet\" {\n  name                = \"${var.vm_name}-vnet\"\n  address_space       = [\"10.0.0.0\/16\"]\n  location            = azurerm_resource_group.rg.location\n  resource_group_name = azurerm_resource_group.rg.name\n}\n\n# Alt A\u011f (Subnet) Olu\u015fturma\n# Sanal a\u011f i\u00e7indeki bir segmenttir ve sanal makinemiz bu alt a\u011fa ba\u011flanacakt\u0131r.\nresource \"azurerm_subnet\" \"subnet\" {\n  name                 = \"${var.vm_name}-subnet\"\n  resource_group_name  = azurerm_resource_group.rg.name\n  virtual_network_name = azurerm_virtual_network.vnet.name\n  address_prefixes     = [\"10.0.1.0\/24\"]\n}\n\n# A\u011f G\u00fcvenlik Grubu (Network Security Group - NSG) Olu\u015fturma\n# Sanal makineye gelen ve giden trafi\u011fi kontrol etmek i\u00e7in kullan\u0131l\u0131r.\nresource \"azurerm_network_security_group\" \"nsg\" {\n  name                = \"${var.vm_name}-nsg\"\n  location            = azurerm_resource_group.rg.location\n  resource_group_name = azurerm_resource_group.rg.name\n\n  security_rule {\n    name                       = \"SSH\" # SSH ba\u011flant\u0131s\u0131 i\u00e7in kural\n    priority                   = 1001\n    direction                  = \"Inbound\"\n    access                     = \"Allow\"\n    protocol                   = \"Tcp\"\n    source_port_range          = \"*\"\n    destination_port_range     = \"22\" # SSH i\u00e7in standart port\n    source_address_prefix      = \"*\" # Herhangi bir IP'den eri\u015fime izin verir (\u00dcretimde k\u0131s\u0131tlay\u0131n!)\n    destination_address_prefix = \"*\"\n  }\n}\n\n# Genel IP Adresi (Public IP Address) Olu\u015fturma\n# Sanal makineye internet \u00fczerinden eri\u015fim sa\u011flamak i\u00e7in kullan\u0131l\u0131r.\nresource \"azurerm_public_ip\" \"public_ip\" {\n  name                = \"${var.vm_name}-public-ip\"\n  location            = azurerm_resource_group.rg.location\n  resource_group_name = azurerm_resource_group.rg.name\n  allocation_method   = \"Dynamic\" # Veya \"Static\" olabilir.\n}\n\n# A\u011f Aray\u00fcz\u00fc (Network Interface - NIC) Olu\u015fturma\n# Sanal makineyi sanal a\u011fa ba\u011flayan bile\u015fendir.\nresource \"azurerm_network_interface\" \"nic\" {\n  name                = \"${var.vm_name}-nic\"\n  location            = azurerm_resource_group.rg.location\n  resource_group_name = azurerm_resource_group.rg.name\n\n  ip_configuration {\n    name                          = \"internal\"\n    subnet_id                     = azurerm_subnet.subnet.id\n    private_ip_address_allocation = \"Dynamic\"\n    public_ip_address_id          = azurerm_public_ip.public_ip.id\n  }\n}\n\n# A\u011f G\u00fcvenlik Grubunu A\u011f Aray\u00fcz\u00fcne Ba\u011flama\n# Olu\u015fturdu\u011fumuz NSG'yi NIC'imize atar\u0131z.\nresource \"azurerm_network_interface_security_group_association\" \"nic_nsg_association\" {\n  network_interface_id      = azurerm_network_interface.nic.id\n  network_security_group_id = azurerm_network_security_group.nsg.id\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu b\u00f6l\u00fcmde, sanal a\u011fdan ba\u015flayarak alt a\u011f, g\u00fcvenlik grubu ve genel IP'ye kadar t\u00fcm a\u011f bile\u015fenlerini tan\u0131mlad\u0131k. \u00d6zellikle SSH (22) portuna izin veren bir g\u00fcvenlik kural\u0131 ekledik. \u00dcretim ortamlar\u0131nda <code>source_address_prefix<\/code> de\u011ferini kendi IP adresinizle k\u0131s\u0131tlamay\u0131 unutmay\u0131n!<\/p>\n<h3>Ad\u0131m 3: Sanal Makine Kayna\u011f\u0131n\u0131 Tan\u0131mlama<\/h3>\n<p>\u015eimdi s\u0131ra geldi ana bile\u015fenimiz olan Azure sanal makinesini tan\u0131mlamaya. Linux veya Windows bir VM se\u00e7ebiliriz. Bu \u00f6rnekte bir Linux (Ubuntu) VM olu\u015fturaca\u011f\u0131z.<\/p>\n<h4><code>vm.tf<\/code>: Sanal Makine Kayna\u011f\u0131n\u0131 Tan\u0131mlama<\/h4>\n<pre><code class=\"language-hcl\"># Sanal Makine (Virtual Machine) Olu\u015fturma\n# Linux tabanl\u0131 bir sanal makine olu\u015ftururuz.\nresource \"azurerm_linux_virtual_machine\" \"vm\" {\n  name                = var.vm_name\n  resource_group_name = azurerm_resource_group.rg.name\n  location            = azurerm_resource_group.rg.location\n  size                = var.vm_size # De\u011fi\u015fkenden al\u0131nan VM boyutu\n  admin_username      = var.admin_username\n  admin_password      = var.admin_password\n  disable_password_authentication = false # Parola ile kimlik do\u011frulamas\u0131n\u0131 etkinle\u015ftir\n\n  network_interface_ids = [\n    azurerm_network_interface.nic.id,\n  ]\n\n  os_disk {\n    caching              = \"ReadWrite\"\n    storage_account_type = \"Standard_LRS\"\n  }\n\n  source_image_reference {\n    publisher = \"Canonical\"\n    offer     = \"0001-com-ubuntu-server-focal\"\n    sku       = \"20_04-lts\"\n    version   = \"latest\" # En g\u00fcncel Ubuntu 20.04 LTS s\u00fcr\u00fcm\u00fcn\u00fc kullan\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Burada <code>azurerm_linux_virtual_machine<\/code> kayna\u011f\u0131n\u0131 kullanarak bir Ubuntu VM olu\u015fturduk. Makinenin ad\u0131, boyutu, y\u00f6netici bilgileri ve i\u015fletim sistemi imaj\u0131 gibi detaylar\u0131 belirttik. <code>network_interface_ids<\/code> \u00f6zelli\u011fi ile olu\u015fturdu\u011fumuz NIC'i sanal makineye ba\u011flad\u0131k.<\/p>\n<h3>Ad\u0131m 4: \u00c7\u0131kt\u0131lar\u0131 Tan\u0131mlama (Opsiyonel ama Tavsiye Edilir)<\/h3>\n<p><code>outputs.tf<\/code>: Da\u011f\u0131t\u0131m Sonras\u0131 Bilgileri G\u00f6sterme<\/p>\n<p>Da\u011f\u0131t\u0131m tamamland\u0131ktan sonra, sanal makinenin genel IP adresi gibi \u00f6nemli bilgileri almak isteyebiliriz. <code>outputs.tf<\/code> dosyas\u0131, bu bilgileri Terraform'un uygulamas\u0131n\u0131 tamamlad\u0131ktan sonra terminalde g\u00f6stermesini sa\u011flar.<\/p>\n<pre><code class=\"language-hcl\"># Sanal makinenin genel IP adresini \u00e7\u0131kt\u0131 olarak g\u00f6sterir.\noutput \"public_ip_address\" {\n  description = \"Da\u011f\u0131t\u0131lan sanal makinenin genel IP adresi.\"\n  value       = azurerm_public_ip.public_ip.ip_address\n}\n\n# SSH komutunu kolayca kopyalamak i\u00e7in \u00e7\u0131kt\u0131 olarak g\u00f6sterir.\noutput \"ssh_command\" {\n  description = \"Sanal makineye SSH ile ba\u011flanmak i\u00e7in komut.\"\n  value       = \"ssh ${var.admin_username}@${azurerm_public_ip.public_ip.ip_address}\"\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>Ad\u0131m 5: Terraform Komutlar\u0131n\u0131 Uygulama ve Do\u011frulama<\/h3>\n<p>T\u00fcm <code>.tf<\/code> dosyalar\u0131n\u0131 ayn\u0131 dizine yerle\u015ftirdikten sonra, terminalinizi bu dizinde a\u00e7\u0131n ve a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 uygulay\u0131n:<\/p>\n<p><strong>1. Terraform'u Ba\u015flatma (Initialize):<\/strong><\/p>\n<p>Bu komut, Terraform'un gerekli sa\u011flay\u0131c\u0131 eklentilerini indirmesini ve \u00e7al\u0131\u015fma dizinini ba\u015flatmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">terraform init\n<\/pre>\n<p><\/code><\/p>\n<p>Ba\u015far\u0131l\u0131 bir ba\u015flang\u0131\u00e7tan sonra \"Terraform has been successfully initialized!\" mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<p><strong>2. Da\u011f\u0131t\u0131m Plan\u0131n\u0131 G\u00f6zden Ge\u00e7irme (Plan):<\/strong><\/p>\n<p>Bu komut, Terraform'un yap\u0131land\u0131rma dosyalar\u0131n\u0131z ile mevcut Azure ortam\u0131 aras\u0131ndaki farklar\u0131 analiz etmesini ve uygulayaca\u011f\u0131 t\u00fcm de\u011fi\u015fiklikleri size g\u00f6stermesini sa\u011flar. Herhangi bir de\u011fi\u015fiklik yapmadan \u00f6nce ne olaca\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in bu kritik bir ad\u0131md\u0131r.<\/p>\n<pre><code class=\"language-bash\">terraform plan -var 'admin_password=YourSecurePassword123!'\n<\/pre>\n<p><\/code><\/p>\n<p><code>-var 'admin_password=...'<\/code> ile parolay\u0131 komut sat\u0131r\u0131ndan ge\u00e7irdik. Plan \u00e7\u0131kt\u0131s\u0131, ka\u00e7 kayna\u011f\u0131n eklenece\u011fini (<code>+<\/code>), de\u011fi\u015ftirilece\u011fini (<code>~<\/code>) veya silinece\u011fini (<code>-<\/code>) g\u00f6sterecektir. \u00c7\u0131kt\u0131y\u0131 dikkatlice inceleyin.<\/p>\n<p><strong>3. De\u011fi\u015fiklikleri Uygulama (Apply):<\/strong><\/p>\n<p>E\u011fer plan \u00e7\u0131kt\u0131s\u0131ndan memnunsan\u0131z, bu komut ile Terraform'un planlanan de\u011fi\u015fiklikleri Azure ortam\u0131n\u0131za uygulamas\u0131n\u0131 sa\u011flay\u0131n. Terraform size bir onay isteyecektir; \"yes\" yazarak onaylay\u0131n.<\/p>\n<pre><code class=\"language-bash\">terraform apply -var 'admin_password=YourSecurePassword123!'\n<\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015flem birka\u00e7 dakika s\u00fcrebilir. Uygulama tamamland\u0131\u011f\u0131nda, <code>outputs.tf<\/code> dosyas\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z genel IP adresi ve SSH komutu terminalde g\u00f6sterilecektir.<\/p>\n<p><strong>4. Da\u011f\u0131t\u0131m\u0131 Do\u011frulama:<\/strong><\/p>\n<p>Azure Portal'a gidin, olu\u015fturdu\u011funuz kaynak grubunu bulun ve i\u00e7indeki VM, a\u011f aray\u00fcz\u00fc, genel IP adresi ve NSG'nin ba\u015far\u0131yla olu\u015fturuldu\u011funu kontrol edin. Ayr\u0131ca, terminalde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz SSH komutunu kullanarak sanal makinenize ba\u011flanmay\u0131 deneyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ssh adminuser@<VM_PUBLIC_IP>\n<\/pre>\n<p><\/code><\/p>\n<p><code><VM_PUBLIC_IP><\/code> yerine Terraform \u00e7\u0131kt\u0131s\u0131ndaki IP adresini yaz\u0131n. \u0130stendi\u011finde parolan\u0131z\u0131 girin. Ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011flan\u0131rsan\u0131z, ilk Azure VM'inizi Terraform ile ba\u015far\u0131yla da\u011f\u0131tm\u0131\u015fs\u0131n\u0131z demektir!<\/p>\n<h3>Kaynaklar\u0131 Temizleme: <code>terraform destroy<\/code> Komutu<\/h3>\n<p>Denemeleriniz bitti\u011finde ve bu kaynaklara art\u0131k ihtiyac\u0131n\u0131z kalmad\u0131\u011f\u0131nda, onlar\u0131 g\u00fcvenli bir \u015fekilde kald\u0131rmak \u00f6nemlidir. Terraform, t\u00fcm olu\u015fturulan kaynaklar\u0131 tek bir komutla temizlemenize olanak tan\u0131r.<\/p>\n<pre><code class=\"language-bash\">terraform destroy -var 'admin_password=YourSecurePassword123!'\n<\/pre>\n<p><\/code><\/p>\n<p>Terraform, silecek t\u00fcm kaynaklar\u0131 size listeleyecek ve onay\u0131n\u0131z\u0131 isteyecektir. \"yes\" yazarak onaylad\u0131\u011f\u0131n\u0131zda, t\u00fcm Azure kaynaklar\u0131 aboneli\u011finizden kald\u0131r\u0131lacakt\u0131r. Bu, gereksiz maliyetleri \u00f6nlemek ve ortam\u0131n\u0131z\u0131 temiz tutmak i\u00e7in harika bir yoldur.<\/p>\n<h2 id=\"gercek-dunya-senaryosu-ve-ileri-duzey-ipuclari-nelerdir\">Ger\u00e7ek D\u00fcnya Senaryosu ve \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 Nelerdir?<\/h2>\n<p>Terraform ile ilk Azure VM'inizi da\u011f\u0131tmak, altyap\u0131y\u0131 kod olarak y\u00f6netme yolculu\u011funuzda \u00f6nemli bir ad\u0131md\u0131. Ancak ger\u00e7ek d\u00fcnya senaryolar\u0131 genellikle daha karma\u015f\u0131k ve geli\u015fmi\u015f yakla\u015f\u0131mlar gerektirir. Bu b\u00f6l\u00fcmde, \u00f6\u011frendiklerimizi bir ad\u0131m \u00f6teye ta\u015f\u0131yacak ger\u00e7ek d\u00fcnya vaka analizleri ve ileri d\u00fczey ipu\u00e7lar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Vaka Analizi: \u00c7ok Katmanl\u0131 Bir Uygulama Altyap\u0131s\u0131 Da\u011f\u0131t\u0131m\u0131<\/h3>\n<p>Tek bir sanal makine da\u011f\u0131t\u0131m\u0131 g\u00fczel bir ba\u015flang\u0131\u00e7t\u0131r, ancak \u00e7o\u011fu uygulama \u00e7ok daha karma\u015f\u0131k bir altyap\u0131 gerektirir. \u00d6rne\u011fin, bir web uygulamas\u0131 i\u00e7in genellikle \u015funlara ihtiyac\u0131m\u0131z olur:<\/p>\n<ul>\n<li>Bir y\u00fck dengeleyici (Load Balancer)<\/li>\n<li>Birden fazla \u00f6n u\u00e7 (frontend) web sunucusu (VMSS - Virtual Machine Scale Sets ile)<\/li>\n<li>Bir veya daha fazla arka u\u00e7 (backend) uygulama sunucusu<\/li>\n<li>Bir veritaban\u0131 sunucusu (\u00f6rne\u011fin Azure SQL Database veya PostgreSQL)<\/li>\n<li>Depolama alan\u0131 (\u00f6rne\u011fin Azure Blob Storage)<\/li>\n<li>G\u00fcvenlik duvarlar\u0131, sanal a\u011flar ve alt a\u011flar gibi a\u011f bile\u015fenleri<\/li>\n<\/ul>\n<p>Terraform, t\u00fcm bu bile\u015fenleri tek bir, entegre yap\u0131land\u0131rma seti i\u00e7inde tan\u0131mlaman\u0131za olanak tan\u0131r. \u0130\u015fte b\u00f6yle bir senaryoda nas\u0131l d\u00fc\u015f\u00fcnece\u011fimize dair bir \u00f6rnek:<\/p>\n<p><strong>Senaryo:<\/strong> \u00dc\u00e7 katmanl\u0131 bir web uygulamas\u0131 (Web, Uygulama, Veritaban\u0131) i\u00e7in Azure'da altyap\u0131 da\u011f\u0131t\u0131m\u0131.<\/p>\n<p><strong>Terraform Yakla\u015f\u0131m\u0131:<\/strong><\/p>\n<ol>\n<li><strong>Mod\u00fcler Yap\u0131:<\/strong> T\u00fcm altyap\u0131y\u0131 tek bir <code>.tf<\/code> dosyas\u0131nda tan\u0131mlamak yerine, her katman veya bile\u015fen i\u00e7in ayr\u0131 Terraform mod\u00fclleri olu\u015fturulur. \u00d6rne\u011fin, bir \"network\" mod\u00fcl\u00fc sanal a\u011f\u0131 ve alt a\u011flar\u0131 olu\u015fturur, bir \"web_servers\" mod\u00fcl\u00fc web sunucular\u0131n\u0131 ve y\u00fck dengeleyiciyi kurar, bir \"database\" mod\u00fcl\u00fc ise veritaban\u0131n\u0131 da\u011f\u0131t\u0131r. Bu mod\u00fcler yap\u0131, kodun okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r.<\/li>\n<li><strong>Durum Y\u00f6netimi (State Management):<\/strong> Terraform, da\u011f\u0131tt\u0131\u011f\u0131 altyap\u0131n\u0131n durumunu bir <code>.tfstate<\/code> dosyas\u0131nda saklar. Bu dosya, mevcut altyap\u0131n\u0131n bir haritas\u0131n\u0131 i\u00e7erir. Ekip \u00e7al\u0131\u015fmas\u0131nda, bu dosyan\u0131n payla\u015f\u0131lan bir konumda (\u00f6rne\u011fin Azure Blob Storage'da bir backend yap\u0131land\u0131rmas\u0131 ile) g\u00fcvenli bir \u015fekilde saklanmas\u0131 ve kilitlenmesi (state locking) \u00e7ok \u00f6nemlidir. Bu, ayn\u0131 anda birden fazla ki\u015finin durumu bozmas\u0131n\u0131 engeller.<\/li>\n<li><strong>Veri Kaynaklar\u0131 (Data Sources):<\/strong> Mevcut Azure kaynaklar\u0131n\u0131 (\u00f6rne\u011fin daha \u00f6nce olu\u015fturulmu\u015f bir Sanal A\u011f) Terraform yap\u0131land\u0131rmas\u0131na dahil etmek i\u00e7in veri kaynaklar\u0131 kullan\u0131l\u0131r. Bu, her \u015feyi s\u0131f\u0131rdan olu\u015fturmak yerine mevcut altyap\u0131 ile entegrasyonu sa\u011flar.<\/li>\n<li><strong>Otomatik Da\u011f\u0131t\u0131m (CI\/CD):<\/strong> Terraform da\u011f\u0131t\u0131m s\u00fcre\u00e7leri Jenkins, Azure DevOps, GitHub Actions gibi CI\/CD ara\u00e7lar\u0131na entegre edilebilir. Bu, kod de\u011fi\u015fikliklerinin otomatik olarak test edilip da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar, manuel m\u00fcdahaleyi azalt\u0131r ve da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<\/ol>\n<pre><code class=\"language-hcl\"># \u00d6rnek bir mod\u00fcl \u00e7a\u011fr\u0131s\u0131 (main.tf dosyas\u0131nda olabilir)\nmodule \"network\" {\n  source = \".\/modules\/network\" # Yerel bir network mod\u00fcl\u00fcn\u00fc \u00e7a\u011f\u0131r\u0131r\n  prefix = \"myapp\"\n  location = var.location\n  resource_group_name = azurerm_resource_group.rg.name\n}\n\nmodule \"web_servers\" {\n  source = \".\/modules\/web_servers\"\n  prefix = \"myapp-web\"\n  location = var.location\n  resource_group_name = azurerm_resource_group.rg.name\n  subnet_id = module.network.web_subnet_id # A\u011f mod\u00fcl\u00fcnden gelen \u00e7\u0131kt\u0131y\u0131 kullan\u0131r\n  # Di\u011fer VMSS, y\u00fck dengeleyici ayarlar\u0131...\n}\n\n# Veritaban\u0131 da\u011f\u0131t\u0131m\u0131...\n<\/pre>\n<p><\/code><\/p>\n<h3>Terraform ile Daha Verimli \u00c7al\u0131\u015fmak \u0130\u00e7in \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131<\/h3>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Karma\u015f\u0131k altyap\u0131larda <code>terraform validate<\/code> komutunu s\u0131k\u00e7a kullanarak s\u00f6zdizimi hatalar\u0131n\u0131 erkenden yakalay\u0131n. Ayr\u0131ca, <code>terraform fmt<\/code> ile kodunuzu standart bir bi\u00e7ime sokun.\n<\/div>\n<ol>\n<li><strong>Durum Dosyas\u0131 G\u00fcvenli\u011fi ve Uzak Backend'ler:<\/strong>\n<p><code>.tfstate<\/code> dosyas\u0131, altyap\u0131n\u0131z\u0131n en hassas bilgilerini (\u00f6rne\u011fin kaynak ID'leri, bazen \u015fifrelenmemi\u015f hassas veriler) i\u00e7erir. Bu y\u00fczden yerel makinenizde b\u0131rakmak yerine Azure Storage Blob gibi g\u00fcvenli, uzak bir konuma ta\u015f\u0131y\u0131n. Uzak backend'ler, tak\u0131m i\u00e7inde i\u015fbirli\u011fini de kolayla\u015ft\u0131r\u0131r ve durum kilitleme (state locking) mekanizmalar\u0131 sayesinde ayn\u0131 anda birden fazla ki\u015finin ayn\u0131 durumu de\u011fi\u015ftirmesini engeller.<\/p>\n<pre><code class=\"language-hcl\"># main.tf dosyas\u0131n\u0131n en ba\u015f\u0131na eklenebilir\nterraform {\n  backend \"azurerm\" {\n    resource_group_name  = \"terraform-state-rg\"\n    storage_account_name = \"terrastateaccount\"\n    container_name       = \"tfstate\"\n    key                  = \"terraform.tfstate\"\n  }\n}\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma, Terraform durumunu belirtilen Azure Storage hesab\u0131na kaydedecektir. \u0130lk <code>terraform init<\/code> \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, mevcut yerel durum dosyas\u0131n\u0131 uzak konuma ta\u015f\u0131man\u0131z\u0131 isteyecektir.<\/p>\n<\/li>\n<li><strong>Terraform Mod\u00fclleri:<\/strong>\n<p>Mod\u00fcller, Terraform yap\u0131land\u0131rman\u0131z\u0131 mant\u0131ksal olarak d\u00fczenlemenin ve yeniden kullan\u0131labilirli\u011fini art\u0131rman\u0131n temel yoludur. Tekrarlayan kod bloklar\u0131n\u0131 bir mod\u00fcle d\u00f6n\u00fc\u015ft\u00fcrerek, farkl\u0131 projelerde veya ayn\u0131 proje i\u00e7inde farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) ayn\u0131 altyap\u0131 desenlerini kolayca da\u011f\u0131tabilirsiniz. Azure VM da\u011f\u0131t\u0131m\u0131 \u00f6rne\u011fimizde, VNet, Subnet, NSG gibi a\u011f kaynaklar\u0131n\u0131 bir \"network\" mod\u00fcl\u00fcne, VM ve ilgili bile\u015fenleri ba\u015fka bir \"compute\" mod\u00fcl\u00fcne ay\u0131rabilirsiniz.<\/p>\n<\/li>\n<li><strong>\u00c7al\u0131\u015fma Alanlar\u0131 (Workspaces):<\/strong>\n<p>Ayn\u0131 Terraform yap\u0131land\u0131rmas\u0131n\u0131 kullanarak farkl\u0131, izole ortamlar olu\u015fturmak i\u00e7in \u00e7al\u0131\u015fma alanlar\u0131 (workspaces) kullanabilirsiniz. \u00d6rne\u011fin, \"dev\", \"staging\" ve \"prod\" ad\u0131nda \u00fc\u00e7 \u00e7al\u0131\u015fma alan\u0131 olu\u015fturarak, her ortam i\u00e7in ayn\u0131 kodu kullanabilir ancak farkl\u0131 de\u011fi\u015fken de\u011ferleri (\u00f6rne\u011fin VM boyutlar\u0131, IP aral\u0131klar\u0131) atayabilirsiniz. \u00c7al\u0131\u015fma alanlar\u0131, durumu izole eder ve yanl\u0131\u015fl\u0131kla \u00fcretim ortam\u0131nda de\u011fi\u015fiklik yapma riskini azalt\u0131r.<\/p>\n<pre><code class=\"language-bash\">terraform workspace new dev\nterraform workspace select prod\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><strong><code>depends_on<\/code> Kullan\u0131m\u0131:<\/strong>\n<p>Terraform, kaynaklar aras\u0131ndaki \u00f6rt\u00fck ba\u011f\u0131ml\u0131l\u0131klar\u0131 genellikle otomatik olarak \u00e7\u00f6zer (\u00f6rne\u011fin bir VM'nin NIC'ye ba\u011f\u0131ml\u0131 olmas\u0131). Ancak bazen a\u00e7\u0131k\u00e7a belirtmeniz gereken durumlar olabilir. <code>depends_on<\/code> meta-arg\u00fcman\u0131, Terraform'a belirli bir kayna\u011f\u0131n ba\u015fka bir kaynaktan \u00f6nce olu\u015fturulmas\u0131 veya silinmesi gerekti\u011fini a\u00e7\u0131k\u00e7a s\u00f6ylemenizi sa\u011flar. Genellikle nadiren kullan\u0131l\u0131r, ancak \u00f6zellikle custom scriptlerin veya uygulamalar\u0131n da\u011f\u0131t\u0131m sonras\u0131 \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gereken durumlarda faydal\u0131 olabilir.<\/p>\n<\/li>\n<li><strong><code>for_each<\/code> ve <code>count<\/code> ile Dinamik Kaynak Olu\u015fturma:<\/strong>\n<p>Birden fazla benzer kaynak olu\u015fturman\u0131z gerekti\u011finde (\u00f6rne\u011fin birden fazla VM, birden fazla a\u011f aray\u00fcz\u00fc), <code>count<\/code> ve <code>for_each<\/code> meta-arg\u00fcmanlar\u0131n\u0131 kullanabilirsiniz. <code>count<\/code> belirli say\u0131da \u00f6rne\u011fi olu\u015ftururken, <code>for_each<\/code> daha karma\u015f\u0131k durumlar i\u00e7in (\u00f6rne\u011fin bir liste veya harita \u00fczerindeki her \u00f6\u011fe i\u00e7in bir kaynak olu\u015fturmak) idealdir.<\/p>\n<pre><code class=\"language-hcl\"># count \u00f6rne\u011fi: 3 adet web sunucusu olu\u015fturma\nresource \"azurerm_linux_virtual_machine\" \"web\" {\n  count = 3\n  name = \"web-vm-${count.index}\"\n  # ... di\u011fer \u00f6zellikler\n}\n\n# for_each \u00f6rne\u011fi: farkl\u0131 \u00f6zelliklere sahip VM'ler olu\u015fturma\nresource \"azurerm_linux_virtual_machine\" \"app\" {\n  for_each = {\n    \"app1\" = { size = \"Standard_B1s\", os = \"Ubuntu\" },\n    \"app2\" = { size = \"Standard_B2s\", os = \"CentOS\" }\n  }\n  name = \"app-vm-${each.key}\"\n  size = each.value.size\n  # ... di\u011fer \u00f6zellikler\n}\n        <\/pre>\n<p><\/code>\n    <\/li>\n<\/ol>\n<p>Bu ileri d\u00fczey konular, Terraform ile daha sa\u011flam, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir altyap\u0131lar olu\u015fturman\u0131z i\u00e7in size yol g\u00f6sterecektir. Ger\u00e7ek d\u00fcnya projelerinde bu teknikleri uygulayarak, IaC uzmanl\u0131\u011f\u0131n\u0131z\u0131 geli\u015ftirebilir ve bulut altyap\u0131n\u0131z\u0131 daha verimli bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<h2 id=\"sonuc-terraform-ile-azure-da-geleceginizi-insa-edin\">Sonu\u00e7: Terraform ile Azure'da Gelece\u011finizi \u0130n\u015fa Edin<\/h2>\n<p>Bu makalede, \"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma\" ba\u015fl\u0131\u011f\u0131 alt\u0131nda, altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin \u00f6neminden ba\u015flayarak, Terraform'un temel prensiplerini ve Azure'da ilk sanal makinenizi (VM) da\u011f\u0131tman\u0131n pratik ad\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Azure ortam\u0131n\u0131z\u0131 haz\u0131rlamaktan, Terraform'u kurmaya ve yap\u0131land\u0131rma dosyalar\u0131n\u0131 olu\u015fturup komutlar\u0131 uygulamaya kadar her a\u015famay\u0131 ad\u0131m ad\u0131m takip ettik. Bir kaynak grubu, sanal a\u011f, alt a\u011f, a\u011f g\u00fcvenlik grubu, genel IP adresi ve a\u011f aray\u00fcz\u00fc gibi ba\u011f\u0131ml\u0131 t\u00fcm Azure kaynaklar\u0131n\u0131 Terraform ile nas\u0131l tan\u0131mlayaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendiniz.<\/p>\n<p>\u0130lk VM da\u011f\u0131t\u0131m\u0131n\u0131z sadece bir ba\u015flang\u0131\u00e7t\u0131. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, Terraform'un mod\u00fcler yap\u0131land\u0131rma, uzak durum y\u00f6netimi, \u00e7al\u0131\u015fma alanlar\u0131 ve CI\/CD entegrasyonu gibi ileri d\u00fczey \u00f6zelliklerinin, karma\u015f\u0131k bulut altyap\u0131lar\u0131n\u0131 y\u00f6netmek i\u00e7in ne kadar hayati oldu\u011funu g\u00f6rd\u00fck. Bu ara\u00e7lar, altyap\u0131 s\u00fcre\u00e7lerinizi otomatikle\u015ftirecek, insan hatas\u0131n\u0131 azaltacak, tutarl\u0131l\u0131\u011f\u0131 sa\u011flayacak ve ekipler aras\u0131nda i\u015fbirli\u011fini g\u00fc\u00e7lendirecektir. Altyap\u0131n\u0131z\u0131 kod olarak y\u00f6netmek, sadece bir teknik pratik de\u011fil, ayn\u0131 zamanda DevOps k\u00fclt\u00fcr\u00fcn\u00fcn de temel bir ta\u015f\u0131d\u0131r. Yaz\u0131l\u0131m geli\u015ftirme prensiplerini altyap\u0131ya uygulayarak, daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha \u00f6l\u00e7eklenebilir sistemler in\u015fa edebilirsiniz.<\/p>\n<p>Terraform, bulut sa\u011flay\u0131c\u0131lar\u0131 aras\u0131ndaki ge\u00e7i\u015fi kolayla\u015ft\u0131ran \"buluttan ba\u011f\u0131ms\u0131z\" yap\u0131s\u0131yla da \u00f6ne \u00e7\u0131kmaktad\u0131r. Bir sa\u011flay\u0131c\u0131da \u00f6\u011frendi\u011finiz prensipleri, di\u011ferine kolayca adapte edebilirsiniz. Bu esneklik, \u015firketlerin gelecekteki bulut stratejilerini belirlerken b\u00fcy\u00fck bir avantaj sa\u011flar.<\/p>\n<p>Unutmay\u0131n, bu yolculukta pratik yapmak anahtard\u0131r. K\u00fc\u00e7\u00fck projelerle ba\u015flay\u0131n, hatalar yap\u0131n ve onlardan ders \u00e7\u0131kar\u0131n. Terraform'un zengin kaynak dok\u00fcmantasyonunu ve topluluk deste\u011fini aktif olarak kullan\u0131n. Altyap\u0131n\u0131z\u0131 kodla y\u00f6netme becerisi, g\u00fcn\u00fcm\u00fcz\u00fcn ve gelece\u011fin bulut m\u00fchendisleri i\u00e7in vazge\u00e7ilmez bir yetkinlik haline gelmi\u015ftir. Bu rehberle att\u0131\u011f\u0131n\u0131z ad\u0131mlar, sizi bu heyecan verici alanda uzmanla\u015fmaya bir ad\u0131m daha yakla\u015ft\u0131rd\u0131. Ba\u015far\u0131lar dileriz!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. Terraform neden di\u011fer IaC ara\u00e7lar\u0131ndan (\u00f6rne\u011fin Azure Resource Manager \u015fablonlar\u0131) daha iyi bir se\u00e7enek olabilir?<\/strong><\/p>\n<ul>\n<li>Terraform'un en b\u00fcy\u00fck avantaj\u0131, buluttan ba\u011f\u0131ms\u0131z (cloud-agnostic) olmas\u0131d\u0131r. AWS, GCP, Azure gibi farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131 tek bir ara\u00e7la y\u00f6netebilir. Azure Resource Manager (ARM) \u015fablonlar\u0131 ise sadece Azure'a \u00f6zg\u00fcd\u00fcr. Ayr\u0131ca, Terraform'un HCL dili, JSON tabanl\u0131 ARM \u015fablonlar\u0131na g\u00f6re daha okunabilir ve y\u00f6netilebilir olarak kabul edilir. B\u00fcy\u00fck, \u00e7ok bulutlu (multi-cloud) ortamlarda Terraform, tutarl\u0131 bir y\u00f6netim deneyimi sunar.<\/li>\n<\/ul>\n<p><strong>2. Terraform state dosyas\u0131 nedir ve neden \u00f6nemlidir?<\/strong><\/p>\n<ul>\n<li>Terraform state dosyas\u0131 (<code>.tfstate<\/code>), Terraform'un bulut sa\u011flay\u0131c\u0131n\u0131zda olu\u015fturdu\u011fu ger\u00e7ek d\u00fcnya altyap\u0131s\u0131n\u0131n bir anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcd\u00fcr. Terraform, bir sonraki <code>apply<\/code> komutunda ne gibi de\u011fi\u015fiklikler yapmas\u0131 gerekti\u011fini belirlemek i\u00e7in bu dosyay\u0131 kullan\u0131r; yani mevcut durumu istenen durumla kar\u015f\u0131la\u015ft\u0131r\u0131r. Bu dosya hassas veriler i\u00e7erebilece\u011fi ve i\u015fbirli\u011fi i\u00e7in merkezi olmas\u0131 gerekti\u011fi i\u00e7in, Azure Blob Storage gibi g\u00fcvenli bir uzak depolama alan\u0131nda tutulmas\u0131 ve kilitlenme (state locking) mekanizmalar\u0131n\u0131n kullan\u0131lmas\u0131 kritik \u00f6neme sahiptir.<\/li>\n<\/ul>\n<p><strong>3. Terraform kullanarak Azure VM da\u011f\u0131t\u0131rken g\u00fcvenlik i\u00e7in nelere dikkat etmeliyim?<\/strong><\/p>\n<ul>\n<li>\u00d6ncelikle, hassas verileri (y\u00f6netici parolalar\u0131 gibi) do\u011frudan kod i\u00e7inde tutmaktan ka\u00e7\u0131n\u0131n. Bunun yerine, Azure Key Vault gibi bir gizli dizi y\u00f6netim hizmeti veya SSH anahtarlar\u0131 kullan\u0131n. A\u011f G\u00fcvenlik Gruplar\u0131n\u0131 (NSG) en az ayr\u0131cal\u0131k prensibiyle yap\u0131land\u0131r\u0131n; yani sadece gerekli portlara ve IP aral\u0131klar\u0131ndan eri\u015fime izin verin. Hizmet Prensibi (Service Principal) kullanarak Terraform i\u00e7in Azure kimlik do\u011frulamas\u0131 yap\u0131n ve bu hizmet prensibine yaln\u0131zca ihtiya\u00e7 duydu\u011fu minimum izinleri verin (RBAC). Son olarak, Terraform state dosyas\u0131n\u0131 g\u00fcvenli bir uzak backend'de (\u00f6rne\u011fin Azure Storage) saklay\u0131n ve kilitlenme mekanizmalar\u0131n\u0131 etkinle\u015ftirin.<\/li>\n<\/ul>\n<p><strong>4. Mevcut bir Azure kayna\u011f\u0131n\u0131 Terraform'a nas\u0131l aktarabilirim?<\/strong><\/p>\n<ul>\n<li>Mevcut bir Azure kayna\u011f\u0131n\u0131 Terraform'un y\u00f6netimine almak i\u00e7in <code>terraform import<\/code> komutunu kullanabilirsiniz. Bu komut, Terraform'un mevcut bir kayna\u011f\u0131 Terraform state dosyas\u0131na kaydetmesini sa\u011flar. \u00d6rne\u011fin, <code>terraform import azurerm_resource_group.rg \/subscriptions\/<SUBSCRIPTION_ID>\/resourceGroups\/<RESOURCE_GROUP_NAME><\/code> \u015feklinde kullan\u0131l\u0131r. Import i\u015flemi sonras\u0131, bu kayna\u011f\u0131n tan\u0131m\u0131n\u0131 Terraform yap\u0131land\u0131rma dosyalar\u0131n\u0131za (<code>.tf<\/code>) eklemeniz ve state dosyas\u0131ndakiyle e\u015fle\u015fti\u011finden emin olman\u0131z gerekir.<\/li>\n<\/ul>\n<p><strong>5. Terraform'da mod\u00fcller ne i\u015fe yarar ve ne zaman kullanmal\u0131y\u0131m?<\/strong><\/p>\n<ul>\n<li>Terraform mod\u00fclleri, ilgili kaynaklar\u0131n bir koleksiyonunu tek bir mant\u0131ksal birimde paketlemenizi sa\u011flayan yeniden kullan\u0131labilir yap\u0131land\u0131rma bloklar\u0131d\u0131r. B\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131larda kod tekrar\u0131n\u0131 azaltmak, yap\u0131land\u0131rmay\u0131 organize etmek ve farkl\u0131 projelerde veya ortamlarda ayn\u0131 altyap\u0131 desenlerini tutarl\u0131 bir \u015fekilde da\u011f\u0131tmak i\u00e7in mod\u00fcller kullanmal\u0131s\u0131n\u0131z. \u00d6rne\u011fin, bir \"a\u011f\" mod\u00fcl\u00fc sanal a\u011f, alt a\u011flar ve g\u00fcvenlik gruplar\u0131n\u0131 olu\u015fturabilirken, bir \"sanal makine\" mod\u00fcl\u00fc bir VM'yi ve ilgili a\u011f aray\u00fczlerini da\u011f\u0131tabilir.<\/li>\n<\/ul>\n<style>\n    \/* Responsive design for smaller screens *\/\n    @media (max-width: 768px) {\n        body {\n            font-size: 16px;\n            line-height: 1.6;\n            padding: 10px;\n        }\n        h2 {\n            font-size: 1.8em;\n        }\n        h3 {\n            font-size: 1.4em;\n        }\n        pre {\n            overflow-x: auto; \/* Enable horizontal scrolling for code blocks *\/\n            white-space: pre-wrap; \/* Wrap long lines if needed *\/\n            word-wrap: break-word; \/* Break long words *\/\n        }\n        .expert-tip {\n            font-size: 0.9em;\n            padding: 10px;\n        }\n        table, thead, tbody, th, td, tr {\n            display: block;\n        }\n        thead tr {\n            position: absolute;\n            top: -9999px;\n            left: -9999px;\n        }\n        tr { border: 1px solid #ccc; }\n        td {\n            border: none;\n            border-bottom: 1px solid #eee;\n            position: relative;\n            padding-left: 50%;\n        }\n        td:before {\n            position: absolute;\n            top: 6px;\n            left: 6px;\n            width: 45%;\n            padding-right: 10px;\n            white-space: nowrap;\n            content: attr(data-label);\n            font-weight: bold;\n        }\n    }<\/p>\n<p>    \/* Basic styling for better readability *\/\n    body {\n        font-family: Arial, sans-serif;\n        line-height: 1.8;\n        color: #333;\n        margin: 0 auto;\n        max-width: 900px;\n        padding: 20px;\n        background-color: #f9f9f9;\n    }\n    h2, h3 {\n        color: #2c3e50;\n        margin-top: 30px;\n        margin-bottom: 15px;\n    }\n    h2 {\n        border-bottom: 2px solid #3498db;\n        padding-bottom: 10px;\n    }\n    h3 {\n        color: #34495e;\n    }\n    p {\n        margin-bottom: 1em;\n    }\n    pre {\n        background-color: #ecf0f1;\n        border: 1px solid #bdc3c7;\n        padding: 15px;\n        border-radius: 5px;\n        overflow-x: auto;\n        font-family: \"Courier New\", Courier, monospace;\n        font-size: 0.9em;\n    }\n    code {\n        font-family: \"Courier New\", Courier, monospace;\n        background-color: #e0e0e0;\n        padding: 2px 4px;\n        border-radius: 3px;\n    }\n    ul, ol {\n        margin-left: 20px;\n        margin-bottom: 1em;\n    }\n    li {\n        margin-bottom: 0.5em;\n    }\n    a {\n        color: #3498db;\n        text-decoration: none;\n    }\n    a:hover {\n        text-decoration: underline;\n    }\n    .expert-tip {\n        background-color: #e8f4f8;\n        border-left: 5px solid #3498db;\n        padding: 15px;\n        margin: 20px 0;\n        font-style: italic;\n        color: #2c3e50;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin-bottom: 1em;\n    }\n    th, td {\n        border: 1px solid #ddd;\n        padding: 8px;\n        text-align: left;\n    }\n    th {\n        background-color: #f2f2f2;\n        color: #555;\n    }\n<\/style>\n","protected":false},"excerpt":{"rendered":"Azure&#8217;da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1405],"tags":[],"class_list":{"0":"post-33372","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-azure","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi<\/title>\n<meta name=\"description\" content=\"Azure&#039;da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Azure&#039;da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-02T01:31:33+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2025-11-02T01:31:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\"},\"wordCount\":4697,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Azure\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\",\"name\":\"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-02T01:31:33+00:00\",\"description\":\"Azure'da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi","description":"Azure'da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi","og_description":"Azure'da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-02T01:31:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi","datePublished":"2025-11-02T01:31:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/"},"wordCount":4697,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Azure"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/","name":"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-02T01:31:33+00:00","description":"Azure'da altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmekten s\u0131k\u0131ld\u0131n\u0131z m\u0131? Terraform ile altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin temellerini \u00f6\u011frenin ve ilk Azure sanal makinenizi (VM) dakikalar i\u00e7inde otomatize bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ke\u015ffedin. Bu kapsaml\u0131 rehber, s\u0131f\u0131rdan ba\u015flayarak Azure VM da\u011f\u0131t\u0131m\u0131n\u0131 ad\u0131m ad\u0131m ele al\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-temelleri-ilk-azure-sanal-makinenizi-dagitma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Terraform Temelleri: \u0130lk Azure Sanal Makinenizi Da\u011f\u0131tma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33372"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33372\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}