{"id":35241,"date":"2025-11-27T09:31:35","date_gmt":"2025-11-27T06:31:35","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/"},"modified":"2025-11-27T09:31:35","modified_gmt":"2025-11-27T06:31:35","slug":"%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/","title":{"rendered":"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)"},"content":{"rendered":"<p><body><\/p>\n<style>\n        \/* Temel stil ayarlamalar\u0131 *\/\n        body {\n            font-family: Arial, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 900px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n        h2 {\n            color: #2c3e50;\n            border-bottom: 2px solid #3498db;\n            padding-bottom: 10px;\n            margin-top: 40px;\n        }\n        h3 {\n            color: #34495e;\n            margin-top: 30px;\n        }\n        p {\n            margin-bottom: 1em;\n        }\n        pre {\n            background-color: #ecf0f1;\n            padding: 15px;\n            border-radius: 5px;\n            overflow-x: auto;\n            font-size: 0.9em;\n        }\n        code {\n            font-family: 'Courier New', Courier, monospace;\n            color: #c0392b; \/* K\u0131rm\u0131z\u0131ms\u0131 bir renk *\/\n        }\n        pre code {\n            color: #2c3e50; \/* Genel kod blo\u011fu rengi *\/\n        }\n        .expert-tip {\n            background-color: #e8f6fd; \/* A\u00e7\u0131k mavi *\/\n            border-left: 5px solid #3498db; \/* Mavi \u00e7izgi *\/\n            padding: 15px 20px;\n            margin: 20px 0;\n            font-style: italic;\n            color: #2c3e50;\n        }\n        ul, ol {\n            margin-bottom: 1em;\n            padding-left: 20px;\n        }\n        table {\n            width: 100%;\n            border-collapse: collapse;\n            margin: 20px 0;\n        }\n        table, th, td {\n            border: 1px solid #ddd;\n        }\n        th, td {\n            padding: 10px;\n            text-align: left;\n        }\n        th {\n            background-color: #f2f2f2;\n        }<\/p>\n<p>        \/* Mobil uyumluluk i\u00e7in medya sorgusu \u00f6rne\u011fi *\/\n        @media (max-width: 768px) {\n            body {\n                padding: 15px;\n            }\n            h2 {\n                font-size: 1.8em;\n            }\n            h3 {\n                font-size: 1.4em;\n            }\n            pre {\n                white-space: pre-wrap; \/* Uzun kod sat\u0131rlar\u0131n\u0131 sarar *\/\n            }\n            table {\n                display: block;\n                overflow-x: auto;\n                -webkit-overflow-scrolling: touch;\n            }\n            thead {\n                display: none; \/* Mobil'de ba\u015fl\u0131klar\u0131 gizle *\/\n            }\n            tr {\n                border-bottom: 3px solid #ddd;\n                display: block;\n                margin-bottom: 10px;\n            }\n            td {\n                display: block;\n                text-align: right;\n                padding-left: 50%;\n                position: relative;\n            }\n            td::before {\n                content: attr(data-label);\n                position: absolute;\n                left: 0;\n                width: 45%;\n                padding-left: 15px;\n                font-weight: bold;\n                text-align: left;\n            }\n        }\n    <\/style>\n<p>Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, i\u015fletmelerin \u00e7eviklik ve \u00f6l\u00e7eklenebilirlik ihtiya\u00e7lar\u0131 her zamankinden daha kritik bir hal alm\u0131\u015ft\u0131r. Manuel altyap\u0131 y\u00f6netimi, insan hatalar\u0131na a\u00e7\u0131k olmas\u0131n\u0131n yan\u0131 s\u0131ra, zaman al\u0131c\u0131 ve pahal\u0131 bir s\u00fcre\u00e7tir. \u0130\u015fte tam bu noktada, Altyap\u0131 Kod Olarak (Infrastructure as Code &#8211; IaC) kavram\u0131 devreye girer. IaC, altyap\u0131n\u0131z\u0131 kod dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla tan\u0131mlaman\u0131za ve y\u00f6netmenize olanak tan\u0131r. Bu sayede, altyap\u0131 da\u011f\u0131t\u0131m\u0131n\u0131 otomatikle\u015ftirebilir, versiyon kontrol\u00fc alt\u0131nda tutabilir ve tekrarlanabilirli\u011fi sa\u011flayabilirsiniz. HashiCorp Terraform, bu alanda lider bir ara\u00e7 olup, farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131 \u00fczerinde (multi-cloud) altyap\u0131 olu\u015fturmak, de\u011fi\u015ftirmek ve yok etmek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar. Azure ise, Microsoft&#8217;un kapsaml\u0131 bulut platformudur ve d\u00fcnya genelinde bir\u00e7ok kurulu\u015f taraf\u0131ndan tercih edilen zengin hizmet yelpazesiyle dikkat \u00e7eker.<\/p>\n<p>Terraform&#8217;u Azure ile birlikte kullanmak, \u015firketlere bir dizi \u00f6nemli avantaj sa\u011flar. \u00d6ncelikle, deklaratif bir yakla\u015f\u0131mla \u00e7al\u0131\u015f\u0131r; yani altyap\u0131n\u0131z\u0131n nihai durumunu tan\u0131mlars\u0131n\u0131z, Terraform ise bu duruma ula\u015fmak i\u00e7in gerekli ad\u0131mlar\u0131 otomatik olarak atar. Bu, karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmeyi basitle\u015ftirir ve hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r. \u0130kinci olarak, Azure kaynaklar\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in tutarl\u0131 bir dil ve i\u015f ak\u0131\u015f\u0131 sunar. Bu, farkl\u0131 ekiplerin ayn\u0131 prensiplerle \u00e7al\u0131\u015fmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r ve &#8220;shadow IT&#8221; riskini d\u00fc\u015f\u00fcr\u00fcr. \u00dc\u00e7\u00fcnc\u00fc olarak, altyap\u0131 de\u011fi\u015fikliklerinin bir plan dahilinde ve g\u00f6zden ge\u00e7irilebilir olmas\u0131n\u0131 sa\u011flar; bu da \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli ve kritik altyap\u0131lar i\u00e7in g\u00fcvenlik ve uyumluluk a\u00e7\u0131s\u0131ndan paha bi\u00e7ilmezdir. Dolay\u0131s\u0131yla, Azure&#8217;da kaynaklar\u0131n\u0131z\u0131 g\u00fcvenli, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir bir \u015fekilde olu\u015fturmak, g\u00fcncellemek ve s\u00fcrd\u00fcrmek istiyorsan\u0131z, Terraform vazge\u00e7ilmez bir ara\u00e7 haline gelir.<\/p>\n<p>Mod\u00fcler mimari ve DevSecOps prensipleri ile birle\u015fti\u011finde ise Terraform-Azure entegrasyonu ger\u00e7ek potansiyeline ula\u015f\u0131r. Mod\u00fclerlik, kod tekrar\u0131n\u0131 \u00f6nler, y\u00f6netilebilirli\u011fi art\u0131r\u0131r ve altyap\u0131 kodunuzun yeniden kullan\u0131labilirli\u011fini sa\u011flar. Bu, \u00f6zellikle farkl\u0131 projelerde benzer altyap\u0131 bile\u015fenleri kullan\u0131ld\u0131\u011f\u0131nda maliyet ve zaman tasarrufu anlam\u0131na gelir. \u00d6te yandan, DevSecOps yakla\u015f\u0131m\u0131, g\u00fcvenli\u011fi geli\u015ftirme s\u00fcrecinin en ba\u015f\u0131ndan itibaren entegre etmeyi hedefler. Geleneksel g\u00fcvenlik testlerinin aksine, DevSecOps ile g\u00fcvenlik kontrolleri otomatikle\u015ftirilir ve altyap\u0131 kodu da\u011f\u0131t\u0131lmadan \u00f6nce potansiyel zafiyetler tespit edilir. B\u00f6ylece, sadece h\u0131zl\u0131 de\u011fil, ayn\u0131 zamanda g\u00fcvenli ve uyumlu bir altyap\u0131 da\u011f\u0131t\u0131m s\u00fcreci in\u015fa edersiniz. Bu kombinasyon, modern bulut m\u00fchendisli\u011finin temel ta\u015flar\u0131ndan biridir ve organizasyonlara \u00f6nemli bir rekabet avantaj\u0131 sa\u011flar.<\/p>\n<h2>\u2699\ufe0f Mod\u00fcler Mimari ile Altyap\u0131 Kodunuzu Nas\u0131l Daha Y\u00f6netilebilir Hale Getirebilirsiniz?<\/h2>\n<p>Terraform ile b\u00fcy\u00fck \u00f6l\u00e7ekli Azure altyap\u0131lar\u0131 olu\u015ftururken, kod taban\u0131n\u0131n h\u0131zla karma\u015f\u0131kla\u015ft\u0131\u011f\u0131n\u0131 ve y\u00f6netilmesinin zorla\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz. \u0130\u015fte bu noktada, mod\u00fcler mimari devreye girer. Terraform mod\u00fclleri, ilgili kaynaklar\u0131 bir araya getiren ve kendi i\u00e7inde ba\u011f\u0131ms\u0131z, yeniden kullan\u0131labilir yap\u0131 ta\u015flar\u0131 olu\u015fturan kapsay\u0131c\u0131lard\u0131r. T\u0131pk\u0131 yaz\u0131l\u0131m geli\u015ftirmedeki fonksiyonlar veya s\u0131n\u0131flar gibi d\u00fc\u015f\u00fcnebilirsiniz. Bir mod\u00fcl, bir Azure Kaynak Grubu, bir Sanal A\u011f (VNet), bir Depolama Hesab\u0131 veya hatta daha karma\u015f\u0131k bir uygulama y\u0131\u011f\u0131n\u0131 (\u00f6rne\u011fin, bir web uygulamas\u0131, veritaban\u0131 ve ilgili a\u011f bile\u015fenleri) tan\u0131mlayabilir. Mod\u00fcler bir yakla\u015f\u0131m benimseyerek, kod tekrar\u0131n\u0131 azalt\u0131r, farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 da\u011f\u0131t\u0131mlar yapabilir ve altyap\u0131 kodunuzu daha okunabilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirebilirsiniz.<\/p>\n<p>Mod\u00fcler mimarinin temel faydalar\u0131 aras\u0131nda \u015funlar yer al\u0131r:<\/p>\n<ul>\n<li><strong>Yeniden Kullan\u0131labilirlik:<\/strong> Ayn\u0131 altyap\u0131 deseni birden fazla projede veya ortamda kullan\u0131ld\u0131\u011f\u0131nda, mod\u00fcller kopyala-yap\u0131\u015ft\u0131r hatas\u0131ndan kurtar\u0131r ve tutarl\u0131l\u0131\u011f\u0131 garanti eder.<\/li>\n<li><strong>Bak\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Bir mod\u00fclde yap\u0131lan de\u011fi\u015fiklik, mod\u00fcl\u00fc kullanan t\u00fcm yerlerde otomatik olarak g\u00fcncellenebilir (plan ve apply ad\u0131mlar\u0131yla). Bu, hata d\u00fczeltmelerini veya \u00f6zellik eklemelerini \u00e7ok daha verimli hale getirir.<\/li>\n<li><strong>Tak\u0131m \u00c7al\u0131\u015fmas\u0131:<\/strong> Farkl\u0131 ekipler, kendi alanlar\u0131na \u00f6zg\u00fc mod\u00fclleri geli\u015ftirebilir ve di\u011fer ekipler bu mod\u00fclleri kolayca entegre edebilir. Bu, paralel geli\u015ftirmeyi te\u015fvik eder.<\/li>\n<li><strong>Karma\u015f\u0131kl\u0131\u011f\u0131 Azaltma:<\/strong> B\u00fcy\u00fck bir mono-repo yerine, her mod\u00fcl belirli bir sorumlulu\u011fa odakland\u0131\u011f\u0131ndan, toplam karma\u015f\u0131kl\u0131k azal\u0131r ve kod taban\u0131 daha anla\u015f\u0131l\u0131r hale gelir.<\/li>\n<li><strong>Tutarl\u0131l\u0131k:<\/strong> Mod\u00fcller, en iyi uygulamalar\u0131 ve g\u00fcvenlik standartlar\u0131n\u0131 \u00f6nceden tan\u0131mlanm\u0131\u015f \u015fablonlar arac\u0131l\u0131\u011f\u0131yla zorunlu k\u0131lar.<\/li>\n<\/ul>\n<p>Peki, mod\u00fcler bir Terraform projesini nas\u0131l yap\u0131land\u0131rabiliriz? Genellikle, projenin k\u00f6k dizininde bir <code>modules<\/code> klas\u00f6r\u00fc olu\u015fturulur ve her mod\u00fcl bu klas\u00f6r i\u00e7inde ayr\u0131 bir alt dizinde yer al\u0131r. \u00d6rne\u011fin:<\/p>\n<pre><code>\nmy-azure-infrastructure\/\n\u251c\u2500\u2500 main.tf\n\u251c\u2500\u2500 variables.tf\n\u251c\u2500\u2500 outputs.tf\n\u251c\u2500\u2500 providers.tf\n\u251c\u2500\u2500 modules\/\n\u2502   \u251c\u2500\u2500 resource_group\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u2514\u2500\u2500 outputs.tf\n\u2502   \u251c\u2500\u2500 virtual_network\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u2514\u2500\u2500 outputs.tf\n\u2502   \u2514\u2500\u2500 web_app_service\/\n\u2502       \u251c\u2500\u2500 main.tf\n\u2502       \u251c\u2500\u2500 variables.tf\n\u2502       \u2514\u2500\u2500 outputs.tf\n\u2514\u2500\u2500 environments\/\n    \u251c\u2500\u2500 dev\/\n    \u2502   \u2514\u2500\u2500 main.tf\n    \u251c\u2500\u2500 prod\/\n    \u2502   \u2514\u2500\u2500 main.tf\n    \u2514\u2500\u2500 test\/\n        \u2514\u2500\u2500 main.tf\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>modules<\/code> dizini alt\u0131nda <code>resource_group<\/code>, <code>virtual_network<\/code> ve <code>web_app_service<\/code> gibi mod\u00fcller g\u00f6r\u00fcyoruz. Her mod\u00fcl kendi i\u00e7inde <code>main.tf<\/code> (kaynak tan\u0131mlar\u0131), <code>variables.tf<\/code> (mod\u00fcl girdileri) ve <code>outputs.tf<\/code> (mod\u00fcl \u00e7\u0131kt\u0131lar\u0131) dosyalar\u0131n\u0131 bar\u0131nd\u0131r\u0131r. <code>environments<\/code> klas\u00f6r\u00fc ise farkl\u0131 da\u011f\u0131t\u0131m ortamlar\u0131 (dev, prod, test) i\u00e7in ana yap\u0131land\u0131rma dosyalar\u0131n\u0131 i\u00e7erir. Her ortam, gerekli mod\u00fclleri \u00e7a\u011f\u0131rarak kendi altyap\u0131s\u0131n\u0131 olu\u015fturur.<\/p>\n<p>Bir mod\u00fcl\u00fcn i\u00e7eri\u011fi olduk\u00e7a basit olabilir. \u00d6rne\u011fin, bir Azure Kaynak Grubu olu\u015fturan <code>resource_group<\/code> mod\u00fcl\u00fc \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code>\n    # modules\/resource_group\/main.tf\n    resource \"azurerm_resource_group\" \"main\" {\n      name     = var.name\n      location = var.location\n      tags     = var.tags\n    }\n\n    # modules\/resource_group\/variables.tf\n    variable \"name\" {\n      description = \"Kaynak grubunun ad\u0131.\"\n      type        = string\n    }\n\n    variable \"location\" {\n      description = \"Kaynak grubunun lokasyonu.\"\n      type        = string\n    }\n\n    variable \"tags\" {\n      description = \"Kaynak grubuna atanacak etiketler.\"\n      type        = map(string)\n      default     = {}\n    }\n\n    # modules\/resource_group\/outputs.tf\n    output \"id\" {\n      description = \"Olu\u015fturulan kaynak grubunun ID'si.\"\n      value       = azurerm_resource_group.main.id\n    }\n\n    output \"name\" {\n      description = \"Olu\u015fturulan kaynak grubunun ad\u0131.\"\n      value       = azurerm_resource_group.main.name\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu mod\u00fcl\u00fc ana yap\u0131land\u0131rma dosyan\u0131zda (\u00f6rne\u011fin, <code>environments\/dev\/main.tf<\/code>) a\u015fa\u011f\u0131daki gibi \u00e7a\u011f\u0131rabilirsiniz:<\/p>\n<pre><code>\n    # environments\/dev\/main.tf\n    provider \"azurerm\" {\n      features {}\n    }\n\n    module \"app_resource_group\" {\n      source   = \"..\/..\/modules\/resource_group\"\n      name     = \"rg-dev-mywebapp\"\n      location = \"West Europe\"\n      tags = {\n        environment = \"dev\"\n        project     = \"mywebapp\"\n      }\n    }\n\n    output \"resource_group_id\" {\n      value = module.app_resource_group.id\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, <code>source<\/code> parametresi ile mod\u00fcl\u00fcn dosya yolu belirtilir ve <code>name<\/code>, <code>location<\/code>, <code>tags<\/code> gibi de\u011fi\u015fkenler mod\u00fcle girdi olarak ge\u00e7irilir. Bu yap\u0131, hem karma\u015f\u0131kl\u0131\u011f\u0131 soyutlar hem de altyap\u0131 kodunuzun yeniden kullan\u0131labilirli\u011fini maksimize eder. B\u00f6ylece, geli\u015ftiriciler ve operasyon ekipleri, belirli bir altyap\u0131 bile\u015feninin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair derinlemesine bilgi sahibi olmak zorunda kalmadan, ihtiya\u00e7 duyduklar\u0131 mod\u00fclleri \u00e7a\u011f\u0131rarak h\u0131zla altyap\u0131lar\u0131n\u0131 olu\u015fturabilirler. Bu yakla\u015f\u0131m, sadece ba\u015flang\u0131\u00e7taki da\u011f\u0131t\u0131m s\u00fcrecini h\u0131zland\u0131rmakla kalmaz, ayn\u0131 zamanda gelecekteki de\u011fi\u015fikliklerin ve g\u00fcncellemelerin y\u00f6netimini de \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Mod\u00fcllerinizi m\u00fcmk\u00fcn oldu\u011funca \"k\u00fc\u00e7\u00fck ve odakl\u0131\" tutmaya \u00e7al\u0131\u015f\u0131n. Her mod\u00fcl\u00fcn tek bir amaca hizmet etmesi, onun daha esnek ve farkl\u0131 senaryolarda daha kolay entegre edilebilir olmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, mod\u00fcl girdilerinizi (variables) ve \u00e7\u0131kt\u0131lar\u0131n\u0131z\u0131 (outputs) net bir \u015fekilde dok\u00fcmante etmeyi unutmay\u0131n. Bu, mod\u00fcl\u00fc kullanacak di\u011fer geli\u015ftiricilerin i\u015fini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131racakt\u0131r.\n    <\/div>\n<h2>\ud83d\udd12 DevSecOps Yakla\u015f\u0131m\u0131 ile Azure Altyap\u0131 G\u00fcvenli\u011fini Nas\u0131l Entegre Ederiz?<\/h2>\n<p>Geleneksel DevOps modelinde g\u00fcvenlik genellikle s\u00fcrecin sonuna b\u0131rak\u0131lan bir d\u00fc\u015f\u00fcnce olmu\u015ftur. Ancak, bu yakla\u015f\u0131m potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n \u00fcretim ortam\u0131na ula\u015fmas\u0131na ve b\u00fcy\u00fck riskler olu\u015fturmas\u0131na neden olabilir. DevSecOps, \"Shift Left\" felsefesini benimseyerek, g\u00fcvenli\u011fi geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn (SDLC) m\u00fcmk\u00fcn olan en erken a\u015famas\u0131na entegre etmeyi hedefler. Terraform ile Azure altyap\u0131n\u0131z\u0131 kod olarak tan\u0131mlad\u0131\u011f\u0131n\u0131zda, g\u00fcvenlik kontrollerini de kod taban\u0131na dahil etmek i\u00e7in e\u015fsiz bir f\u0131rsat yakalam\u0131\u015f olursunuz. Bu sayede, g\u00fcvenlik, bir engelleyici olmaktan \u00e7\u0131k\u0131p, altyap\u0131 da\u011f\u0131t\u0131m s\u00fcrecinin do\u011fal bir par\u00e7as\u0131 haline gelir ve g\u00fcvenli\u011fin otomatize edilmi\u015f, s\u00fcrekli bir s\u00fcre\u00e7 olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>DevSecOps'u Terraform ve Azure altyap\u0131n\u0131zla entegre etmenin birka\u00e7 temel yolu bulunmaktad\u0131r:<\/p>\n<ol>\n<li><strong>Statik Kod Analizi (SAST):<\/strong> Terraform kodunuzu da\u011f\u0131t\u0131mdan \u00f6nce g\u00fcvenlik a\u00e7\u0131klar\u0131 ve politika ihlalleri a\u00e7\u0131s\u0131ndan analiz eden ara\u00e7lar kullanmak.<\/li>\n<li><strong>Bulut G\u00fcvenlik Durumu Y\u00f6netimi (CSPM):<\/strong> Da\u011f\u0131t\u0131lan Azure kaynaklar\u0131n\u0131z\u0131n g\u00fcvenlik yap\u0131land\u0131rmalar\u0131n\u0131 s\u00fcrekli olarak izlemek ve denetlemek.<\/li>\n<li><strong>Kimlik ve Eri\u015fim Y\u00f6netimi (IAM):<\/strong> Terraform'un Azure'da kaynak olu\u015fturmak i\u00e7in kulland\u0131\u011f\u0131 kimliklerin (Service Principal) en az ayr\u0131cal\u0131k prensibiyle yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olmak.<\/li>\n<li><strong>Uyumluluk (Compliance) Kontrolleri:<\/strong> \u015eirket politikalar\u0131na veya end\u00fcstri standartlar\u0131na (GDPR, HIPAA, PCI DSS vb.) uygunluk sa\u011flamak i\u00e7in otomatik kontroller uygulamak.<\/li>\n<\/ol>\n<p>Terraform ile DevSecOps'u uygulamak i\u00e7in kullanabilece\u011finiz baz\u0131 pop\u00fcler ara\u00e7lar ve yakla\u015f\u0131mlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong><code>tflint<\/code>:<\/strong> Terraform kodunuzda syntax hatalar\u0131n\u0131, formatlama sorunlar\u0131n\u0131 ve temel g\u00fcvenlik best practice'lerini kontrol eden bir linting arac\u0131d\u0131r. Erken a\u015famada basit hatalar\u0131 yakalaman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<li><strong><code>Checkov<\/code>, <code>Terrascan<\/code>, <code>Bridgecrew<\/code> (Palo Alto Networks):<\/strong> Bu ara\u00e7lar, Terraform kodunuzu g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131, yanl\u0131\u015f yap\u0131land\u0131rmalar\u0131 ve kurumsal g\u00fcvenlik politikalar\u0131na ayk\u0131r\u0131l\u0131klar\u0131 tespit etmek i\u00e7in statik olarak analiz eder. \u00d6rne\u011fin, bir Depolama Hesab\u0131n\u0131n herkese a\u00e7\u0131k olarak ayarlan\u0131p ayarlanmad\u0131\u011f\u0131n\u0131, Azure SQL Veritaban\u0131n\u0131n Transparent Data Encryption (TDE) \u00f6zelli\u011finin etkin olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirler.<\/li>\n<li><strong>Azure Policy:<\/strong> Da\u011f\u0131t\u0131lan veya da\u011f\u0131t\u0131lmaya \u00e7al\u0131\u015f\u0131lan Azure kaynaklar\u0131 \u00fczerinde kural ve denetimler tan\u0131mlaman\u0131za olanak tan\u0131r. Terraform ile da\u011f\u0131t\u0131m yaparken bile, Azure Policy tan\u0131mlad\u0131\u011f\u0131n\u0131z kurallara ayk\u0131r\u0131 kaynaklar\u0131n olu\u015fturulmas\u0131n\u0131 engelleyebilir veya uyar\u0131lar verebilir. \u00d6rne\u011fin, t\u00fcm kaynak gruplar\u0131n\u0131n belirli bir etiket (<code>Environment: Production<\/code>) ta\u015f\u0131mas\u0131n\u0131 zorunlu k\u0131labilir veya t\u00fcm Sanal Makine disklerinin \u015fifreli olmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<li><strong>Terraform'un Kendi Yetenekleri:<\/strong> <code>terraform plan<\/code> komutu, yap\u0131lacak de\u011fi\u015fiklikleri \u00f6nceden g\u00f6stererek beklenmedik durumlar\u0131n \u00f6n\u00fcne ge\u00e7er. Ayr\u0131ca, Terraform'un hassas verileri y\u00f6netmek i\u00e7in HashiCorp Vault gibi \u00e7\u00f6z\u00fcmlerle entegrasyonu da g\u00fcvenlik a\u00e7\u0131s\u0131ndan kritiktir.<\/li>\n<\/ul>\n<p>Bir CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) i\u015flem hatt\u0131nda bu g\u00fcvenlik kontrollerini nas\u0131l entegre edebiliriz? Genellikle, her kod de\u011fi\u015fikli\u011finde a\u015fa\u011f\u0131daki ad\u0131mlar otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r:<\/p>\n<pre><code>\n    # \u00d6rnek Bir CI\/CD Pipeline Ad\u0131m\u0131\n    stages:\n    - stage: ValidateAndSecure\n      displayName: 'Kodu Do\u011frula ve G\u00fcvenli\u011fi Kontrol Et'\n      jobs:\n      - job: IaCSecurityScan\n        displayName: 'IaC G\u00fcvenlik Taramas\u0131'\n        pool:\n          vmImage: 'ubuntu-latest'\n        steps:\n        - checkout: self\n        - script: |\n            terraform init -backend=false\n            terraform validate\n            tflint --init\n            tflint --config=.\/.tflint.hcl .\n            checkov -f . --framework terraform --compact # Checkov ile g\u00fcvenlik taramas\u0131\n          displayName: 'Terraform Do\u011frulama ve G\u00fcvenlik Taramas\u0131'\n          continueOnError: false # Tarama hatalar\u0131 pipeline'\u0131 durdursun\n    \n        - script: |\n            terraform plan -out=tfplan\n            # terraform show -json tfplan | terrascan scan -f json -i terraform -o cli -v\n            # Daha geli\u015fmi\u015f senaryolar i\u00e7in plan \u00e7\u0131kt\u0131s\u0131n\u0131n g\u00fcvenlik analizi\n          displayName: 'Terraform Plan Olu\u015fturma ve Opsiyonel G\u00fcvenlik Analizi'\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, bir CI\/CD pipeline'\u0131 i\u00e7inde \u00f6nce <code>terraform init<\/code> ve <code>validate<\/code> komutlar\u0131 ile kodun do\u011frulu\u011fu kontrol edilir. Ard\u0131ndan, <code>tflint<\/code> ile linting yap\u0131l\u0131r ve <code>checkov<\/code> gibi bir ara\u00e7la statik g\u00fcvenlik analizi ger\u00e7ekle\u015ftirilir. E\u011fer bu ad\u0131mlardan herhangi biri ba\u015far\u0131s\u0131z olursa (\u00f6rne\u011fin, bir g\u00fcvenlik ihlali tespit edilirse), pipeline durdurulur ve kodun \u00fcretime gitmesi engellenir. Bu \"fail-fast\" yakla\u015f\u0131m\u0131, g\u00fcvenlik sorunlar\u0131n\u0131n erken a\u015famada tespit edilmesini ve d\u00fczeltilmesini sa\u011flar, bu da uzun vadede maliyeti ve riski \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<p>Ayr\u0131ca, Terraform ile da\u011f\u0131t\u0131m\u0131 yap\u0131lan Azure kaynaklar\u0131n\u0131n Azure Policy taraf\u0131ndan da denetlendi\u011finden emin olmak, iki katmanl\u0131 bir g\u00fcvenlik mekanizmas\u0131 sunar. Terraform, bir kayna\u011f\u0131 olu\u015fturmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda Azure Policy devreye girerek, kayna\u011f\u0131n \u015firketin belirledi\u011fi g\u00fcvenlik ve uyumluluk kurallar\u0131na uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Uygun de\u011filse, da\u011f\u0131t\u0131m engellenir. Bu, altyap\u0131n\u0131z\u0131n s\u00fcrekli olarak g\u00fcvenli ve uyumlu kalmas\u0131n\u0131 sa\u011flaman\u0131n en etkili yollar\u0131ndan biridir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: DevSecOps ara\u00e7lar\u0131n\u0131 CI\/CD pipeline'\u0131n\u0131za entegre ederken ba\u015flang\u0131\u00e7ta \"uyar\u0131\" modunda \u00e7al\u0131\u015ft\u0131rarak mevcut g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131z\u0131 tespit edin. Ard\u0131ndan, zamanla \"fail-fast\" moduna ge\u00e7erek g\u00fcvenlik standartlar\u0131n\u0131z\u0131 zorunlu k\u0131l\u0131n. Bu ge\u00e7i\u015f s\u00fcreci, ekibinizin yeni g\u00fcvenlik pratiklerine adapte olmas\u0131n\u0131 kolayla\u015ft\u0131racakt\u0131r.\n    <\/div>\n<h2>\ud83c\udfe2 Vaka Analizi: Kurumsal Bir Uygulaman\u0131n Azure'a G\u00fcvenli ve Mod\u00fcler Ge\u00e7i\u015fi<\/h2>\n<p>Bir teknoloji \u015firketi olan \"InnovateCo\", eskiyen \u015firket i\u00e7i uygulamas\u0131n\u0131 modernize etmek ve Azure bulutuna ta\u015f\u0131mak istiyordu. Mevcut uygulama, bir web katman\u0131, bir API katman\u0131 ve bir SQL veritaban\u0131ndan olu\u015fuyordu. \u015eirketin hedefleri, hem da\u011f\u0131t\u0131m s\u00fcrecini h\u0131zland\u0131rmak hem de g\u00fcvenlik ve uyumluluk standartlar\u0131n\u0131 art\u0131rmakt\u0131. Geleneksel manuel da\u011f\u0131t\u0131m y\u00f6ntemleri, insan hatalar\u0131na, tutars\u0131zl\u0131klara ve g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7t\u0131\u011f\u0131 i\u00e7in uygun de\u011fildi. Bu noktada, Terraform, mod\u00fcler mimari ve DevSecOps prensipleriyle entegre edilmi\u015f bir \u00e7\u00f6z\u00fcm teklif edildi.<\/p>\n<h3>Uygulanan \u00c7\u00f6z\u00fcm ve Ad\u0131mlar:<\/h3>\n<ol>\n<li><strong>Mod\u00fcler Altyap\u0131 Tasar\u0131m\u0131:<\/strong>\n<ul>\n<li><strong>Temel Mod\u00fcller:<\/strong> Azure Kaynak Grubu, Sanal A\u011f (VNet) ve Subnetler, Azure SQL Veritaban\u0131, Azure App Service Plan\u0131 gibi temel bile\u015fenler i\u00e7in yeniden kullan\u0131labilir Terraform mod\u00fclleri olu\u015fturuldu. Her mod\u00fcl, kendi i\u00e7inde ba\u011f\u0131ms\u0131z olarak test edilebilir ve versiyonlanabilir durumdayd\u0131.<\/li>\n<li><strong>Uygulama Mod\u00fclleri:<\/strong> Web uygulamas\u0131 i\u00e7in Azure App Service, API i\u00e7in Azure Function App ve her ikisi i\u00e7in de Azure Application Insights gibi kaynaklar\u0131 bir araya getiren daha \u00fcst d\u00fczey mod\u00fcller tasarland\u0131. Bu mod\u00fcller, temel mod\u00fclleri \u00e7a\u011f\u0131rarak uygulama katmanlar\u0131n\u0131 tek bir birim olarak da\u011f\u0131tabiliyordu.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Ortam Tabanl\u0131 Da\u011f\u0131t\u0131m:<\/strong>\n<ul>\n<li>Geli\u015ftirme (<code>dev<\/code>), Test (<code>test<\/code>) ve \u00dcretim (<code>prod<\/code>) ortamlar\u0131 i\u00e7in ayr\u0131 Terraform yap\u0131land\u0131rmalar\u0131 olu\u015fturuldu. Her ortam, ayn\u0131 mod\u00fclleri farkl\u0131 de\u011fi\u015fken de\u011ferleriyle (\u00f6rne\u011fin, daha k\u00fc\u00e7\u00fck VM boyutlar\u0131 i\u00e7in <code>dev<\/code>, daha b\u00fcy\u00fck ve yedekli VM'ler i\u00e7in <code>prod<\/code>) \u00e7a\u011f\u0131rarak kendi altyap\u0131s\u0131n\u0131 olu\u015fturuyordu. Bu sayede, ortamlar aras\u0131 tutarl\u0131l\u0131k sa\u011flan\u0131rken, her ortam\u0131n kendine \u00f6zg\u00fc ihtiya\u00e7lar\u0131 da kar\u015f\u0131lanm\u0131\u015f oldu.<\/li>\n<li>\u00d6rne\u011fin, <code>dev<\/code> ortam\u0131nda yaln\u0131zca bir adet App Service \u00f6rne\u011fi kullan\u0131l\u0131rken, <code>prod<\/code> ortam\u0131nda otomatik \u00f6l\u00e7eklenebilirlik kurallar\u0131 ile birden fazla \u00f6rnek tan\u0131mland\u0131.<\/li>\n<\/ul>\n<\/li>\n<li><strong>DevSecOps Entegrasyonu:<\/strong>\n<ul>\n<li><strong>Kod Taramas\u0131:<\/strong> Her Terraform kod de\u011fi\u015fikli\u011fi (Git commit) bir CI\/CD pipeline'\u0131n\u0131 tetikledi. Bu pipeline, <code>tflint<\/code>, <code>Checkov<\/code> ve <code>Terrascan<\/code> gibi ara\u00e7larla kodun sintaks\u0131n\u0131, best practice'lere uygunlu\u011funu ve potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 otomatik olarak kontrol etti. \u00d6rne\u011fin, bir depolama hesab\u0131n\u0131n public eri\u015fime a\u00e7\u0131lmas\u0131na veya veritaban\u0131 \u015fifrelemesinin devre d\u0131\u015f\u0131 b\u0131rak\u0131lmas\u0131na izin verilmedi.<\/li>\n<li><strong>Azure Policy Zorlamas\u0131:<\/strong> Azure aboneli\u011fi genelinde, t\u00fcm kaynaklar\u0131n belirli etiketlere sahip olmas\u0131n\u0131, a\u011f g\u00fcvenlik gruplar\u0131n\u0131n (NSG) belirli portlar\u0131 a\u00e7\u0131k b\u0131rakmamas\u0131n\u0131 ve veri \u015fifrelemesinin zorunlu olmas\u0131n\u0131 sa\u011flayan Azure Policy'ler uyguland\u0131. Terraform, bu politikalara uygun olmayan kaynaklar\u0131 da\u011f\u0131tmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, Azure Policy taraf\u0131ndan engellendi. Bu, ikinci bir g\u00fcvenlik katman\u0131 olu\u015fturdu.<\/li>\n<li><strong>Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc (RBAC):<\/strong> Terraform'un Azure'da kaynak olu\u015fturmak i\u00e7in kulland\u0131\u011f\u0131 Service Principal'lara yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 minimum izinler (least privilege) verildi. Bu, yetkisiz eri\u015fim riskini \u00f6nemli \u00f6l\u00e7\u00fcde azaltt\u0131.<\/li>\n<li><strong>S\u00fcrekli \u0130zleme:<\/strong> Da\u011f\u0131t\u0131lan Azure kaynaklar\u0131, Azure Security Center ve Azure Monitor ile s\u00fcrekli olarak izlendi. Olas\u0131 g\u00fcvenlik ihlalleri veya yap\u0131land\u0131rma kaymalar\u0131 durumunda (configuration drift), otomatik uyar\u0131lar tetiklendi.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Elde Edilen Faydalar:<\/h3>\n<ul>\n<li><strong>H\u0131z ve \u00c7eviklik:<\/strong> Altyap\u0131 da\u011f\u0131t\u0131m s\u00fcresi, haftalardan dakikalara d\u00fc\u015ft\u00fc. Yeni ortamlar veya uygulama s\u00fcr\u00fcmleri h\u0131zl\u0131ca devreye al\u0131nabildi.<\/li>\n<li><strong>G\u00fcvenlik Duru\u015fu:<\/strong> G\u00fcvenlik a\u00e7\u0131klar\u0131 geli\u015ftirme a\u015famas\u0131nda tespit edilip d\u00fczeltildi, bu da \u00fcretim ortam\u0131ndaki riskleri minimize etti. Azure Policy ve kod tarama ara\u00e7lar\u0131 sayesinde g\u00fcvenlik, s\u00fcrecin ayr\u0131lmaz bir par\u00e7as\u0131 oldu.<\/li>\n<li><strong>Tutarl\u0131l\u0131k ve G\u00fcvenilirlik:<\/strong> Mod\u00fcler yap\u0131 sayesinde, t\u00fcm ortamlarda (dev, test, prod) tutarl\u0131 altyap\u0131 da\u011f\u0131t\u0131mlar\u0131 yap\u0131ld\u0131. Bu, \"\u00e7al\u0131\u015ft\u0131 ama benim makinelerimde\" sendromunu ortadan kald\u0131rd\u0131.<\/li>\n<li><strong>Maliyet Tasarrufu:<\/strong> Otomatikle\u015ftirilmi\u015f s\u00fcre\u00e7ler sayesinde operasyonel y\u00fck azald\u0131 ve insan hatas\u0131ndan kaynaklanan maliyetler ortadan kalkt\u0131. Ayr\u0131ca, kaynaklar\u0131n optimize edilmi\u015f bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131, gereksiz harcamalar\u0131 \u00f6nledi.<\/li>\n<li><strong>Uyumluluk:<\/strong> End\u00fcstri standartlar\u0131na (\u00f6rne\u011fin, ISO 27001) uyumluluk gereksinimleri, otomatik g\u00fcvenlik kontrolleri ve denetim kay\u0131tlar\u0131 sayesinde kolayca sa\u011fland\u0131.<\/li>\n<\/ul>\n<p>InnovateCo'nun bu vaka \u00e7al\u0131\u015fmas\u0131, Terraform'un mod\u00fcler mimari ve DevSecOps prensipleriyle birle\u015fti\u011finde, sadece verimli de\u011fil, ayn\u0131 zamanda g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir bulut altyap\u0131s\u0131 olu\u015fturman\u0131n m\u00fcmk\u00fcn oldu\u011funu g\u00f6sterdi. \u015eirket, bu entegre yakla\u015f\u0131m sayesinde rekabet\u00e7i piyasada \u00f6nemli bir avantaj elde etti.<\/p>\n<h2>\ud83c\udfaf \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: Terraform Azure Da\u011f\u0131t\u0131mlar\u0131n\u0131z\u0131 Nas\u0131l Optimize Edersiniz?<\/h2>\n<p>Terraform'u Azure ile kullan\u0131rken sadece temel ad\u0131mlar\u0131 uygulamak yeterli de\u011fildir. Daha karma\u015f\u0131k senaryolarda ve b\u00fcy\u00fck \u00f6l\u00e7ekli altyap\u0131larda performans, g\u00fcvenilirlik ve y\u00f6netilebilirlik i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 benimsemek kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcm, deneyimli Terraform kullan\u0131c\u0131lar\u0131 i\u00e7in altyap\u0131 kodlar\u0131n\u0131 daha etkili ve sa\u011flam hale getirecek y\u00f6ntemleri sunmaktad\u0131r.<\/p>\n<h3>1. Terraform Durum Y\u00f6netimi (State Management)<\/h3>\n<p>Terraform, da\u011f\u0131t\u0131lan altyap\u0131n\u0131z\u0131n mevcut durumunu (state) takip etmek i\u00e7in bir durum dosyas\u0131 kullan\u0131r. Varsay\u0131lan olarak bu dosya yerel olarak saklan\u0131r, ancak \u00fcretim ortamlar\u0131nda ve tak\u0131m \u00e7al\u0131\u015fmas\u0131nda bu yeterli de\u011fildir. Uzak durum (remote state) y\u00f6netimi kullanmak hayati \u00f6neme sahiptir:<\/p>\n<ul>\n<li><strong>Merkezi Depolama:<\/strong> Durum dosyas\u0131n\u0131 Azure Blob Storage gibi merkezi bir konumda saklay\u0131n. Bu, ekip \u00fcyelerinin ayn\u0131 durum \u00fczerinde g\u00fcvenli bir \u015fekilde i\u015fbirli\u011fi yapmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Durum Kilitleme (State Locking):<\/strong> Ayn\u0131 anda birden fazla ki\u015finin durum dosyas\u0131n\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015fmas\u0131n\u0131 \u00f6nlemek i\u00e7in durum kilitleme mekanizmalar\u0131n\u0131 kullan\u0131n. Azure Blob Storage, Terraform i\u00e7in otomatik kilitleme sa\u011flar. Bu, \u00e7ak\u0131\u015fmalar\u0131 ve potansiyel altyap\u0131 bozulmalar\u0131n\u0131 engeller.<\/li>\n<li><strong>\u015eifreleme:<\/strong> Durum dosyas\u0131 hassas bilgiler i\u00e7erebilece\u011finden, depoland\u0131\u011f\u0131 yerde \u015fifrelemenin etkin oldu\u011fundan emin olun (Azure Blob Storage varsay\u0131lan olarak depolanan veriyi \u015fifreler).<\/li>\n<\/ul>\n<pre><code>\n    # main.tf veya providers.tf i\u00e7inde\n    terraform {\n      backend \"azurerm\" {\n        resource_group_name  = \"rg-terraform-state\"\n        storage_account_name = \"stterraformstate001\"\n        container_name       = \"tfstate\"\n        key                  = \"my-app.terraform.tfstate\"\n      }\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma, Terraform durum dosyas\u0131n\u0131n belirtilen Azure Blob Storage hesab\u0131nda g\u00fcvenli bir \u015fekilde saklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>2. Terraform Workspaces (\u00c7al\u0131\u015fma Alanlar\u0131)<\/h3>\n<p>Ayn\u0131 Terraform yap\u0131land\u0131rmas\u0131n\u0131 kullanarak birden fazla izolasyonlu ortam (dev, test, prod gibi) olu\u015fturmak istedi\u011finizde Terraform workspaces olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r. Her workspace, kendi durum dosyas\u0131na sahip olur ve di\u011ferlerinden ba\u011f\u0131ms\u0131zd\u0131r. Bu, ayn\u0131 mod\u00fclleri ve yap\u0131land\u0131rmay\u0131 farkl\u0131 ortamlar i\u00e7in kullanman\u0131za olanak tan\u0131r.<\/p>\n<pre><code>\n    terraform workspace new dev\n    terraform workspace select dev\n    terraform apply -var=\"environment=dev\"\n\n    terraform workspace new prod\n    terraform workspace select prod\n    terraform apply -var=\"environment=prod\"\n    <\/pre>\n<p><\/code><\/p>\n<p>Ancak, baz\u0131 durumlarda (\u00f6zellikle farkl\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 veya karma\u015f\u0131k yap\u0131land\u0131rmalar\u0131 olan ortamlar i\u00e7in), her ortam i\u00e7in ayr\u0131 bir k\u00f6k mod\u00fcl ve dizin yap\u0131s\u0131 (yukar\u0131da bahsetti\u011fimiz <code>environments\/dev\/main.tf<\/code> gibi) kullanmak daha esnek olabilir. Workspaces, k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar\u0131 olan ortamlarda daha \u00e7ok parlar.<\/p>\n<h3>3. \u0130simlendirme Kurallar\u0131 ve Etiketleme (Naming Conventions & Tagging)<\/h3>\n<p>B\u00fcy\u00fck \u00f6l\u00e7ekli Azure altyap\u0131lar\u0131nda, kaynaklar\u0131n\u0131z\u0131 kolayca tan\u0131mlayabilmek, maliyetleri takip edebilmek ve y\u00f6netebilmek i\u00e7in tutarl\u0131 isimlendirme kurallar\u0131 ve kapsaml\u0131 etiketleme stratejileri benimsemek esast\u0131r.<\/p>\n<ul>\n<li><strong>\u0130simlendirme:<\/strong> Kaynak t\u00fcr\u00fcn\u00fc (<code>rg-<\/code>, <code>vnet-<\/code>, <code>st-<\/code> gibi \u00f6n ekler), ortam\u0131 (<code>dev<\/code>, <code>prod<\/code>), projeyi ve b\u00f6lgeyi i\u00e7eren standart bir isimlendirme \u015femas\u0131 kullan\u0131n (\u00f6rn: <code>rg-mywebapp-dev-westeurope<\/code>).<\/li>\n<li><strong>Etiketleme:<\/strong> T\u00fcm Azure kaynaklar\u0131n\u0131za anlaml\u0131 etiketler (<code>environment<\/code>, <code>project<\/code>, <code>owner<\/code>, <code>costCenter<\/code>, <code>creationDate<\/code>) ekleyin. Bu, kaynaklar\u0131 filtrelemenize, maliyetleri analiz etmenize ve envanteri y\u00f6netmenize yard\u0131mc\u0131 olur. Terraform'da mod\u00fcllerinize bir <code>tags<\/code> de\u011fi\u015fkeni ekleyerek bu s\u00fcreci otomatikle\u015ftirebilirsiniz.<\/li>\n<\/ul>\n<pre><code>\n    variable \"common_tags\" {\n      description = \"T\u00fcm kaynaklara uygulanacak ortak etiketler.\"\n      type        = map(string)\n      default = {\n        ManagedBy   = \"Terraform\"\n        Owner       = \"DevOps Team\"\n      }\n    }\n\n    resource \"azurerm_resource_group\" \"main\" {\n      name     = var.name\n      location = var.location\n      tags     = merge(var.tags, var.common_tags) # Ortak etiketleri birle\u015ftir\n    }\n    <\/pre>\n<p><\/code><\/p>\n<h3>4. Veri Kaynaklar\u0131 (Data Sources)<\/h3>\n<p>Mevcut Azure kaynaklar\u0131n\u0131 i\u00e7e aktarmak veya onlar hakk\u0131nda bilgi almak i\u00e7in Terraform veri kaynaklar\u0131n\u0131 kullan\u0131n. Bu, halihaz\u0131rda var olan kaynaklar\u0131 (\u00f6rne\u011fin, bir VNet veya Key Vault) Terraform taraf\u0131ndan y\u00f6netilen yeni kaynaklarla entegre etmenizi sa\u011flar, onlar\u0131 yeniden olu\u015fturman\u0131za gerek kalmaz.<\/p>\n<pre><code>\n    data \"azurerm_resource_group\" \"existing\" {\n      name = \"my-existing-resource-group\"\n    }\n\n    resource \"azurerm_virtual_network\" \"new_vnet\" {\n      name                = \"new-vnet-in-existing-rg\"\n      location            = data.azurerm_resource_group.existing.location\n      resource_group_name = data.azurerm_resource_group.existing.name\n      address_space       = [\"10.1.0.0\/16\"]\n    }\n    <\/pre>\n<p><\/code><\/p>\n<h3>5. Geli\u015fmi\u015f CI\/CD Entegrasyonu ve GitOps<\/h3>\n<p>Terraform da\u011f\u0131t\u0131mlar\u0131n\u0131z\u0131 bir CI\/CD pipeline'\u0131na (Azure DevOps Pipelines, GitHub Actions, GitLab CI\/CD) tam olarak entegre edin. GitOps prensipleriyle, altyap\u0131n\u0131z\u0131n t\u00fcm de\u011fi\u015fikliklerini Git deposu \u00fczerinden y\u00f6netin. Her de\u011fi\u015fiklik bir pull request (PR) olarak ba\u015flar, kod incelemesinden ge\u00e7er, g\u00fcvenlik taramalar\u0131 yap\u0131l\u0131r ve ba\u015far\u0131l\u0131 olursa otomatik olarak uygulan\u0131r.<\/p>\n<ul>\n<li><strong>Plan \u00c7\u0131kt\u0131s\u0131n\u0131n Yorumlanmas\u0131:<\/strong> <code>terraform plan<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 CI\/CD ortam\u0131nda otomatik olarak yorumlayarak, yap\u0131lacak de\u011fi\u015fikliklerin detaylar\u0131n\u0131 PR'lara yorum olarak ekleyin. Bu, g\u00f6zden ge\u00e7irenlerin de\u011fi\u015fiklikleri daha iyi anlamas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Kilitlenme Y\u00f6netimi:<\/strong> CI\/CD pipeline'\u0131n\u0131z\u0131n, Terraform'un durum kilitleme mekanizmalar\u0131na sayg\u0131 duydu\u011fundan ve ayn\u0131 anda birden fazla da\u011f\u0131t\u0131m\u0131 \u00f6nledi\u011finden emin olun.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey teknikleri ve en iyi uygulamalar\u0131 benimseyerek, Terraform ile Azure altyap\u0131n\u0131z\u0131 sadece kurmakla kalmaz, ayn\u0131 zamanda uzun vadede daha sa\u011flam, y\u00f6netilebilir, g\u00fcvenli ve \u00f6l\u00e7eklenebilir hale getirirsiniz. Bu yakla\u015f\u0131mlar, \u00f6zellikle karma\u015f\u0131k ve dinamik bulut ortamlar\u0131nda, ekiplerin daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 ve daha az sorunla kar\u015f\u0131la\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>\u2705 Sonu\u00e7: Gelece\u011fin Bulut Altyap\u0131s\u0131n\u0131 Bug\u00fcn \u0130n\u015fa Edin<\/h2>\n<p>Bu makale boyunca, Terraform'u Azure ile entegre etmenin, mod\u00fcler mimariyi benimsemenin ve DevSecOps prensiplerini uygulaman\u0131n bulut altyap\u0131s\u0131 y\u00f6netimi i\u00e7in neden bu kadar kritik oldu\u011funu detayl\u0131 bir \u015fekilde inceledik. Geleneksel yakla\u015f\u0131mlar\u0131n aksine, bu metodolojiler bize sadece h\u0131zl\u0131 ve \u00e7evik da\u011f\u0131t\u0131mlar sunmakla kalm\u0131yor, ayn\u0131 zamanda g\u00fcvenlik, tutarl\u0131l\u0131k ve \u00f6l\u00e7eklenebilirlik gibi temel i\u015f gereksinimlerini de kar\u015f\u0131l\u0131yor. Mod\u00fcler mimari sayesinde kod tekrar\u0131n\u0131 azalt\u0131rken, altyap\u0131 kodunuzu daha okunabilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirdik. DevSecOps'u entegre ederek, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn erken a\u015famalar\u0131nda yakalama ve d\u00fczeltme yetene\u011fi kazand\u0131k, b\u00f6ylece \u00fcretim ortam\u0131na ula\u015fabilecek riskleri minimize ettik. Ger\u00e7ek d\u00fcnya vaka analizi, bu prensiplerin somut faydalar\u0131n\u0131 ortaya koyarak, bir organizasyonun nas\u0131l daha verimli, g\u00fcvenli ve rekabet\u00e7i hale gelebilece\u011fini g\u00f6zler \u00f6n\u00fcne serdi. \u0130leri d\u00fczey ipu\u00e7lar\u0131 ise, mevcut altyap\u0131 da\u011f\u0131t\u0131mlar\u0131n\u0131z\u0131 daha da optimize etme ve gelece\u011fe haz\u0131r hale getirme konusunda yol g\u00f6sterici oldu.<\/p>\n<p>Unutmay\u0131n ki bulut teknolojileri s\u00fcrekli evriliyor ve bu dinamik ortamda ba\u015far\u0131l\u0131 olman\u0131n anahtar\u0131, s\u00fcrekli \u00f6\u011frenmek ve en iyi uygulamalar\u0131 benimsemektir. Terraform, mod\u00fcler yap\u0131land\u0131rmalar ve DevSecOps k\u00fclt\u00fcr\u00fc, sadece bug\u00fcn\u00fcn de\u011fil, ayn\u0131 zamanda yar\u0131n\u0131n bulut altyap\u0131s\u0131 zorluklar\u0131na kar\u015f\u0131 da sa\u011flam bir temel olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Bu yakla\u015f\u0131m, ekiplerin daha \u00fcretken olmas\u0131n\u0131, operasyonel maliyetleri d\u00fc\u015f\u00fcrmesini ve en \u00f6nemlisi, m\u00fc\u015fterilerinize daha h\u0131zl\u0131 ve g\u00fcvenli bir \u015fekilde de\u011fer sunmas\u0131n\u0131 sa\u011flar. Gelece\u011fin bulut altyap\u0131s\u0131n\u0131 in\u015fa etmek, sadece teknolojik ara\u00e7lar\u0131 kullanmaktan ibaret de\u011fildir; ayn\u0131 zamanda do\u011fru zihniyeti ve s\u00fcre\u00e7leri benimsemekle de ilgilidir. Bu makaledeki bilgilerle, siz de bu d\u00f6n\u00fc\u015f\u00fcm yolculu\u011funa g\u00fcvenle ba\u015flayabilir ve Azure'daki altyap\u0131n\u0131z\u0131 bir sonraki seviyeye ta\u015f\u0131yabilirsiniz.<\/p>\n<h2>\u2753 S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. Terraform kullanmak Azure maliyetlerimi d\u00fc\u015f\u00fcr\u00fcr m\u00fc?<\/h3>\n<p>Evet, dolayl\u0131 olarak d\u00fc\u015f\u00fcrebilir. Terraform ile altyap\u0131n\u0131z\u0131 kod olarak tan\u0131mlad\u0131\u011f\u0131n\u0131zda, gereksiz kaynaklar\u0131n olu\u015fturulmas\u0131n\u0131 engeller, kaynaklar\u0131 gerekti\u011finde kapat\u0131p a\u00e7arak maliyetleri optimize edebilir ve \"kaynak israf\u0131n\u0131\" (resource sprawl) azaltabilirsiniz. Otomatikle\u015ftirilmi\u015f da\u011f\u0131t\u0131mlar sayesinde insan hatalar\u0131ndan kaynaklanan yanl\u0131\u015f yap\u0131land\u0131rmalar veya uzun s\u00fcre \u00e7al\u0131\u015fan test ortamlar\u0131 gibi maliyetli durumlar da en aza iner. Ayr\u0131ca, mod\u00fcler yap\u0131 sayesinde en iyi uygulamalar\u0131 standartla\u015ft\u0131rarak daha verimli kaynak kullan\u0131m\u0131n\u0131 te\u015fvik edersiniz.<\/p>\n<h3>2. Mod\u00fcler mimari kullanmak Terraform kodumu karma\u015f\u0131kla\u015ft\u0131r\u0131r m\u0131?<\/h3>\n<p>Ba\u015flang\u0131\u00e7ta bir miktar \u00f6\u011frenme e\u011frisi olabilir, ancak uzun vadede mod\u00fcler mimari kod karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 azalt\u0131r. Her mod\u00fcl\u00fcn belirli bir i\u015flevselli\u011fe odaklanmas\u0131, b\u00fcy\u00fck tek bir kod blo\u011fu yerine daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alar halinde \u00e7al\u0131\u015fman\u0131z\u0131 sa\u011flar. Bu, kodun okunabilirli\u011fini, test edilebilirli\u011fini ve yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r. Yeni bir ekip \u00fcyesinin, t\u00fcm altyap\u0131y\u0131 tek bir dosyada anlamaya \u00e7al\u0131\u015fmak yerine, belirli bir mod\u00fcl\u00fcn i\u015flevselli\u011fine odaklanmas\u0131 \u00e7ok daha kolayd\u0131r.<\/p>\n<h3>3. DevSecOps yakla\u015f\u0131m\u0131n\u0131n en b\u00fcy\u00fck faydas\u0131 nedir?<\/h3>\n<p>DevSecOps'un en b\u00fcy\u00fck faydas\u0131, g\u00fcvenli\u011fi geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcrecinin en ba\u015f\u0131na ta\u015f\u0131yarak \"g\u00fcvenlik a\u00e7\u0131\u011f\u0131 \u00f6nleme\" yakla\u015f\u0131m\u0131n\u0131 benimsemesidir. Bu, g\u00fcvenlik sorunlar\u0131n\u0131n \u00fcretim ortam\u0131na ula\u015fmadan \u00f6nce, daha az maliyetli ve daha kolay bir \u015fekilde tespit edilip d\u00fczeltilmesini sa\u011flar. Ayr\u0131ca, g\u00fcvenlik ekipleri ile geli\u015ftirme\/operasyon ekipleri aras\u0131ndaki i\u015fbirli\u011fini art\u0131r\u0131r, g\u00fcvenlik kontrollerini otomatikle\u015ftirerek insan hatas\u0131n\u0131 azalt\u0131r ve organizasyonun genel g\u00fcvenlik duru\u015funu \u00f6nemli \u00f6l\u00e7\u00fcde g\u00fc\u00e7lendirir.<\/p>\n<h3>4. Azure DevOps ile Terraform entegrasyonu nas\u0131l yap\u0131l\u0131r?<\/h3>\n<p>Azure DevOps ile Terraform entegrasyonu olduk\u00e7a kolayd\u0131r. Azure Repos'ta Terraform kodunuzu saklayabilir, Azure Pipelines kullanarak CI\/CD i\u015flem hatlar\u0131 olu\u015fturabilirsiniz. Bu pipeline'lar i\u00e7inde Terraform CLI komutlar\u0131n\u0131 (<code>init<\/code>, <code>plan<\/code>, <code>apply<\/code>) \u00e7al\u0131\u015ft\u0131ran g\u00f6revler tan\u0131mlayabilir, g\u00fcvenlik taray\u0131c\u0131lar\u0131n\u0131 entegre edebilir ve Terraform durum dosyas\u0131n\u0131 Azure Blob Storage'da saklamak i\u00e7in <code>azurerm<\/code> backend'ini kullanabilirsiniz. Ayr\u0131ca, Terraform'un Azure Service Principal ile kimlik do\u011frulamas\u0131 yaparak Azure kaynaklar\u0131n\u0131 y\u00f6netmesini sa\u011flayabilirsiniz.<\/p>\n<h3>5. Mevcut Azure kaynaklar\u0131m\u0131 Terraform ile nas\u0131l y\u00f6netmeye ba\u015flayabilirim?<\/h3>\n<p>Mevcut Azure kaynaklar\u0131n\u0131z\u0131 Terraform ile y\u00f6netmeye ba\u015flamak i\u00e7in <code>terraform import<\/code> komutunu kullanabilirsiniz. Bu komut, mevcut bir Azure kayna\u011f\u0131n\u0131 Terraform durum dosyas\u0131na eklemenizi sa\u011flar. Ancak, b\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131lar i\u00e7in bu s\u00fcre\u00e7 zaman al\u0131c\u0131 olabilir. Genellikle, kritik ve yeni olu\u015fturulan altyap\u0131lar i\u00e7in \"Terraform-first\" yakla\u015f\u0131m\u0131n\u0131 benimsemek ve mevcut kaynaklar\u0131 veri kaynaklar\u0131 (<code>data<\/code> bloklar\u0131) arac\u0131l\u0131\u011f\u0131yla referans almak daha pratik bir yakla\u015f\u0131md\u0131r. Daha sonra, zamanla en kritik mevcut kaynaklar\u0131n\u0131z\u0131 yava\u015f yava\u015f Terraform kapsam\u0131na alabilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve&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-35241","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>\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)<\/title>\n<meta name=\"description\" content=\"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\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\/\ud83d\ude80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)\" \/>\n<meta property=\"og:description\" content=\"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/\ud83d\ude80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-27T06:31:35+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)\",\"datePublished\":\"2025-11-27T06:31:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\"},\"wordCount\":4420,\"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\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\",\"name\":\"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-27T06:31:35+00:00\",\"description\":\"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)\"}]},{\"@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":"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)","description":"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\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\/\ud83d\ude80-terraform-azure-altyapisi-moduler-mimari-devsecops\/","og_locale":"tr_TR","og_type":"article","og_title":"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)","og_description":"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/\ud83d\ude80-terraform-azure-altyapisi-moduler-mimari-devsecops\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-27T06:31:35+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)","datePublished":"2025-11-27T06:31:35+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/"},"wordCount":4420,"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\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/","url":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/","name":"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-27T06:31:35+00:00","description":"Bulut altyap\u0131n\u0131z\u0131 y\u00f6netmek karma\u015f\u0131k bir labirente mi benziyor? \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde, Azure \u00fczerindeki kaynaklar\u0131 verimli, g\u00fcvenli ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir sorun te\u015fkil eder. Bu teknik makale, Terraform, mod\u00fcler mimari ve DevSecOps prensiplerini bir araya getirerek bu zorluklar\u0131n \u00fcstesinden nas\u0131l gelebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/%f0%9f%9a%80-terraform-azure-altyapisi-moduler-mimari-devsecops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"\ud83d\ude80 Terraform Azure Altyap\u0131s\u0131 (Mod\u00fcler Mimari + DevSecOps)"}]},{"@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\/35241","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=35241"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35241\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}