{"id":44515,"date":"2026-09-04T21:09:18","date_gmt":"2026-09-04T18:09:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/"},"modified":"2026-09-04T21:09:33","modified_gmt":"2026-09-04T18:09:33","slug":"terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/","title":{"rendered":"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi"},"content":{"rendered":"<h2>Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi<\/h2>\n<p>Merhaba! Bulut sunucular\u0131n\u0131 elle kurmaktan, her seferinde ayn\u0131 ayarlar\u0131 t\u0131klamaktan veya bir sunucuya ihtiyac\u0131n oldu\u011funda saatlerce beklemekten s\u0131k\u0131ld\u0131n m\u0131? Ya da ekip arkada\u015f\u0131n\u0131n yapt\u0131\u011f\u0131 bir de\u011fi\u015fikli\u011fin t\u00fcm sistemi alt \u00fcst etmesinden korkuyor musun? \u0130\u015fte tam da bu noktada, sana harika bir kurtar\u0131c\u0131dan bahsedece\u011fim: <strong>Terraform!<\/strong> Gelin, bulut altyap\u0131n\u0131 kodla y\u00f6netmenin en basit ve en haval\u0131 yolunu birlikte ke\u015ffedelim. Bu makalede, Terraform&#8217;un ne oldu\u011fundan, neden bu kadar pop\u00fcler oldu\u011funa ve onu kendi projelerinde nas\u0131l kullanabilece\u011fine kadar her \u015feyi en basit dille anlataca\u011f\u0131m. Haz\u0131rsan, ba\u015flayal\u0131m!<\/p>\n<h3>Terraform Nedir Karde\u015fim? Altyap\u0131n\u0131 Koda D\u00f6kmenin En Kolay Yolu<\/h3>\n<p>\u015eimdi \u015f\u00f6yle d\u00fc\u015f\u00fcn, bir yemek tarifi yaz\u0131yorsun de\u011fil mi? Malzemeler, miktarlar, ad\u0131mlar&#8230; Her \u015fey belli. Bu tarif sayesinde, yeme\u011fi her yapt\u0131\u011f\u0131nda ayn\u0131 lezzeti ve k\u0131vam\u0131 yakal\u0131yorsun. \u0130\u015fte Terraform da senin bulut altyap\u0131n i\u00e7in bir &#8220;yemek tarifi&#8221; gibi. Ama bu tarifte malzemeler sunucular (<code>servers<\/code>), veritabanlar\u0131 (<code>databases<\/code>), a\u011flar (<code>networks<\/code>), depolama birimleri (<code>storage buckets<\/code>) gibi \u015feyler. Biz bu konsepte <strong>Altyap\u0131 Kod Olarak (Infrastructure as Code &#8211; IaC)<\/strong> diyoruz. Yani, elle t\u0131klayarak veya komut sat\u0131r\u0131nda tek tek komutlar yazarak olu\u015fturdu\u011fun t\u00fcm bulut kaynaklar\u0131n\u0131, okunabilir ve y\u00f6netilebilir bir kod dosyas\u0131na d\u00f6n\u00fc\u015ft\u00fcrmek.<\/p>\n<p>Terraform, HashiCorp taraf\u0131ndan geli\u015ftirilmi\u015f a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7. En b\u00fcy\u00fck \u00f6zelli\u011fi, farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131 (AWS, Azure, Google Cloud) ve hatta on-premise (\u015firket i\u00e7i) sistemler i\u00e7in bile ayn\u0131 kodlama dilini kullanabilmen. Yani bir kere Terraform \u00f6\u011freniyorsun, sonra istedi\u011fin bulut platformunda u\u00e7u\u015fa ge\u00e7iyorsun. Bu durum, \u00f6zellikle \u00e7oklu bulut (<code>multi-cloud<\/code>) stratejileri izleyen veya farkl\u0131 projelerde farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131 kullanan \u015firketler i\u00e7in m\u00fcthi\u015f bir kolayl\u0131k sa\u011fl\u0131yor.<\/p>\n<p>Peki, bu ne anlama geliyor? Diyelim ki bir web uygulaman var ve bunu AWS&#8217;e kuracaks\u0131n. Normalde AWS konsoluna girip bir sanal sunucu (EC2), bir veritaban\u0131 (RDS), bir depolama alan\u0131 (S3) ve bir a\u011f (VPC) olu\u015fturman gerekir. Her birini tek tek ayarlars\u0131n. Bu i\u015flem zaman al\u0131c\u0131d\u0131r ve insan hatas\u0131na a\u00e7\u0131kt\u0131r. Ya da ayn\u0131 kurulumu ba\u015fka bir ortam (\u00f6rne\u011fin test ortam\u0131) i\u00e7in tekrar yapman gerekti\u011finde, her \u015feyi ba\u015ftan m\u0131 yapacaks\u0131n? \u0130\u015fte Terraform burada devreye giriyor. T\u00fcm bu kaynaklar\u0131 bir <code>.tf<\/code> uzant\u0131l\u0131 dosyaya yaz\u0131yorsun ve Terraform&#8217;a &#8220;Bana bu tarife g\u00f6re bir altyap\u0131 kur!&#8221; diyorsun. O da senin i\u00e7in saniyeler i\u00e7inde her \u015feyi ayarl\u0131yor. \u00dcstelik, bu kod dosyas\u0131n\u0131 Git gibi bir versiyon kontrol sistemine (<code>version control system<\/code>) y\u00fckleyerek, kimin ne zaman hangi de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131 da takip edebiliyorsun. Bu sayede, &#8220;kim bozdu bunu?&#8221; kavgalar\u0131 da tarihe kar\u0131\u015f\u0131yor!<\/p>\n<p>Terraform&#8217;un bu kadar sevilmesinin bir di\u011fer nedeni de, mevcut altyap\u0131n\u0131 da kodla y\u00f6netebilme yetene\u011fi. Yani, daha \u00f6nce elle kurdu\u011fun bir sunucuyu bile Terraform&#8217;a &#8220;ithal edebilir&#8221; (<code>import<\/code>) ve gelecekteki de\u011fi\u015fiklikleri kod \u00fczerinden yapabilirsin. Bu da eski projeleri modernize etmek isteyenler i\u00e7in b\u00fcy\u00fck bir avantaj. \u00d6zetle, Terraform, altyap\u0131 y\u00f6netimini daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha tekrarlanabilir hale getiren sihirli bir de\u011fnek gibi d\u00fc\u015f\u00fcnebilirsin. Tekrar edilebilir olmak, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k sistemlerde, hatalar\u0131 minimize etmek ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini standartla\u015ft\u0131rmak a\u00e7\u0131s\u0131ndan hayati \u00f6neme sahiptir. Bu sayede, her da\u011f\u0131t\u0131m\u0131n ayn\u0131 kalitede ve ayn\u0131 konfig\u00fcrasyonla ger\u00e7ekle\u015fti\u011finden emin olursun.<\/p>\n<h3>Neden Terraform Kullanmal\u0131y\u0131z? Manuel \u0130\u015flemlere Elveda!<\/h3>\n<p>\u015eimdi gelelim can al\u0131c\u0131 soruya: &#8220;Neden Terraform kullanmal\u0131y\u0131m ki? Ben zaten t\u0131kla t\u0131kla yap\u0131yorum i\u015fimi.&#8221; \u0130\u015fte bu d\u00fc\u015f\u00fcnceyi de\u011fi\u015ftirecek birka\u00e7 sa\u011flam neden:<\/p>\n<ol>\n<li><strong>Tutarl\u0131l\u0131k ve Tekrarlanabilirlik (Consistency &#038; Repeatability):<\/strong> Manuel kurulumlarda hepimiz hata yapar\u0131z. Bir ayar\u0131 unuturuz, yanl\u0131\u015f bir de\u011fer gireriz. Terraform ile bu sorunlar ortadan kalkar. \u00c7\u00fcnk\u00fc altyap\u0131n kodda tan\u0131ml\u0131d\u0131r ve bu kod her \u00e7al\u0131\u015ft\u0131\u011f\u0131nda ayn\u0131 sonucu verir. Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131n\u0131 birebir ayn\u0131 \u015fekilde olu\u015fturabilirsin. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sendromunu ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>H\u0131z ve Otomasyon (Speed &#038; Automation):<\/strong> Bir sunucuya m\u0131 ihtiyac\u0131n var? Eskiden saatler s\u00fcren kurulumlar, Terraform ile dakikalar i\u00e7inde haz\u0131r hale gelir. Yeni bir proje mi ba\u015fl\u0131yor? Birka\u00e7 komutla t\u00fcm altyap\u0131y\u0131 an\u0131nda aya\u011fa kald\u0131rabilirsin. Bu otomasyon, \u00f6zellikle h\u0131zl\u0131 teslimat (<code>rapid deployment<\/code>) ve s\u00fcrekli entegrasyon\/s\u00fcrekli teslimat (<code>CI\/CD<\/code>) s\u00fcre\u00e7lerinde kritik bir rol oynar.<\/li>\n<li><strong>Versiyon Kontrol\u00fc ve Geri Alma (Version Control &#038; Rollback):<\/strong> Kod tabanl\u0131 oldu\u011fu i\u00e7in Terraform yap\u0131land\u0131rma dosyalar\u0131n\u0131 Git gibi sistemlerle y\u00f6netebilirsin. Bu, kimin ne zaman hangi de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131 g\u00f6rmeni, hatal\u0131 bir de\u011fi\u015fikli\u011fi kolayca geri alman\u0131 ve hatta farkl\u0131 versiyonlar aras\u0131nda ge\u00e7i\u015f yapman\u0131 sa\u011flar. Bu \u00f6zellik, altyap\u0131 de\u011fi\u015fikliklerinin denetlenebilirli\u011fini art\u0131r\u0131r ve felaket durumlar\u0131nda h\u0131zl\u0131 kurtarma imkan\u0131 sunar.<\/li>\n<li><strong>Maliyet Optimizasyonu (Cost Optimization):<\/strong> Terraform, &#8220;Ne var ne yok?&#8221; diye bir bak\u0131\u015f atar. Yani, gereksiz kaynaklar\u0131n \u00e7al\u0131\u015fmas\u0131n\u0131 engelleyebilir veya kullan\u0131lmayan kaynaklar\u0131 tespit edip kald\u0131rmana yard\u0131mc\u0131 olabilir. \u00d6rne\u011fin, test ortamlar\u0131n\u0131 sadece ihtiya\u00e7 duyuldu\u011funda a\u00e7\u0131p, i\u015fin bitince kapatarak bulut faturalar\u0131n\u0131 d\u00fc\u015f\u00fcrebilirsin. Ayr\u0131ca, kaynaklar\u0131 standartla\u015ft\u0131rarak ve gereksiz &#8220;g\u00f6lge IT&#8221; (<code>shadow IT<\/code>) olu\u015fumunu engelleyerek maliyetleri daha etkin y\u00f6netebilirsin.<\/li>\n<li><strong>Ortak \u00c7al\u0131\u015fma ve Belgelendirme (Collaboration &#038; Documentation):<\/strong> Terraform kodlar\u0131, altyap\u0131n\u0131n neye benzedi\u011fini a\u00e7\u0131k\u00e7a g\u00f6sterir. Bu, yeni bir ekip \u00fcyesinin sisteme h\u0131zla adapte olmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, kodun kendisi canl\u0131 bir belgelendirme g\u00f6revi g\u00f6r\u00fcr. Ekip \u00fcyeleri, kod \u00fczerinden altyap\u0131 de\u011fi\u015fikliklerini kolayca g\u00f6zden ge\u00e7irebilir ve birlikte \u00e7al\u0131\u015fabilir. Bu, bilgi payla\u015f\u0131m\u0131n\u0131 art\u0131r\u0131r ve ekip i\u00e7inde daha \u015feffaf bir \u00e7al\u0131\u015fma ortam\u0131 yarat\u0131r.<\/li>\n<li><strong>\u00c7oklu Bulut Deste\u011fi (Multi-Cloud Support):<\/strong> AWS, Azure, GCP&#8230; Hangi bulut sa\u011flay\u0131c\u0131s\u0131n\u0131 kullan\u0131rsan kullan, Terraform ile hepsini tek bir dilden y\u00f6netebilirsin. Bu, farkl\u0131 sa\u011flay\u0131c\u0131lar\u0131n g\u00fc\u00e7l\u00fc y\u00f6nlerini kullanmana ve tek bir sa\u011flay\u0131c\u0131ya ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 azaltmana olanak tan\u0131r. \u00d6rne\u011fin, veritaban\u0131n\u0131 bir bulutta, web sunucular\u0131n\u0131 ba\u015fka bir bulutta bar\u0131nd\u0131rarak daha dayan\u0131kl\u0131 ve esnek bir altyap\u0131 kurabilirsin.<\/li>\n<\/ol>\n<p>Ger\u00e7ek d\u00fcnya senaryosuna bakal\u0131m: Bir yaz\u0131l\u0131m \u015firketi d\u00fc\u015f\u00fcn. Her yeni m\u00fc\u015fteri i\u00e7in \u00f6zel bir test ortam\u0131 kurmalar\u0131 gerekiyor. Eskiden bu, her m\u00fc\u015fteri i\u00e7in AWS konsoluna girip ayn\u0131 ad\u0131mlar\u0131 tekrar tekrar yapmak demekti. Bu da hem zaman al\u0131c\u0131 hem de hatalara a\u00e7\u0131kt\u0131. \u015eimdi ise, Terraform ile bu test ortam\u0131n\u0131n &#8220;tarifini&#8221; bir kere yaz\u0131yorlar. Yeni bir m\u00fc\u015fteri geldi\u011finde, sadece bir komutla t\u00fcm ortam\u0131 dakikalar i\u00e7inde haz\u0131r hale getiriyorlar. \u00dcstelik, her ortam birebir ayn\u0131 oluyor, bu da test s\u00fcre\u00e7lerinin g\u00fcvenilirli\u011fini art\u0131r\u0131yor. Bu otomasyon sayesinde, ekip daha \u00e7ok i\u015f geli\u015ftirmeye odaklanabiliyor, manuel operasyonlarla bo\u011fu\u015fmak zorunda kalm\u0131yor.<\/p>\n<h3>Terraform Nas\u0131l \u00c7al\u0131\u015f\u0131r? Temel Ta\u015flar ve \u0130\u015f Ak\u0131\u015f\u0131<\/h3>\n<p>Peki, bu Terraform denen arkada\u015f tam olarak nas\u0131l bir sihir yap\u0131yor? Temel mant\u0131\u011f\u0131n\u0131 ve \u00e7al\u0131\u015fma prensibini anlamak, onu etkin bir \u015fekilde kullanman\u0131n ilk ad\u0131m\u0131. \u0130\u015fte Terraform&#8217;un temel bile\u015fenleri ve i\u015f ak\u0131\u015f\u0131:<\/p>\n<h4>HCL (HashiCorp Configuration Language): Altyap\u0131n\u0131n Dili<\/h4>\n<p>Terraform, altyap\u0131n\u0131 tan\u0131mlamak i\u00e7in kendi dilini kullan\u0131r: <strong>HCL<\/strong>. Bu dil, JSON&#8217;a benzese de, insanlar taraf\u0131ndan daha kolay okunabilir ve yaz\u0131labilir olmas\u0131 i\u00e7in tasarlanm\u0131\u015ft\u0131r. HCL ile hangi bulut sa\u011flay\u0131c\u0131s\u0131n\u0131 kullanaca\u011f\u0131n\u0131, hangi kaynaklar\u0131 (sanal makineler, veritabanlar\u0131, a\u011f kurallar\u0131 vb.) olu\u015fturaca\u011f\u0131n\u0131 ve bu kaynaklar\u0131n \u00f6zelliklerini belirtirsin. \u00d6rne\u011fin, bir AWS EC2 sanal sunucusu olu\u015fturmak i\u00e7in \u015f\u00f6yle bir HCL kodu yazabilirsin:<\/p>\n<div class=\"code-container\">\n<pre><code>\nprovider \"aws\" {\n  region = \"us-east-1\" # Hangi AWS b\u00f6lgesinde \u00e7al\u0131\u015faca\u011f\u0131m\u0131z\u0131 belirtiyoruz\n}\n\nresource \"aws_instance\" \"web_server\" {\n  ami           = \"ami-0abcdef1234567890\" # Kullan\u0131lacak sanal makine imaj\u0131n\u0131n ID'si\n  instance_type = \"t2.micro\" # Sanal makinenin tipi\n  tags = {\n    Name        = \"BenimWebSunucum\"\n    Environment = \"Development\"\n  }\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>G\u00f6rd\u00fc\u011f\u00fcn gibi, olduk\u00e7a anla\u015f\u0131l\u0131r bir yap\u0131ya sahip. <code>provider<\/code> blo\u011fu hangi bulut sa\u011flay\u0131c\u0131s\u0131n\u0131 kullanaca\u011f\u0131m\u0131z\u0131 belirtirken, <code>resource<\/code> blo\u011fu ise olu\u015fturmak istedi\u011fimiz kayna\u011f\u0131 (bu \u00f6rnekte bir AWS EC2 instance&#8217;\u0131) ve onun \u00f6zelliklerini tan\u0131ml\u0131yor.<\/p>\n<h4>Providers (Sa\u011flay\u0131c\u0131lar): Bulutlarla Konu\u015fan Terc\u00fcmanlar<\/h4>\n<p>Terraform&#8217;un farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131yla (AWS, Azure, GCP) ve di\u011fer hizmetlerle (Kubernetes, GitHub vb.) konu\u015fabilmesini sa\u011flayan eklentilere <strong>Provider (Sa\u011flay\u0131c\u0131)<\/strong> denir. Her sa\u011flay\u0131c\u0131, kendi API&#8217;si (Uygulama Programlama Aray\u00fcz\u00fc) arac\u0131l\u0131\u011f\u0131yla ilgili hizmetle etkile\u015fime girer. Yani sen HCL ile &#8220;bana bir AWS S3 kovas\u0131 olu\u015ftur&#8221; dedi\u011finde, AWS sa\u011flay\u0131c\u0131s\u0131 bu iste\u011fi AWS API&#8217;sine uygun bir \u015fekilde \u00e7evirip AWS&#8217;e g\u00f6nderir. Bu sayede, sen farkl\u0131 bulutlar\u0131n karma\u015f\u0131k API detaylar\u0131n\u0131 \u00f6\u011frenmek zorunda kalmazs\u0131n, sadece Terraform&#8217;un basit HCL dilini bilirsin.<\/p>\n<h4>Resources (Kaynaklar): Ger\u00e7ek D\u00fcnya Nesneleri<\/h4>\n<p><code>resource<\/code> bloklar\u0131, Terraform&#8217;un y\u00f6netti\u011fi ger\u00e7ek d\u00fcnya nesneleridir. Bir sanal makine, bir veritaban\u0131, bir depolama kovas\u0131, bir a\u011f g\u00fcvenlik grubu&#8230; Bunlar\u0131n hepsi birer kaynakt\u0131r. Her kaynak t\u00fcr\u00fc, kulland\u0131\u011f\u0131n sa\u011flay\u0131c\u0131ya \u00f6zg\u00fcd\u00fcr (\u00f6rne\u011fin <code>aws_instance<\/code> AWS i\u00e7in, <code>azurerm_virtual_machine<\/code> Azure i\u00e7in). Sen bu kaynaklar\u0131 HCL dosyalar\u0131nda tan\u0131mlars\u0131n, Terraform da bunlar\u0131 bulut platformunda olu\u015fturur, g\u00fcnceller veya siler.<\/p>\n<h4>State File (Durum Dosyas\u0131): Terraform&#8217;un Haf\u0131zas\u0131<\/h4>\n<p>Terraform, senin HCL dosyalar\u0131nda tan\u0131mlad\u0131\u011f\u0131n altyap\u0131 ile ger\u00e7ekte bulutta var olan altyap\u0131 aras\u0131ndaki ili\u015fkiyi bir <strong>durum dosyas\u0131 (<code>state file<\/code>)<\/strong> i\u00e7inde saklar. Bu dosya, Terraform&#8217;un olu\u015fturdu\u011fu t\u00fcm kaynaklar\u0131n bir kayd\u0131n\u0131 tutar. \u00d6rne\u011fin, bir sanal makine olu\u015fturdu\u011funda, Terraform bu sanal makinenin ID&#8217;sini, IP adresini ve di\u011fer \u00f6zelliklerini durum dosyas\u0131na yazar. Bir sonraki Terraform komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131nda, Terraform \u00f6nce bu durum dosyas\u0131na bakar, ard\u0131ndan HCL kodunla kar\u015f\u0131la\u015ft\u0131r\u0131r ve sadece gerekli de\u011fi\u015fiklikleri yapar. Bu dosya genellikle <code>terraform.tfstate<\/code> ad\u0131yla bulunur ve \u00e7ok \u00f6nemlidir! Bu dosya olmadan Terraform, mevcut altyap\u0131n\u0131 tan\u0131yamaz ve y\u00f6netemez.<\/p>\n<h4>Terraform \u0130\u015f Ak\u0131\u015f\u0131: init, plan, apply, destroy<\/h4>\n<p>Terraform ile \u00e7al\u0131\u015fman\u0131n temel bir i\u015f ak\u0131\u015f\u0131 vard\u0131r:<\/p>\n<ol>\n<li><strong><code>terraform init<\/code>:<\/strong> Bu komut, bir Terraform projesine ba\u015flad\u0131\u011f\u0131nda veya yeni sa\u011flay\u0131c\u0131lar\/mod\u00fcller ekledi\u011finde \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Terraform&#8217;un \u00e7al\u0131\u015fma dizinini (<code>working directory<\/code>) ba\u015flat\u0131r, gerekli sa\u011flay\u0131c\u0131 eklentilerini indirir ve arka u\u00e7 (<code>backend<\/code>) yap\u0131land\u0131rmas\u0131n\u0131 ayarlar.<\/li>\n<li><strong><code>terraform plan<\/code>:<\/strong> Bu komut, Terraform&#8217;un HCL kodunu okuyup, mevcut durum dosyas\u0131yla kar\u015f\u0131la\u015ft\u0131rarak bulutta hangi de\u011fi\u015fiklikleri yapaca\u011f\u0131n\u0131 sana g\u00f6sterir. Hi\u00e7bir de\u011fi\u015fiklik yapmaz, sadece bir \u00f6nizleme sunar. Bu, &#8220;Uygula&#8221; demeden \u00f6nce ne olaca\u011f\u0131n\u0131 g\u00f6rmeni sa\u011flar ve olas\u0131 hatalar\u0131n \u00f6n\u00fcne ge\u00e7mek i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<li><strong><code>terraform apply<\/code>:<\/strong> \u0130\u015fte sihrin ger\u00e7ekle\u015fti\u011fi an! Bu komut, <code>plan<\/code> komutunun g\u00f6sterdi\u011fi de\u011fi\u015fiklikleri bulutta uygular. Genellikle senden bir onay (<code>yes<\/code> yazarak) ister. Bu komut, tan\u0131mlad\u0131\u011f\u0131n kaynaklar\u0131 olu\u015fturur, g\u00fcnceller veya siler.<\/li>\n<li><strong><code>terraform destroy<\/code>:<\/strong> Bu komut, Terraform taraf\u0131ndan y\u00f6netilen t\u00fcm kaynaklar\u0131 buluttan siler. Test ortamlar\u0131n\u0131 temizlemek veya bir projeyi tamamen kapatmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. Ancak dikkatli kullan\u0131lmal\u0131d\u0131r, \u00e7\u00fcnk\u00fc geri d\u00f6n\u00fc\u015f\u00fc olmayan bir i\u015flemdir!<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar, Terraform&#8217;u kullanarak altyap\u0131n\u0131 g\u00fcvenli ve kontroll\u00fc bir \u015fekilde y\u00f6netmenin temelini olu\u015fturur. Bu i\u015f ak\u0131\u015f\u0131n\u0131 iyi anlamak, Terraform&#8217;u verimli bir \u015fekilde kullanman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h3>\u0130lk Terraform Projenizi Olu\u015fturmak: Ad\u0131m Ad\u0131m Rehber<\/h3>\n<p>\u015eimdi teoriyi bir kenara b\u0131rak\u0131p, ellerimizi kirletme zaman\u0131! \u0130lk Terraform projemizi olu\u015fturarak bir AWS S3 kovas\u0131 (<code>bucket<\/code>) nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 g\u00f6relim. Bu \u00f6rnek, Terraform&#8217;un temel i\u015fleyi\u015fini anlamana yard\u0131mc\u0131 olacak.<\/p>\n<h4>1. \u00d6n Ko\u015fullar:<\/h4>\n<ul>\n<li><strong>AWS Hesab\u0131:<\/strong> Bir Amazon Web Services (AWS) hesab\u0131n\u0131z olmal\u0131 ve kimlik bilgileriniz (<code>Access Key ID<\/code> ve <code>Secret Access Key<\/code>) yap\u0131land\u0131r\u0131lm\u0131\u015f olmal\u0131. Genellikle bu, AWS CLI&#8217;y\u0131 kurup <code>aws configure<\/code> komutuyla yap\u0131l\u0131r.<\/li>\n<li><strong>Terraform CLI:<\/strong> Bilgisayar\u0131n\u0131za Terraform komut sat\u0131r\u0131 aray\u00fcz\u00fc (<code>Command Line Interface - CLI<\/code>) kurulu olmal\u0131. Kurulum ad\u0131mlar\u0131 i\u00e7in <a href=\"https:\/\/developer.hashicorp.com\/terraform\/downloads\" target=\"_blank\">Terraform resmi sitesini<\/a> ziyaret edebilirsiniz.<\/li>\n<\/ul>\n<h4>2. \u00c7al\u0131\u015fma Dizini Olu\u015fturma:<\/h4>\n<p>Bilgisayar\u0131n\u0131zda yeni bir klas\u00f6r olu\u015fturun ve i\u00e7ine girin. Buras\u0131 projemizin k\u00f6k dizini olacak.<\/p>\n<div class=\"code-container\">\n<pre><code>\nmkdir ilk-terraform-projem\ncd ilk-terraform-projem\n      <\/code><\/pre>\n<\/p><\/div>\n<h4>3. Yap\u0131land\u0131rma Dosyas\u0131 (<code>main.tf<\/code>) Olu\u015fturma:<\/h4>\n<p>Olu\u015fturdu\u011funuz klas\u00f6r\u00fcn i\u00e7ine <code>main.tf<\/code> ad\u0131nda bir dosya a\u00e7\u0131n ve a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<div class=\"code-container\">\n<pre><code>\n# AWS sa\u011flay\u0131c\u0131s\u0131n\u0131 tan\u0131ml\u0131yoruz\nprovider \"aws\" {\n  region = \"eu-central-1\" # Frankfurt b\u00f6lgesini kullan\u0131yoruz, istedi\u011finizi se\u00e7ebilirsiniz\n}\n\n# Bir S3 kovas\u0131 (bucket) kayna\u011f\u0131 tan\u0131ml\u0131yoruz\nresource \"aws_s3_bucket\" \"benim_ilk_kovam\" {\n  bucket = \"benim-super-esiz-terraform-kovam-123456789\" # Kova ismi global olarak e\u015fsiz olmal\u0131!\n  acl    = \"private\" # Kovan\u0131n eri\u015fim kontrol listesi: \u00f6zel\n\n  tags = {\n    Name        = \"Benim \u0130lk Terraform Kovam\"\n    Environment = \"Development\"\n    Owner       = \"21YasindakiGenc\"\n  }\n}\n\n# Olu\u015fturulan kovan\u0131n ismini \u00e7\u0131kt\u0131 olarak alal\u0131m\noutput \"s3_bucket_name\" {\n  description = \"Olu\u015fturulan S3 kovan\u0131n ismi\"\n  value       = aws_s3_bucket.benim_ilk_kovam.bucket\n}\n\n# Olu\u015fturulan kovan\u0131n ID'sini \u00e7\u0131kt\u0131 olarak alal\u0131m\noutput \"s3_bucket_id\" {\n  description = \"Olu\u015fturulan S3 kovan\u0131n ID'si\"\n  value       = aws_s3_bucket.benim_ilk_kovam.id\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p><strong>\u00d6nemli Not:<\/strong> <code>bucket<\/code> ismi AWS i\u00e7inde global olarak e\u015fsiz (<code>globally unique<\/code>) olmal\u0131d\u0131r. Yani kimsenin kullanmad\u0131\u011f\u0131 bir isim se\u00e7melisiniz. Yukar\u0131daki \u00f6rnekte rastgele bir say\u0131 ekledim, siz de kendi e\u015fsiz isminizi belirlemelisiniz.<\/p>\n<h4>4. Terraform Projesini Ba\u015flatma (<code>terraform init<\/code>):<\/h4>\n<p>Terminalde, <code>ilk-terraform-projem<\/code> klas\u00f6r\u00fcn\u00fcn i\u00e7indeyken a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform init\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu komut, AWS sa\u011flay\u0131c\u0131s\u0131n\u0131 indirir ve Terraform&#8217;un \u00e7al\u0131\u015fma dizinini haz\u0131rlar. Ba\u015far\u0131l\u0131 olursa, &#8220;Terraform has been successfully initialized!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h4>5. De\u011fi\u015fiklikleri Planlama (<code>terraform plan<\/code>):<\/h4>\n<p>\u015eimdi Terraform&#8217;un ne yapaca\u011f\u0131n\u0131 g\u00f6relim. Bu komut, hi\u00e7bir de\u011fi\u015fiklik yapmaz, sadece bir \u00f6nizleme sunar:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform plan\n      <\/code><\/pre>\n<\/p><\/div>\n<p>\u00c7\u0131kt\u0131da, Terraform&#8217;un bir adet <code>aws_s3_bucket<\/code> kayna\u011f\u0131 olu\u015fturaca\u011f\u0131n\u0131 (<code>+ create<\/code>) ve bu kayna\u011f\u0131n hangi \u00f6zelliklere sahip olaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde g\u00f6receksiniz. Bu, uygulamadan \u00f6nce her \u015feyi kontrol etmenizi sa\u011flar.<\/p>\n<h4>6. De\u011fi\u015fiklikleri Uygulama (<code>terraform apply<\/code>):<\/h4>\n<p>Planlama ba\u015far\u0131l\u0131ysa ve her \u015fey istedi\u011finiz gibiyse, de\u011fi\u015fiklikleri buluta uygulamak i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform apply\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Terraform size tekrar bir plan g\u00f6sterecek ve &#8220;Do you want to perform these actions?&#8221; diye soracakt\u0131r. \u0130\u015flemi onaylamak i\u00e7in <code>yes<\/code> yaz\u0131p Enter tu\u015funa bas\u0131n. Terraform, S3 kovas\u0131n\u0131 olu\u015fturacak ve i\u015flem tamamland\u0131\u011f\u0131nda \u00e7\u0131kt\u0131da tan\u0131mlad\u0131\u011f\u0131m\u0131z kova ismini ve ID&#8217;sini g\u00f6receksiniz. Art\u0131k AWS konsoluna gidip S3 hizmeti alt\u0131nda &#8220;Benim \u0130lk Terraform Kovam&#8221;\u0131 g\u00f6rebilirsiniz!<\/p>\n<h4>7. Kaynaklar\u0131 Temizleme (<code>terraform destroy<\/code>):<\/h4>\n<p>Denemeleriniz bitti\u011finde ve kaynaklar\u0131 silmek istedi\u011finizde (ki bu, gereksiz maliyetlerden ka\u00e7\u0131nmak i\u00e7in \u00f6nemlidir), a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform destroy\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Yine bir onay istenecek, <code>yes<\/code> yaz\u0131p Enter tu\u015funa basarak kovan\u0131z\u0131 silebilirsiniz. Bu komut, Terraform&#8217;un y\u00f6netti\u011fi t\u00fcm kaynaklar\u0131 buluttan kald\u0131r\u0131r ve durum dosyas\u0131n\u0131 g\u00fcnceller. Bu sayede, bulut hesab\u0131n\u0131zda gereksiz kaynaklar kalmaz.<\/p>\n<p>\u0130\u015fte bu kadar! \u0130lk Terraform projenizi ba\u015far\u0131yla tamamlad\u0131n\u0131z. Bu basit ad\u0131mlarla, bulut altyap\u0131n\u0131z\u0131 kodla y\u00f6netmenin ne kadar kolay oldu\u011funu g\u00f6rm\u00fc\u015f oldunuz. Bu temel prensipleri kullanarak, \u00e7ok daha karma\u015f\u0131k altyap\u0131lar\u0131 bile olu\u015fturabilir ve y\u00f6netebilirsiniz.<\/p>\n<h3>Daha Karma\u015f\u0131k Senaryolar: Mod\u00fcller ve De\u011fi\u015fkenlerle Esneklik<\/h3>\n<p>Sadece tek bir S3 kovas\u0131 olu\u015fturmakla yetinmeyece\u011fiz elbette. Ger\u00e7ek d\u00fcnya projelerinde, altyap\u0131lar \u00e7ok daha karma\u015f\u0131k olabilir ve kodumuzu daha esnek, okunabilir ve tekrar kullan\u0131labilir hale getirmemiz gerekir. \u0130\u015fte burada <strong>de\u011fi\u015fkenler (<code>variables<\/code>)<\/strong> ve <strong>mod\u00fcller (<code>modules<\/code>)<\/strong> devreye giriyor.<\/p>\n<h4>De\u011fi\u015fkenler (Variables): Kodunu Dinamik Yap<\/h4>\n<p>De\u011fi\u015fkenler, Terraform koduna d\u0131\u015far\u0131dan de\u011ferler sa\u011flaman\u0131n bir yoludur. B\u00f6ylece ayn\u0131 kodu farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) veya farkl\u0131 konfig\u00fcrasyonlar i\u00e7in tekrar tekrar yazmak zorunda kalmazs\u0131n. \u00d6rne\u011fin, bir sunucunun tipini veya bir veritaban\u0131n\u0131n boyutunu de\u011fi\u015fken olarak tan\u0131mlayabilirsin.<\/p>\n<p>Bir de\u011fi\u015fken tan\u0131mlamak i\u00e7in <code>variables.tf<\/code> ad\u0131nda bir dosya olu\u015fturabilirsin (veya <code>main.tf<\/code> i\u00e7ine de yazabilirsin):<\/p>\n<div class=\"code-container\">\n<pre><code>\nvariable \"aws_region\" {\n  description = \"AWS kaynaklar\u0131n\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 b\u00f6lge\"\n  type        = string\n  default     = \"eu-central-1\" # Varsay\u0131lan de\u011fer\n}\n\nvariable \"instance_type\" {\n  description = \"EC2 instance tipi\"\n  type        = string\n  default     = \"t2.micro\"\n}\n\nvariable \"ami_id\" {\n  description = \"Kullan\u0131lacak AMI ID\"\n  type        = string\n  default     = \"ami-0abcdef1234567890\" # L\u00fctfen g\u00fcncel bir AMI ID kullan\u0131n\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>\u015eimdi bu de\u011fi\u015fkenleri <code>main.tf<\/code> dosyam\u0131zda nas\u0131l kullanaca\u011f\u0131m\u0131za bakal\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>\nprovider \"aws\" {\n  region = var.aws_region # De\u011fi\u015fkeni burada kullan\u0131yoruz\n}\n\nresource \"aws_instance\" \"web_server\" {\n  ami           = var.ami_id\n  instance_type = var.instance_type\n  tags = {\n    Name = \"Web Sunucusu-${var.aws_region}\"\n  }\n}\n\noutput \"web_server_public_ip\" {\n  description = \"Web sunucusunun genel IP adresi\"\n  value       = aws_instance.web_server.public_ip\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Art\u0131k <code>terraform apply<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131rken bu de\u011fi\u015fkenlere de\u011fer atayabiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform apply -var=\"instance_type=t2.medium\" -var=\"aws_region=us-east-1\"\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Veya bir <code>terraform.tfvars<\/code> dosyas\u0131 olu\u015fturup i\u00e7ine de\u011fi\u015fken de\u011ferlerini yazabiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>\naws_region    = \"us-east-1\"\ninstance_type = \"t2.medium\"\nami_id        = \"ami-0abcdef1234567890\"\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu durumda, <code>terraform apply<\/code> komutunu do\u011frudan \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda Terraform bu dosyay\u0131 otomatik olarak okur.<\/p>\n<h4>Mod\u00fcller (Modules): Tekrar Kullan\u0131labilir Kod Bloklar\u0131<\/h4>\n<p>Mod\u00fcller, Terraform kodunu organize etmenin ve tekrar kullan\u0131labilir hale getirmenin en g\u00fc\u00e7l\u00fc yollar\u0131ndan biridir. Bir mod\u00fcl\u00fc, bir fonksiyon veya bir s\u0131n\u0131f gibi d\u00fc\u015f\u00fcnebilirsin. Belirli bir i\u015flevi (\u00f6rne\u011fin bir web sunucusu ve ona ait g\u00fcvenlik grubu olu\u015fturmak) yerine getiren bir dizi kaynak tan\u0131m\u0131n\u0131 bir araya getirir ve bunu ba\u015fka projelerde veya ayn\u0131 projenin farkl\u0131 yerlerinde kullanabilirsin.<\/p>\n<p>Diyelim ki her projenizde benzer bir web sunucusu yap\u0131s\u0131 kuruyorsunuz. Bunun i\u00e7in bir mod\u00fcl olu\u015fturabilirsiniz:<\/p>\n<p><strong>Klas\u00f6r Yap\u0131s\u0131:<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>\n.\n\u251c\u2500\u2500 main.tf\n\u251c\u2500\u2500 variables.tf\n\u2514\u2500\u2500 modules\/\n    \u2514\u2500\u2500 webserver\/\n        \u251c\u2500\u2500 main.tf\n        \u251c\u2500\u2500 variables.tf\n        \u2514\u2500\u2500 outputs.tf\n      <\/code><\/pre>\n<\/p><\/div>\n<p><strong><code>modules\/webserver\/main.tf<\/code>:<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>\nresource \"aws_instance\" \"app_server\" {\n  ami           = var.ami_id\n  instance_type = var.instance_type\n  tags = {\n    Name        = \"${var.project_name}-webserver\"\n    Environment = var.environment\n  }\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p><strong><code>modules\/webserver\/variables.tf<\/code>:<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>\nvariable \"ami_id\" { type = string }\nvariable \"instance_type\" { type = string }\nvariable \"project_name\" { type = string }\nvariable \"environment\" { type = string }\n      <\/code><\/pre>\n<\/p><\/div>\n<p><strong><code>modules\/webserver\/outputs.tf<\/code>:<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>\noutput \"instance_public_ip\" {\n  value = aws_instance.app_server.public_ip\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>\u015eimdi ana <code>main.tf<\/code> dosyan\u0131zda bu mod\u00fcl\u00fc nas\u0131l kullanaca\u011f\u0131n\u0131za bakal\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>\nprovider \"aws\" {\n  region = \"eu-central-1\"\n}\n\nmodule \"dev_webserver\" {\n  source        = \".\/modules\/webserver\" # Mod\u00fcl\u00fcn yolu\n  ami_id        = \"ami-0abcdef1234567890\"\n  instance_type = \"t2.micro\"\n  project_name  = \"MyWebApp\"\n  environment   = \"development\"\n}\n\nmodule \"prod_webserver\" {\n  source        = \".\/modules\/webserver\"\n  ami_id        = \"ami-0abcdef1234567890\"\n  instance_type = \"t2.medium\" # \u00dcretim i\u00e7in daha g\u00fc\u00e7l\u00fc bir sunucu\n  project_name  = \"MyWebApp\"\n  environment   = \"production\"\n}\n\noutput \"dev_ip\" {\n  value = module.dev_webserver.instance_public_ip\n}\n\noutput \"prod_ip\" {\n  value = module.prod_webserver.instance_public_ip\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>G\u00f6rd\u00fc\u011f\u00fcn gibi, ayn\u0131 mod\u00fcl\u00fc farkl\u0131 parametrelerle iki farkl\u0131 web sunucusu olu\u015fturmak i\u00e7in kulland\u0131k. Bu sayede kod tekrar\u0131n\u0131 azaltt\u0131k ve altyap\u0131m\u0131z\u0131 daha d\u00fczenli hale getirdik. Mod\u00fcller, Terraform&#8217;u b\u00fcy\u00fck ve karma\u015f\u0131k projelerde y\u00f6netmeyi \u00e7ok daha kolay hale getirir. Hatta HashiCorp&#8217;un kendi <a href=\"https:\/\/registry.terraform.io\/\" target=\"_blank\">Terraform Registry<\/a>&#8216;sinde bir\u00e7ok haz\u0131r mod\u00fcl bulabilir ve kendi projelerinizde kullanabilirsiniz.<\/p>\n<h3>Terraform ile G\u00fcvenli ve Verimli \u00c7al\u0131\u015fmak: \u0130pu\u00e7lar\u0131<\/h3>\n<p>Terraform&#8217;u sadece kullanmak yetmez, onu do\u011fru ve g\u00fcvenli bir \u015fekilde kullanmak da \u00f6nemlidir. \u0130\u015fte sana birka\u00e7 \u00f6nemli ipucu:<\/p>\n<h4>1. Durum Dosyas\u0131 (State File) Y\u00f6netimi:<\/h4>\n<p><code>terraform.tfstate<\/code> dosyas\u0131, Terraform&#8217;un kalbidir ve asla kaybolmamal\u0131 veya bozulmamal\u0131d\u0131r. Ekip olarak \u00e7al\u0131\u015f\u0131rken bu dosyan\u0131n yerel bir bilgisayarda kalmas\u0131 b\u00fcy\u00fck sorunlara yol a\u00e7ar. Bu y\u00fczden, durum dosyas\u0131n\u0131 merkezi ve g\u00fcvenli bir yerde saklamal\u0131s\u0131n. \u00c7o\u011fu zaman, bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131n depolama hizmetleri (AWS S3, Azure Blob Storage, Google Cloud Storage) bu i\u015f i\u00e7in kullan\u0131l\u0131r. Bu depolama alanlar\u0131, durum dosyas\u0131n\u0131 g\u00fcvende tutar, versiyonlamay\u0131 destekler ve ekip \u00fcyelerinin ayn\u0131 anda \u00e7al\u0131\u015f\u0131rken \u00e7ak\u0131\u015fmalar\u0131 (<code>race conditions<\/code>) \u00f6nlemek i\u00e7in kilitleme mekanizmalar\u0131 (<code>state locking<\/code>) sunar. \u00d6rne\u011fin, AWS S3&#8217;te durum dosyas\u0131 saklamak i\u00e7in <code>main.tf<\/code> dosyana a\u015fa\u011f\u0131daki gibi bir <code>backend<\/code> blo\u011fu ekleyebilirsin:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform {\n  backend \"s3\" {\n    bucket         = \"benim-terraform-state-kovam\" # Kendi e\u015fsiz kovan\u0131 kullan\n    key            = \"dev\/terraform.tfstate\" # Durum dosyas\u0131n\u0131n yolu ve ismi\n    region         = \"eu-central-1\"\n    encrypt        = true # \u015eifrelemeyi etkinle\u015ftir\n    dynamodb_table = \"terraform-state-lock\" # Kilitleme i\u00e7in DynamoDB tablosu\n  }\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu yap\u0131land\u0131rma, tak\u0131m \u00e7al\u0131\u015fmas\u0131n\u0131 ve durum dosyas\u0131n\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h4>2. Hassas Veri (Secrets) Y\u00f6netimi:<\/h4>\n<p>Veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 gibi hassas bilgileri asla do\u011frudan Terraform koduna (HCL dosyalar\u0131na) yazmamal\u0131s\u0131n. Bu, g\u00fcvenlik a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck bir risktir. Bunun yerine, bu t\u00fcr verileri g\u00fcvenli bir \u015fekilde y\u00f6neten ara\u00e7lar kullanmal\u0131s\u0131n. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>Ortam De\u011fi\u015fkenleri (Environment Variables):<\/strong> Basit durumlar i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Bulut Sa\u011flay\u0131c\u0131n\u0131n Gizli Y\u00f6netim Servisleri:<\/strong> AWS Secrets Manager, Azure Key Vault, Google Secret Manager.<\/li>\n<li><strong>HashiCorp Vault:<\/strong> Daha geli\u015fmi\u015f ve platformdan ba\u011f\u0131ms\u0131z bir \u00e7\u00f6z\u00fcm.<\/li>\n<\/ul>\n<p>Bu ara\u00e7lar, hassas verileri \u015fifreler ve sadece yetkili uygulamalar\u0131n veya kullan\u0131c\u0131lar\u0131n eri\u015fmesine izin verir.<\/p>\n<h4>3. CI\/CD Entegrasyonu (S\u00fcrekli Entegrasyon\/S\u00fcrekli Teslimat):<\/h4>\n<p>Terraform&#8217;u CI\/CD (<code>Continuous Integration\/Continuous Delivery<\/code>) pipeline&#8217;lar\u0131n\u0131za entegre etmek, altyap\u0131 da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi otomatikle\u015ftirmenin en iyi yoludur. Kod de\u011fi\u015fiklikleri bir Git deposuna g\u00f6nderildi\u011finde, CI\/CD arac\u0131 (Jenkins, GitLab CI, GitHub Actions, Azure DevOps) otomatik olarak <code>terraform plan<\/code> ve ard\u0131ndan onaydan sonra <code>terraform apply<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilir. Bu, manuel m\u00fcdahaleyi azalt\u0131r, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131 art\u0131r\u0131r ve insan hatas\u0131 riskini minimize eder.<\/p>\n<h4>4. Naming Conventions (\u0130simlendirme Kurallar\u0131):<\/h4>\n<p>Kaynaklar\u0131n\u0131za tutarl\u0131 ve a\u00e7\u0131klay\u0131c\u0131 isimler vermek, kodunuzun okunabilirli\u011fini art\u0131r\u0131r ve b\u00fcy\u00fck projelerde y\u00f6netimi kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, <code>dev-web-server-01<\/code> veya <code>prod-db-main<\/code> gibi isimler kullanmak, hangi ortamda hangi kayna\u011f\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131 anlamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>5. Yorumlar ve Dok\u00fcmantasyon:<\/h4>\n<p>Karma\u015f\u0131k Terraform kod bloklar\u0131n\u0131 a\u00e7\u0131klay\u0131c\u0131 yorumlarla desteklemek, gelecekteki sen veya ekip arkada\u015flar\u0131n i\u00e7in b\u00fcy\u00fck bir kolayl\u0131k sa\u011flar. Kodun neden b\u00f6yle yaz\u0131ld\u0131\u011f\u0131n\u0131, hangi varsay\u0131mlarla olu\u015fturuldu\u011funu belirtmek, bak\u0131m ve sorun giderme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: E-ticaret Sitesi Altyap\u0131s\u0131<\/h3>\n<p>\u015eimdi Terraform&#8217;un ger\u00e7ek bir senaryoda nas\u0131l hayat kurtard\u0131\u011f\u0131n\u0131 hayal edelim. Diyelim ki, pop\u00fcler bir e-ticaret sitesi kuracaks\u0131n. Bu siteye gelen yo\u011fun trafi\u011fi kald\u0131rabilmeli, \u00fcr\u00fcn bilgilerini g\u00fcvenle saklamal\u0131 ve \u00f6deme i\u015flemlerini sorunsuz y\u00fcr\u00fctmeli. Manuel olarak bu altyap\u0131y\u0131 kurmak bir kabus olurdu, de\u011fil mi? \u0130\u015fte Terraform ile bu i\u015f nas\u0131l kolayla\u015f\u0131yor:<\/p>\n<ol>\n<li><strong>Y\u00fck Dengeleyici (Load Balancer):<\/strong> Sitenin trafi\u011fini birden fazla sunucuya da\u011f\u0131tmak i\u00e7in bir AWS ELB (Elastic Load Balancer) veya Azure Application Gateway tan\u0131mlars\u0131n. Terraform, bu y\u00fck dengeleyiciyi, onun sa\u011fl\u0131k kontrollerini (<code>health checks<\/code>) ve hangi sunuculara trafik g\u00f6nderece\u011fini otomatik olarak yap\u0131land\u0131r\u0131r.<\/li>\n<li><strong>Web Sunucular\u0131 (Web Servers):<\/strong> Uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sanal sunucular\u0131 (AWS EC2, Azure VM) Terraform ile tan\u0131mlars\u0131n. Genellikle bir otomatik \u00f6l\u00e7eklendirme grubu (<code>Auto Scaling Group<\/code>) ile birlikte tan\u0131mlan\u0131r, b\u00f6ylece trafik artt\u0131\u011f\u0131nda otomatik olarak yeni sunucular devreye girer. Mod\u00fcller sayesinde, ayn\u0131 web sunucusu yap\u0131land\u0131rmas\u0131n\u0131 hem geli\u015ftirme hem de \u00fcretim ortamlar\u0131 i\u00e7in kolayca kullanabilirsin.<\/li>\n<li><strong>Veritaban\u0131 (Database):<\/strong> \u00dcr\u00fcn bilgileri, m\u00fc\u015fteri verileri gibi kritik bilgileri saklamak i\u00e7in y\u00f6netilen bir veritaban\u0131 hizmeti (AWS RDS, Azure SQL Database) kullan\u0131rs\u0131n. Terraform, veritaban\u0131n\u0131n tipini, boyutunu, \u015fifresini (g\u00fcvenli bir \u015fekilde Secrets Manager ile entegre ederek), yedekleme ayarlar\u0131n\u0131 ve a\u011f eri\u015fim kurallar\u0131n\u0131 yap\u0131land\u0131r\u0131r.<\/li>\n<li><strong>Depolama (Storage):<\/strong> \u00dcr\u00fcn resimleri, videolar gibi statik dosyalar i\u00e7in bir nesne depolama hizmeti (AWS S3, Azure Blob Storage) tan\u0131mlars\u0131n. Terraform, bu depolama kovalar\u0131n\u0131 olu\u015fturur, eri\u015fim izinlerini ayarlar ve gerekirse bir \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131 (<code>Content Delivery Network - CDN<\/code>) ile entegre eder.<\/li>\n<li><strong>A\u011f Yap\u0131s\u0131 (Networking):<\/strong> T\u00fcm bu kaynaklar\u0131n birbiriyle g\u00fcvenli bir \u015fekilde ileti\u015fim kurabilmesi i\u00e7in sanal a\u011flar (AWS VPC, Azure VNet), alt a\u011flar (<code>subnets<\/code>), g\u00fcvenlik gruplar\u0131 (<code>security groups<\/code>) ve y\u00f6nlendirme tablolar\u0131 (<code>route tables<\/code>) tan\u0131mlars\u0131n. Terraform, bu karma\u015f\u0131k a\u011f topolojisini kod olarak ifade etmeni ve her zaman ayn\u0131 \u015fekilde olu\u015fturman\u0131 sa\u011flar.<\/li>\n<li><strong>DNS Y\u00f6netimi:<\/strong> Sitenin alan ad\u0131n\u0131 (<code>domain name<\/code>) y\u00f6netmek i\u00e7in (AWS Route 53, Azure DNS) Terraform ile DNS kay\u0131tlar\u0131n\u0131 (A kayd\u0131, CNAME vb.) olu\u015fturabilir ve g\u00fcncelleyebilirsin.<\/li>\n<\/ol>\n<p>T\u00fcm bu bile\u015fenleri Terraform HCL dosyalar\u0131nda tan\u0131mlad\u0131ktan sonra, tek bir <code>terraform apply<\/code> komutuyla saniyeler i\u00e7inde t\u00fcm e-ticaret altyap\u0131s\u0131n\u0131 aya\u011fa kald\u0131rabilirsin. Test ortam\u0131 m\u0131 laz\u0131m? Ayn\u0131 kodu farkl\u0131 de\u011fi\u015fkenlerle \u00e7al\u0131\u015ft\u0131r\u0131rs\u0131n. \u00dcretim ortam\u0131nda bir g\u00fcncelleme mi yapacaks\u0131n? Kodda de\u011fi\u015fikli\u011fi yapar, <code>terraform plan<\/code> ile kontrol eder, sonra <code>terraform apply<\/code> ile g\u00fcvenle da\u011f\u0131t\u0131rs\u0131n. Hatta, bu altyap\u0131y\u0131 tamamen silmek istedi\u011finde (belki yeni bir versiyonunu kuracaks\u0131n), <code>terraform destroy<\/code> komutuyla t\u00fcm kaynaklar\u0131 temizleyebilirsin. Bu, hem zaman kazand\u0131r\u0131r hem de insan hatas\u0131ndan kaynaklanan riskleri minimuma indirir. B\u00f6ylece, geli\u015ftiriciler altyap\u0131 kurmakla u\u011fra\u015fmak yerine, sitenin \u00f6zelliklerini geli\u015ftirmeye odaklanabilirler.<\/p>\n<h2>Sonu\u00e7: Terraform ile Gelece\u011fin Altyap\u0131s\u0131n\u0131 \u0130n\u015fa Et<\/h2>\n<p>G\u00f6rd\u00fc\u011f\u00fcn gibi, Terraform bulut altyap\u0131s\u0131 y\u00f6netimini basitle\u015ftiren, h\u0131zland\u0131ran ve g\u00fcvenilir hale getiren g\u00fc\u00e7l\u00fc bir ara\u00e7. 21 ya\u015f\u0131ndaki bir gen\u00e7 olarak, bu teknolojinin ne kadar &#8220;cool&#8221; oldu\u011funu ve gelecekteki kariyerinde sana ne kadar avantaj sa\u011flayaca\u011f\u0131n\u0131 rahatl\u0131kla s\u00f6yleyebilirim. Altyap\u0131y\u0131 kod olarak y\u00f6netmek, art\u0131k modern yaz\u0131l\u0131m geli\u015ftirme ve DevOps s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7as\u0131. Manuel i\u015flemlerin getirdi\u011fi yava\u015fl\u0131k, tutars\u0131zl\u0131k ve hata riskini ortadan kald\u0131rarak, ekiplerin daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011fl\u0131yor. Terraform ile tan\u0131\u015ft\u0131\u011f\u0131nda, bulut kaynaklar\u0131n\u0131 y\u00f6netmek art\u0131k bir angarya olmaktan \u00e7\u0131k\u0131p, keyifli ve kontrol edilebilir bir s\u00fcrece d\u00f6n\u00fc\u015fecek.<\/p>\n<p>Bu makalede, Terraform&#8217;un temel kavramlar\u0131ndan, neden kullanmam\u0131z gerekti\u011fine, ilk projemizi nas\u0131l olu\u015fturaca\u011f\u0131m\u0131za ve daha ileri d\u00fczey \u00f6zelliklerine kadar bir\u00e7ok konuya de\u011findik. Unutma, pratik yapmak \u00e7ok \u00f6nemli. Kendi AWS, Azure veya GCP hesab\u0131nda k\u00fc\u00e7\u00fck projelerle ba\u015flayarak Terraform yeteneklerini geli\u015ftirebilirsin. Gelece\u011fin altyap\u0131s\u0131n\u0131 kodla in\u015fa etmek senin elinde!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>Terraform \u00fccretli mi?<\/strong><\/p>\n<p>Hay\u0131r, Terraform&#8217;un temel s\u00fcr\u00fcm\u00fc a\u00e7\u0131k kaynakl\u0131d\u0131r ve \u00fccretsizdir. HashiCorp&#8217;un Terraform Cloud ve Terraform Enterprise gibi \u00fccretli kurumsal \u00e7\u00f6z\u00fcmleri de bulunmaktad\u0131r, ancak bireysel kullan\u0131m ve k\u00fc\u00e7\u00fck projeler i\u00e7in \u00fccretsiz s\u00fcr\u00fcm fazlas\u0131yla yeterlidir.<\/p>\n<\/li>\n<li>\n            <strong>Terraform sadece bulut sa\u011flay\u0131c\u0131larla m\u0131 \u00e7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>Hay\u0131r, Terraform sadece AWS, Azure, GCP gibi bulut sa\u011flay\u0131c\u0131larla de\u011fil, ayn\u0131 zamanda Kubernetes, GitHub, VMware vSphere, Datadog gibi bir\u00e7ok farkl\u0131 hizmet ve platformla da \u00e7al\u0131\u015fabilir. Bu, Terraform&#8217;u olduk\u00e7a esnek ve \u00e7ok y\u00f6nl\u00fc bir ara\u00e7 yapar.<\/p>\n<\/li>\n<li>\n            <strong>Terraform ile mevcut altyap\u0131m\u0131 nas\u0131l y\u00f6netirim?<\/strong><\/p>\n<p>Mevcut, manuel olarak olu\u015fturulmu\u015f altyap\u0131n\u0131z\u0131 Terraform&#8217;a &#8220;ithal edebilir&#8221; (<code>terraform import<\/code>) ve bu kaynaklar\u0131 Terraform durum dosyas\u0131na dahil edebilirsiniz. Bu i\u015flemden sonra, mevcut altyap\u0131n\u0131z\u0131 HCL kodunuzla e\u015fle\u015ftirebilir ve gelecekteki de\u011fi\u015fiklikleri kod \u00fczerinden y\u00f6netebilirsiniz.<\/p>\n<\/li>\n<li>\n            <strong>Terraform mu, Ansible m\u0131? Hangisini \u00f6\u011frenmeliyim?<\/strong><\/p>\n<p>Terraform ve Ansible farkl\u0131 ama\u00e7lara hizmet eder. Terraform, altyap\u0131 kaynaklar\u0131n\u0131 (sunucular, a\u011flar, veritabanlar\u0131) &#8220;sa\u011flama&#8221; (<code>provisioning<\/code>) ve &#8220;y\u00f6netme&#8221; (<code>managing<\/code>) \u00fczerine odaklan\u0131rken, Ansible daha \u00e7ok &#8220;konfig\u00fcrasyon y\u00f6netimi&#8221; (<code>configuration management<\/code>) ve mevcut sunucular \u00fczerine yaz\u0131l\u0131m da\u011f\u0131t\u0131m\u0131 (<code>software deployment<\/code>) i\u00e7in kullan\u0131l\u0131r. Genellikle bu iki ara\u00e7 birlikte kullan\u0131l\u0131r: Terraform altyap\u0131y\u0131 kurar, Ansible ise o altyap\u0131n\u0131n \u00fczerine yaz\u0131l\u0131mlar\u0131 kurar ve yap\u0131land\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Terraform \u00f6\u011frenmek zor mu?<\/strong><\/p>\n<p>Hay\u0131r, Terraform&#8217;un HCL dili olduk\u00e7a basittir ve okunmas\u0131 kolayd\u0131r. Temel kavramlar\u0131 (providers, resources, variables, modules) anlad\u0131ktan sonra, pratik yaparak h\u0131zla ustala\u015fabilirsiniz. \u0130nternet \u00fczerinde bir\u00e7ok kaynak, dok\u00fcmantasyon ve \u00f6rnek proje bulunmaktad\u0131r. Ba\u015flang\u0131\u00e7 seviyesinde \u00f6\u011frenmesi di\u011fer bir\u00e7ok teknik araca g\u00f6re daha kolayd\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p>#Terraform #Altyap\u0131KodOlarak #BulutBili\u015fim #DevOps #IaC<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/terraform-infrastructure-as-code-demo\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/terraform-infrastructure-as-code-demo<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Merhaba! Bulut sunucular\u0131n\u0131 elle kurmaktan, her seferinde ayn\u0131 ayarlar\u0131 t\u0131klamaktan veya bir sunucuya ihtiyac\u0131n oldu\u011funda saatlerce beklemekten s\u0131k\u0131ld\u0131n m\u0131?","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":[1],"tags":[],"class_list":{"0":"post-44515","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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 Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi\" \/>\n<meta property=\"og:description\" content=\"Merhaba! Bulut sunucular\u0131n\u0131 elle kurmaktan, her seferinde ayn\u0131 ayarlar\u0131 t\u0131klamaktan veya bir sunucuya ihtiyac\u0131n oldu\u011funda saatlerce beklemekten s\u0131k\u0131ld\u0131n m\u0131?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-04T18:09:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-04T18:09: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=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi\",\"datePublished\":\"2026-09-04T18:09:18+00:00\",\"dateModified\":\"2026-09-04T18:09:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\"},\"wordCount\":4347,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\",\"name\":\"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-09-04T18:09:18+00:00\",\"dateModified\":\"2026-09-04T18:09:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi\"}]},{\"@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 Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi","og_description":"Merhaba! Bulut sunucular\u0131n\u0131 elle kurmaktan, her seferinde ayn\u0131 ayarlar\u0131 t\u0131klamaktan veya bir sunucuya ihtiyac\u0131n oldu\u011funda saatlerce beklemekten s\u0131k\u0131ld\u0131n m\u0131?","og_url":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-09-04T18:09:18+00:00","article_modified_time":"2026-09-04T18:09:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi","datePublished":"2026-09-04T18:09:18+00:00","dateModified":"2026-09-04T18:09:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/"},"wordCount":4347,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/","url":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/","name":"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-09-04T18:09:18+00:00","dateModified":"2026-09-04T18:09:33+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-nedir-kardesim-21-yasindaki-bir-gencin-gozunden-bulut-altyapisi-yonetimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Terraform Nedir Karde\u015fim? 21 Ya\u015f\u0131ndaki Bir Gencin G\u00f6z\u00fcnden Bulut Altyap\u0131s\u0131 Y\u00f6netimi"}]},{"@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\/44515","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=44515"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44515\/revisions"}],"predecessor-version":[{"id":44516,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44515\/revisions\/44516"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}