{"id":31672,"date":"2025-10-12T16:01:44","date_gmt":"2025-10-12T13:01:44","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/"},"modified":"2025-10-12T16:01:44","modified_gmt":"2025-10-12T13:01:44","slug":"terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/","title":{"rendered":"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!"},"content":{"rendered":"<style>\n  body {\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    line-height: 1.7;\n    color: #333;\n    margin: 0;\n    padding: 0;\n    background-color: #f8f9fa;\n  }\n  .container {\n    max-width: 960px;\n    margin: 0 auto;\n    padding: 20px;\n    background-color: #ffffff;\n    box-shadow: 0 0 10px rgba(0,0,0,0.05);\n  }\n  h2 {\n    color: #0056b3;\n    border-bottom: 2px solid #e0e0e0;\n    padding-bottom: 10px;\n    margin-top: 35px;\n    font-size: 2.2em;\n  }\n  h3 {\n    color: #007bff;\n    margin-top: 25px;\n    font-size: 1.6em;\n  }\n  p {\n    margin-bottom: 15px;\n    text-align: justify;\n  }\n  ul, ol {\n    margin-bottom: 15px;\n    padding-left: 25px;\n  }\n  li {\n    margin-bottom: 8px;\n  }\n  pre {\n    background-color: #f4f4f4;\n    padding: 15px;\n    border-radius: 5px;\n    overflow-x: auto;\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 0.9em;\n    border: 1px solid #ddd;\n    white-space: pre-wrap; \/* Uzun sat\u0131rlar\u0131n sar\u0131lmas\u0131n\u0131 sa\u011flar *\/\n    word-wrap: break-word; \/* Uzun kelimelerin k\u0131r\u0131lmas\u0131n\u0131 sa\u011flar *\/\n  }\n  code {\n    font-family: 'Courier New', Courier, monospace;\n    background-color: #e8e8e8;\n    padding: 2px 4px;\n    border-radius: 3px;\n    color: #c7254e;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 20px 0;\n  }\n  th, td {\n    border: 1px solid #dee2e6;\n    padding: 10px;\n    text-align: left;\n  }\n  th {\n    background-color: #e9ecef;\n    font-weight: bold;\n    color: #495057;\n  }\n  .expert-tip {\n    background-color: #e6f7ff;\n    border-left: 5px solid #007bff;\n    padding: 15px;\n    margin: 20px 0;\n    border-radius: 4px;\n    font-style: italic;\n    color: #0056b3;\n  }\n  .faq {\n    background-color: #f9f9f9;\n    border: 1px solid #ddd;\n    padding: 15px;\n    margin: 15px 0;\n    border-radius: 4px;\n  }\n  .faq h3 {\n    margin-top: 0;\n    color: #007bff;\n    font-size: 1.4em;\n  }<\/p>\n<p>  \/* Mobil uyumluluk i\u00e7in medya sorgular\u0131 *\/\n  @media (max-width: 768px) {\n    .container {\n      padding: 15px;\n    }\n    h2 {\n      font-size: 1.8em;\n      margin-top: 25px;\n    }\n    h3 {\n      font-size: 1.4em;\n      margin-top: 20px;\n    }\n    pre {\n      font-size: 0.85em;\n      padding: 10px;\n    }\n    table, thead, tbody, th, td, tr {\n      display: block;\n    }\n    thead tr {\n      position: absolute;\n      top: -9999px;\n      left: -9999px;\n    }\n    tr { border: 1px solid #ccc; margin-bottom: 10px; }\n    td {\n      border: none;\n      border-bottom: 1px solid #eee;\n      position: relative;\n      padding-left: 50%;\n      text-align: right;\n    }\n    td:before {\n      position: absolute;\n      top: 6px;\n      left: 6px;\n      width: 45%;\n      padding-right: 10px;\n      white-space: nowrap;\n      content: attr(data-label);\n      font-weight: bold;\n      text-align: left;\n    }\n    .expert-tip, .faq {\n      padding: 10px;\n      margin: 15px 0;\n    }\n  }\n  @media (max-width: 480px) {\n    .container {\n      padding: 10px;\n    }\n    h2 {\n      font-size: 1.5em;\n      margin-top: 20px;\n    }\n    h3 {\n      font-size: 1.2em;\n      margin-top: 15px;\n    }\n    p {\n      font-size: 0.95em;\n    }\n    ul, ol {\n      padding-left: 20px;\n    }\n  }\n<\/style>\n<div class=\"container\">\n<p>Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.<\/p>\n<p>Bulut altyap\u0131s\u0131 y\u00f6netimi g\u00fcn\u00fcm\u00fczde neredeyse her yaz\u0131l\u0131m projesinin ayr\u0131lmaz bir par\u00e7as\u0131 haline geldi. Ancak, dinamik ve h\u0131zla de\u011fi\u015fen bu ortamda altyap\u0131y\u0131 manuel olarak y\u00f6netmek hem zaman al\u0131c\u0131 hem de hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir. \u0130\u015fte tam bu noktada Infrastructure as Code (IaC) felsefesi ve Terraform gibi ara\u00e7lar devreye giriyor. Terraform, altyap\u0131n\u0131z\u0131 kod olarak tan\u0131mlaman\u0131za ve versiyonlaman\u0131za olanak tan\u0131yarak bu s\u00fcreci otomatize eder ve tutarl\u0131l\u0131k sa\u011flar. Ancak, bir\u00e7ok geli\u015ftirici ve operasyon ekibi, Terraform&#8217;u benimserken ortak bir sorunla kar\u015f\u0131la\u015f\u0131r: Tekrar eden kod bloklar\u0131, farkl\u0131 ortamlar aras\u0131nda tutars\u0131zl\u0131klar, mod\u00fcllerin yeniden kullan\u0131labilirli\u011finin d\u00fc\u015f\u00fck olmas\u0131 ve genel bir karma\u015fa.<\/p>\n<p>D\u00fc\u015f\u00fcn\u00fcn ki farkl\u0131 ekipleriniz var ve her ekip kendi mikroservisi i\u00e7in benzer bir veritaban\u0131 veya a\u011f altyap\u0131s\u0131 kurmak zorunda kal\u0131yor. Her biri kendi \u00e7\u00f6z\u00fcm\u00fcn\u00fc \u00fcretti\u011finde, bu durum zamanla &#8220;snowflake&#8221; altyap\u0131lar\u0131na yol a\u00e7ar. Yani, her altyap\u0131 birbirinden farkl\u0131 ve \u00f6zel hale gelir, bu da bak\u0131m\u0131 zorla\u015ft\u0131r\u0131r, sorun gidermeyi karma\u015f\u0131kla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131na davetiye \u00e7\u0131kar\u0131r. Ortak bir standart veya en iyi uygulama olmad\u0131\u011f\u0131 i\u00e7in, ekipler her seferinde tekerle\u011fi yeniden icat etmeye \u00e7al\u0131\u015f\u0131r, bu da verimsizli\u011fe ve moral bozuklu\u011funa neden olur. \u0130\u015fte bu ba\u015f a\u011fr\u0131lar\u0131na bir son vermek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcme ihtiyac\u0131m\u0131z var: Kapsaml\u0131 bir Terraform referans deposu.<\/p>\n<p>Bu makale, s\u0131f\u0131rdan ba\u015flayarak, sizi b\u00f6yle bir referans deposu olu\u015fturman\u0131n inceliklerine g\u00f6t\u00fcrecektir. Amac\u0131m\u0131z, sadece kod \u00f6rnekleri sunmak de\u011fil, ayn\u0131 zamanda altyap\u0131 y\u00f6netiminde kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z yayg\u0131n sorunlara kal\u0131c\u0131 \u00e7\u00f6z\u00fcmler getirecek bir yap\u0131sal yakla\u015f\u0131m sunmakt\u0131r. Bu sayede, Terraform projelerinizde tutarl\u0131l\u0131\u011f\u0131 art\u0131racak, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131racak ve en \u00f6nemlisi, altyap\u0131 y\u00f6netimiyle ilgili s\u0131k\u0131nt\u0131lar\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azaltacaks\u0131n\u0131z. Gelin, Terraform d\u00fcnyas\u0131nda d\u00fczeni ve verimlili\u011fi sa\u011flaman\u0131n yollar\u0131n\u0131 ke\u015ffedelim.<\/p>\n<h2>Terraform Temelleri: Neden Bir Referans Deposuna \u0130htiyac\u0131m\u0131z Var?<\/h2>\n<p>Terraform, HashiCorp taraf\u0131ndan geli\u015ftirilen, a\u00e7\u0131k kaynakl\u0131 bir Infrastructure as Code (IaC) arac\u0131d\u0131r. Bu ara\u00e7, altyap\u0131 kaynaklar\u0131n\u0131 (sanal makineler, a\u011flar, veritabanlar\u0131 vb.) insan taraf\u0131ndan okunabilir yap\u0131land\u0131rma dosyalar\u0131 kullanarak tan\u0131mlaman\u0131z\u0131, sa\u011flaman\u0131z\u0131 ve y\u00f6netmenizi sa\u011flar. Basit\u00e7e s\u00f6ylemek gerekirse, sunucular\u0131n\u0131z\u0131 veya di\u011fer bulut hizmetlerinizi t\u0131klayarak olu\u015fturmak yerine, bunlar\u0131 kod yazarak olu\u015fturursunuz. Bu yakla\u015f\u0131m, manuel hatalar\u0131 azalt\u0131r, altyap\u0131 da\u011f\u0131t\u0131m\u0131n\u0131 otomatize eder ve altyap\u0131n\u0131z\u0131n s\u00fcr\u00fcm kontrol sistemleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netilmesini m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<p>IaC&#8217;nin benimsenmesi, modern DevOps pratiklerinin temelini olu\u015fturur. Ancak, sadece Terraform kullanmak yeterli de\u011fildir; onu etkili bir \u015fekilde kullanmak i\u00e7in belirli bir yap\u0131 ve disiplin gereklidir. \u0130\u015fte tam bu noktada bir Terraform referans deposunun \u00f6nemi ortaya \u00e7\u0131kar. Referans deposu, Terraform kodunuzu d\u00fczenli, yeniden kullan\u0131labilir ve s\u00fcrd\u00fcr\u00fclebilir bir \u015fekilde organize etmek i\u00e7in tasarlanm\u0131\u015f merkezi bir konumdur. Peki, neden buna ihtiyac\u0131m\u0131z var?<\/p>\n<ul>\n<li><strong>Tutarl\u0131l\u0131k Sa\u011flama:<\/strong> Farkl\u0131 ekipler veya projeler aras\u0131nda benzer altyap\u0131lar olu\u015fturulurken ayn\u0131 standartlar\u0131n ve konfig\u00fcrasyonlar\u0131n kullan\u0131lmas\u0131n\u0131 garanti eder. Bu, &#8220;yap\u0131land\u0131rma kaymas\u0131&#8221;n\u0131 \u00f6nler.<\/li>\n<li><strong>Yeniden Kullan\u0131labilirlik:<\/strong> Ortak altyap\u0131 bile\u015fenleri (\u00f6rne\u011fin, VPC&#8217;ler, veritabanlar\u0131, g\u00fcvenlik gruplar\u0131) mod\u00fcller halinde bir kez yaz\u0131l\u0131r ve birden \u00e7ok projede tekrar tekrar kullan\u0131l\u0131r. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ve geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>\u00d6\u011frenme E\u011frisini Azaltma:<\/strong> Yeni ekip \u00fcyelerinin projeye adaptasyonunu kolayla\u015ft\u0131r\u0131r, \u00e7\u00fcnk\u00fc belirli bir yap\u0131ya ve \u00f6nceden tan\u0131mlanm\u0131\u015f mod\u00fcllere sahiptirler. Ayr\u0131ca, en iyi uygulamalar\u0131 (best practices) \u00f6\u011frenmeleri i\u00e7in bir referans noktas\u0131 sunar.<\/li>\n<li><strong>\u0130\u015fbirli\u011fini Geli\u015ftirme:<\/strong> Payla\u015f\u0131lan bir depo, ekiplerin altyap\u0131 kodlar\u0131 \u00fczerinde daha etkili bir \u015fekilde i\u015fbirli\u011fi yapmas\u0131na olanak tan\u0131r. Kod incelemeleri (code reviews) ve versiyon kontrol\u00fc, kalitenin artmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Hatalar\u0131 Azaltma:<\/strong> Standartla\u015ft\u0131r\u0131lm\u0131\u015f mod\u00fcller ve otomatikle\u015ftirilmi\u015f da\u011f\u0131t\u0131m s\u00fcre\u00e7leri sayesinde manuel hatalar\u0131n oran\u0131 d\u00fc\u015fer.<\/li>\n<li><strong>Bak\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Altyap\u0131daki bir de\u011fi\u015fiklik veya g\u00fcncelleme gerekti\u011finde, bu de\u011fi\u015fiklikler merkezi olarak y\u00f6netilen mod\u00fcllerde yap\u0131l\u0131r ve t\u00fcm ba\u011f\u0131ml\u0131 projeler taraf\u0131ndan kolayca g\u00fcncellenebilir.<\/li>\n<\/ul>\n<p><strong>Vaka Analizi: B\u00fcy\u00fck Bir Kurulu\u015fta Altyap\u0131 Kaosu<\/strong><\/p>\n<p>B\u00fcy\u00fck bir e-ticaret kurulu\u015fu, h\u0131zl\u0131 b\u00fcy\u00fcme ve farkl\u0131 \u00fcr\u00fcn ekipleriyle birlikte altyap\u0131 y\u00f6netiminde ciddi zorluklar ya\u015famaktayd\u0131. Her \u00fcr\u00fcn ekibi, kendi ihtiya\u00e7lar\u0131na g\u00f6re AWS \u00fczerinde VPC, EC2 instance&#8217;lar\u0131, RDS veritabanlar\u0131 ve S3 kovalar\u0131 olu\u015fturuyordu. Ancak, ortak bir IaC stratejisi ve referans deposu olmad\u0131\u011f\u0131 i\u00e7in, her ekibin Terraform kodu birbirinden farkl\u0131yd\u0131. \u00d6rne\u011fin, bir ekip VPC&#8217;leri <code>10.0.0.0\/16<\/code> CIDR blo\u011fuyla olu\u015ftururken, di\u011feri <code>172.16.0.0\/16<\/code> kullanabiliyordu. G\u00fcvenlik gruplar\u0131 ve IAM rolleri de tutars\u0131z bir \u015fekilde yap\u0131land\u0131r\u0131l\u0131yordu.<\/p>\n<p>Bu durum, zamanla \u015fu sorunlara yol a\u00e7t\u0131:<\/p>\n<ul>\n<li><strong>Adland\u0131rma ve Etiketleme Karma\u015fas\u0131:<\/strong> Kaynaklar\u0131n adland\u0131r\u0131lmas\u0131 ve etiketlenmesi standart olmad\u0131\u011f\u0131 i\u00e7in, envanter y\u00f6netimi ve maliyet takibi imkans\u0131z hale geldi.<\/li>\n<li><strong>G\u00fcvenlik A\u00e7\u0131klar\u0131:<\/strong> Farkl\u0131 g\u00fcvenlik grubu konfig\u00fcrasyonlar\u0131, baz\u0131 ortamlarda gereksiz portlar\u0131n a\u00e7\u0131k kalmas\u0131na neden oldu, bu da potansiyel g\u00fcvenlik riskleri olu\u015fturdu.<\/li>\n<li><strong>Y\u00fcksek Maliyetler:<\/strong> Tekrar eden, optimize edilmemi\u015f altyap\u0131 kodlar\u0131 nedeniyle kaynak israf\u0131 ya\u015fand\u0131. \u00d6rne\u011fin, t\u00fcm ekipler ayr\u0131 CloudWatch log gruplar\u0131 olu\u015ftururken, ortak bir yap\u0131land\u0131rma ile bu kaynaklar daha verimli kullan\u0131labilirdi.<\/li>\n<li><strong>Yava\u015f Da\u011f\u0131t\u0131m S\u00fcre\u00e7leri:<\/strong> Her yeni proje veya ortam i\u00e7in altyap\u0131n\u0131n s\u0131f\u0131rdan tasarlanmas\u0131 ve uygulanmas\u0131 uzun zaman al\u0131yordu.<\/li>\n<li><strong>Ekip Stresi:<\/strong> Operasyon ekipleri, her ekibin kendine \u00f6zg\u00fc altyap\u0131 yap\u0131land\u0131rmas\u0131n\u0131 anlamakta ve sorun gidermekte zorlan\u0131yordu, bu da s\u00fcrekli bir yang\u0131n s\u00f6nd\u00fcrme moduna yol a\u00e7t\u0131.<\/li>\n<\/ul>\n<p>Bu kaos ortam\u0131ndan \u00e7\u0131kmak i\u00e7in kurulu\u015f, merkezi bir Terraform referans deposu olu\u015fturma karar\u0131 ald\u0131. Bu depo, t\u00fcm ortak altyap\u0131 bile\u015fenleri i\u00e7in onaylanm\u0131\u015f ve test edilmi\u015f Terraform mod\u00fcllerini i\u00e7eriyordu. G\u00fcvenlik ve a\u011f ekipleri, referans mod\u00fcllerini haz\u0131rlad\u0131 ve t\u00fcm \u00fcr\u00fcn ekiplerinin bunlar\u0131 kullanmas\u0131n\u0131 zorunlu k\u0131ld\u0131. Sonu\u00e7 olarak, kurulu\u015f altyap\u0131 da\u011f\u0131t\u0131m s\u00fcrelerini %60 azaltt\u0131, g\u00fcvenlik tutarl\u0131l\u0131\u011f\u0131n\u0131 %90 art\u0131rd\u0131 ve operasyonel maliyetlerde \u00f6nemli \u00f6l\u00e7\u00fcde tasarruf sa\u011flad\u0131. Bu vaka analizi, bir referans deposunun sadece iyi bir uygulama olmaktan \u00f6te, b\u00fcy\u00fck \u00f6l\u00e7ekli altyap\u0131 y\u00f6netiminde kritik bir zorunluluk oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir.<\/p>\n<h2>Referans Deposu Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r? Temel Bile\u015fenler ve En \u0130yi Uygulamalar<\/h2>\n<p>Etkili bir Terraform referans deposu olu\u015fturman\u0131n anahtar\u0131, mod\u00fclerlik, okunabilirlik ve s\u00fcrd\u00fcr\u00fclebilirlik prensiplerine uygun, iyi d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015f bir yap\u0131land\u0131rmad\u0131r. Bu b\u00f6l\u00fcm, deponuzun temel bile\u015fenlerini ve her birinin nas\u0131l organize edilmesi gerekti\u011fini detayland\u0131racakt\u0131r. Amac\u0131m\u0131z, hem yeni ba\u015flayanlar\u0131n hem de deneyimli kullan\u0131c\u0131lar\u0131n kolayca anlayabilece\u011fi ve kullanabilece\u011fi, \u00f6l\u00e7eklenebilir bir yap\u0131 sunmakt\u0131r.<\/p>\n<p>Bir referans deposunun tipik yap\u0131s\u0131 genellikle a\u015fa\u011f\u0131daki gibi hiyerar\u015fik bir d\u00fczeni takip eder:<\/p>\n<pre><code>\nmy-terraform-repo\/\n\u251c\u2500\u2500 modules\/\n\u2502   \u251c\u2500\u2500 aws-vpc\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u251c\u2500\u2500 outputs.tf\n\u2502   \u2502   \u2514\u2500\u2500 README.md\n\u2502   \u251c\u2500\u2500 aws-ec2-instance\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u251c\u2500\u2500 outputs.tf\n\u2502   \u2502   \u2514\u2500\u2500 README.md\n\u2502   \u2514\u2500\u2500 ... (di\u011fer mod\u00fcller)\n\u251c\u2500\u2500 environments\/\n\u2502   \u251c\u2500\u2500 dev\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u251c\u2500\u2500 providers.tf\n\u2502   \u2502   \u2514\u2500\u2500 backend.tf\n\u2502   \u251c\u2500\u2500 staging\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2502   \u251c\u2500\u2500 providers.tf\n\u2502   \u2502   \u2514\u2500\u2500 backend.tf\n\u2502   \u2514\u2500\u2500 prod\/\n\u2502       \u251c\u2500\u2500 main.tf\n\u2502       \u251c\u2500\u2500 variables.tf\n\u2502       \u251c\u2500\u2500 providers.tf\n\u2502       \u2514\u2500\u2500 backend.tf\n\u251c\u2500\u2500 examples\/\n\u2502   \u251c\u2500\u2500 basic-web-app\/\n\u2502   \u2502   \u2514\u2500\u2500 main.tf\n\u2502   \u251c\u2500\u2500 complex-data-pipeline\/\n\u2502   \u2502   \u2514\u2500\u2500 main.tf\n\u2502   \u2514\u2500\u2500 ... (kullan\u0131m \u00f6rnekleri)\n\u251c\u2500\u2500 globals\/\n\u2502   \u2514\u2500\u2500 providers.tf  # Opsiyonel: t\u00fcm ortamlar i\u00e7in genel provider ayarlar\u0131\n\u251c\u2500\u2500 scripts\/\n\u2502   \u2514\u2500\u2500 deploy.sh     # CI\/CD i\u00e7in yard\u0131mc\u0131 scriptler\n\u2514\u2500\u2500 README.md\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi bu bile\u015fenleri daha yak\u0131ndan inceleyelim:<\/p>\n<ol>\n<li><strong><code>modules\/<\/code> Dizini:<\/strong>\n<p>Bu dizin, yeniden kullan\u0131labilir Terraform mod\u00fcllerinizi bar\u0131nd\u0131r\u0131r. Her mod\u00fcl, belirli bir altyap\u0131 bile\u015fenini (\u00f6rne\u011fin, bir AWS VPC, bir Azure VM, bir GCP Cloud SQL instance'\u0131) soyutlar. Mod\u00fcller, parametrele\u015ftirilebilir olmal\u0131, yani farkl\u0131 ba\u011flamlarda farkl\u0131 de\u011ferlerle kullan\u0131labilmelidir. Her mod\u00fcl kendi i\u00e7inde <code>main.tf<\/code> (kaynak tan\u0131mlar\u0131), <code>variables.tf<\/code> (giri\u015f de\u011fi\u015fkenleri), <code>outputs.tf<\/code> (\u00e7\u0131kt\u0131 de\u011ferleri) ve bir <code>README.md<\/code> (kullan\u0131m k\u0131lavuzu) dosyas\u0131 i\u00e7ermelidir. Bu yap\u0131, mod\u00fcl\u00fcn hem kendi i\u00e7inde anla\u015f\u0131lmas\u0131n\u0131 hem de di\u011fer geli\u015ftiriciler taraf\u0131ndan kolayca kullan\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Mod\u00fcl Yazma Prensipleri:<\/strong><\/p>\n<ul>\n<li><strong>\u0130zolasyon:<\/strong> Her mod\u00fcl, m\u00fcmk\u00fcn oldu\u011funca tek bir sorumlulu\u011fa sahip olmal\u0131d\u0131r. \u00d6rne\u011fin, bir VPC mod\u00fcl\u00fc sadece VPC'yi olu\u015fturmal\u0131, EC2 instance'\u0131 olu\u015fturmamal\u0131d\u0131r.<\/li>\n<li><strong>Parametrele\u015ftirme:<\/strong> T\u00fcm dinamik de\u011ferler de\u011fi\u015fken olarak tan\u0131mlanmal\u0131 ve mod\u00fcl\u00fcn kullan\u0131c\u0131lar\u0131 taraf\u0131ndan sa\u011flanabilmelidir. Varsay\u0131lan de\u011ferler (<code>default<\/code>) kullanmak esnekli\u011fi art\u0131r\u0131r.<\/li>\n<li><strong>A\u00e7\u0131klay\u0131c\u0131l\u0131k:<\/strong> Her mod\u00fcl\u00fcn iyi bir <code>README.md<\/code> dosyas\u0131 olmal\u0131 ve mod\u00fcl\u00fcn ne yapt\u0131\u011f\u0131n\u0131, hangi de\u011fi\u015fkenleri ald\u0131\u011f\u0131n\u0131, hangi \u00e7\u0131kt\u0131lar\u0131 verdi\u011fini ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 net bir \u015fekilde a\u00e7\u0131klamal\u0131d\u0131r.<\/li>\n<\/ul>\n<p><strong>Kod \u00d6rne\u011fi: Basit bir AWS VPC mod\u00fcl\u00fc<\/strong><\/p>\n<pre><code>\n\/\/ modules\/aws-vpc\/main.tf\nresource \"aws_vpc\" \"main\" {\n  cidr_block           = var.vpc_cidr\n  enable_dns_hostnames = true\n  enable_dns_support   = true\n  tags                 = merge(var.tags, { Name = \"${var.project_name}-vpc\" })\n}\n\nresource \"aws_internet_gateway\" \"gw\" {\n  vpc_id = aws_vpc.main.id\n  tags   = merge(var.tags, { Name = \"${var.project_name}-igw\" })\n}\n\n\/\/ modules\/aws-vpc\/variables.tf\nvariable \"vpc_cidr\" {\n  description = \"Olu\u015fturulacak VPC'nin CIDR blo\u011fu.\"\n  type        = string\n}\n\nvariable \"project_name\" {\n  description = \"Kaynaklara eklenecek proje ad\u0131 etiketi.\"\n  type        = string\n}\n\nvariable \"tags\" {\n  description = \"T\u00fcm VPC kaynaklar\u0131na eklenecek ek etiketler.\"\n  type        = map(string)\n  default     = {}\n}\n\n\/\/ modules\/aws-vpc\/outputs.tf\noutput \"vpc_id\" {\n  description = \"Olu\u015fturulan VPC'nin ID'si.\"\n  value       = aws_vpc.main.id\n}\n\noutput \"vpc_cidr_block\" {\n  description = \"Olu\u015fturulan VPC'nin CIDR blo\u011fu.\"\n  value       = aws_vpc.main.cidr_block\n}\n\noutput \"internet_gateway_id\" {\n  description = \"Olu\u015fturulan \u0130nternet A\u011f Ge\u00e7idi'nin ID'si.\"\n  value       = aws_internet_gateway.gw.id\n}\n<\/pre>\n<p><\/code>\n  <\/li>\n<li><strong><code>environments\/<\/code> Dizini:<\/strong>\n<p>Bu dizin, farkl\u0131 da\u011f\u0131t\u0131m ortamlar\u0131n\u0131 (geli\u015ftirme, test, \u00fcretim gibi) i\u00e7erir. Her ortam, kendi Terraform state dosyas\u0131n\u0131 y\u00f6netir ve kendi de\u011fi\u015fken de\u011ferleri setine sahiptir. Bu sayede, ayn\u0131 mod\u00fclleri kullanarak farkl\u0131 ortamlara \u00f6zg\u00fc konfig\u00fcrasyonlarla altyap\u0131 da\u011f\u0131tabiliriz. \u00d6rne\u011fin, \u00fcretim ortam\u0131nda daha g\u00fc\u00e7l\u00fc makineler veya daha y\u00fcksek kapasiteli veritabanlar\u0131 kullanmak m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>Her ortam dizini i\u00e7inde genellikle <code>main.tf<\/code> (mod\u00fclleri \u00e7a\u011f\u0131r\u0131r ve ortam \u00f6zel kaynaklar\u0131 tan\u0131mlar), <code>variables.tf<\/code> (ortam \u00f6zel de\u011fi\u015fkenleri), <code>providers.tf<\/code> (sa\u011flay\u0131c\u0131 konfig\u00fcrasyonlar\u0131) ve <code>backend.tf<\/code> (Terraform state dosyas\u0131n\u0131n nas\u0131l saklanaca\u011f\u0131n\u0131 tan\u0131mlar) bulunur.<\/p>\n<\/li>\n<li><strong><code>examples\/<\/code> Dizini:<\/strong>\n<p>Bu dizin, <code>modules\/<\/code> alt\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z mod\u00fcllerin ger\u00e7ek d\u00fcnya kullan\u0131m senaryolar\u0131n\u0131 g\u00f6sterir. Bu \u00f6rnekler, yeni kullan\u0131c\u0131lar\u0131n mod\u00fcllerinizi nas\u0131l kullanacaklar\u0131n\u0131 anlamalar\u0131na yard\u0131mc\u0131 olur ve potansiyel kullan\u0131m kal\u0131plar\u0131n\u0131 g\u00f6sterir. Ayr\u0131ca, mod\u00fcllerinizde yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikleri test etmek i\u00e7in de harika bir yerdir.<\/p>\n<\/li>\n<li><strong><code>globals\/<\/code> Dizini (Opsiyonel):<\/strong>\n<p>E\u011fer t\u00fcm ortamlar\u0131n\u0131zda ortak provider konfig\u00fcrasyonlar\u0131 veya genel de\u011fi\u015fkenleriniz varsa, bu dizin alt\u0131nda bunlar\u0131 tan\u0131mlayabilirsiniz. \u00d6rne\u011fin, t\u00fcm AWS kaynaklar\u0131n\u0131z\u0131n <code>eu-central-1<\/code> b\u00f6lgesinde olu\u015fturulmas\u0131n\u0131 istiyorsan\u0131z, bu bilgi burada tan\u0131mlanabilir.<\/p>\n<\/li>\n<li><strong><code>scripts\/<\/code> Dizini:<\/strong>\n<p>CI\/CD boru hatlar\u0131n\u0131zda kullanaca\u011f\u0131n\u0131z yard\u0131mc\u0131 script'leri (\u00f6rne\u011fin, <code>terraform plan<\/code> veya <code>terraform apply<\/code>'\u0131 sarmalayan script'ler) burada tutabilirsiniz. Bu script'ler, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini standardize etmenize yard\u0131mc\u0131 olur.<\/p>\n<\/ol>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Mod\u00fcllerinizi m\u00fcmk\u00fcn oldu\u011funca gran\u00fcler (k\u00fc\u00e7\u00fck ve tek odakl\u0131) tutun. B\u00fcy\u00fck, her \u015feyi yapan \"monolitik\" mod\u00fcllerden ka\u00e7\u0131n\u0131n. K\u00fc\u00e7\u00fck mod\u00fcller daha kolay test edilir, daha kolay y\u00f6netilir ve daha esnektir. Ayr\u0131ca, mod\u00fcllerinize anlaml\u0131 ve a\u00e7\u0131klay\u0131c\u0131 isimler vererek okunabilirli\u011fi art\u0131r\u0131n.\n<\/div>\n<p>Versiyonlama stratejisi de bir referans deposu i\u00e7in hayati \u00f6neme sahiptir. Mod\u00fcllerinizi versiyonlaman\u0131z, kullan\u0131c\u0131lar\u0131n belirli bir mod\u00fcl s\u00fcr\u00fcm\u00fcne ba\u011f\u0131ml\u0131 olmas\u0131n\u0131 sa\u011flar ve mod\u00fcl g\u00fcncellemelerinin beklenmedik sorunlara yol a\u00e7mas\u0131n\u0131 engeller. Semantic Versioning (Semantik S\u00fcr\u00fcmleme - MAJOR.MINOR.PATCH) mod\u00fcller i\u00e7in yayg\u0131n olarak kullan\u0131lan bir yakla\u015f\u0131md\u0131r. \u00d6rne\u011fin, <code>source = \".\/modules\/aws-vpc?ref=v1.0.0\"<\/code> gibi bir referansla belirli bir mod\u00fcl s\u00fcr\u00fcm\u00fcn\u00fc kullanabilirsiniz.<\/p>\n<p>Sonu\u00e7 olarak, iyi yap\u0131land\u0131r\u0131lm\u0131\u015f bir Terraform referans deposu, altyap\u0131 y\u00f6netiminizi sadece daha d\u00fczenli hale getirmekle kalmaz, ayn\u0131 zamanda ekipler aras\u0131 i\u015fbirli\u011fini g\u00fc\u00e7lendirir, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 art\u0131r\u0131r ve uzun vadede \u00f6nemli maliyet tasarrufu sa\u011flar. Bu temel prensipleri benimseyerek, altyap\u0131n\u0131z\u0131 daha \u00f6ng\u00f6r\u00fclebilir ve g\u00fcvenilir bir hale getirebilirsiniz.<\/p>\n<h2>Geli\u015fmi\u015f Stratejiler: Dinamik Ortamlar ve CI\/CD Entegrasyonu<\/h2>\n<p>Terraform referans deponuzu sadece yap\u0131land\u0131rmakla kalmay\u0131p, onu dinamik ortam y\u00f6netiminin ve s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131n\u0131n kalbine yerle\u015ftirmek, altyap\u0131 otomasyonunda ger\u00e7ek bir s\u0131\u00e7rama yapman\u0131z\u0131 sa\u011flar. Bu b\u00f6l\u00fcmde, daha karma\u015f\u0131k senaryolar\u0131 ele alaca\u011f\u0131z ve Terraform projelerinizin olgunlu\u011funu bir \u00fcst seviyeye ta\u015f\u0131yacak ileri d\u00fczey stratejileri ke\u015ffedece\u011fiz.<\/p>\n<h3>\u00c7oklu Ortam Y\u00f6netimi Nas\u0131l Daha Etkili Yap\u0131l\u0131r?<\/h3>\n<p>\u00c7o\u011fu yaz\u0131l\u0131m projesinde, geli\u015ftirme (<code>dev<\/code>), test\/sahneleme (<code>staging<\/code>) ve \u00fcretim (<code>prod<\/code>) gibi farkl\u0131 ortamlar bulunur. Bu ortamlar\u0131n her birinin kendine \u00f6zg\u00fc gereksinimleri ve kaynak konfig\u00fcrasyonlar\u0131 olabilir. Terraform'da \u00e7oklu ortam y\u00f6netimini sa\u011flaman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<ol>\n<li><strong>Ayr\u0131 Dizinler (\u00d6nerilen):<\/strong> Daha \u00f6nce bahsetti\u011fimiz <code>environments\/<\/code> dizini yakla\u015f\u0131m\u0131, her ortam i\u00e7in ayr\u0131 bir k\u00f6k mod\u00fcl dizini olu\u015fturmay\u0131 i\u00e7erir. Her dizin kendi <code>.tfstate<\/code> dosyas\u0131n\u0131 ve de\u011fi\u015fkenlerini y\u00f6netir. Bu, en yayg\u0131n ve y\u00f6netilebilir yakla\u015f\u0131md\u0131r \u00e7\u00fcnk\u00fc her ortam\u0131 birbirinden tamamen izole tutar.<\/li>\n<li><strong><code>terraform workspace<\/code> Kullan\u0131m\u0131:<\/strong> Terraform, ayn\u0131 k\u00f6k mod\u00fcl i\u00e7inde farkl\u0131 state dosyalar\u0131n\u0131 y\u00f6netmek i\u00e7in <code>terraform workspace<\/code> komutunu sunar. \u00d6rne\u011fin, <code>terraform workspace new dev<\/code> ile bir geli\u015ftirme \u00e7al\u0131\u015fma alan\u0131 olu\u015fturabilirsiniz. Ancak, bu yakla\u015f\u0131m genellikle daha k\u00fc\u00e7\u00fck projeler veya ayn\u0131 altyap\u0131n\u0131n farkl\u0131 varyasyonlar\u0131n\u0131 h\u0131zl\u0131ca denemek i\u00e7in daha uygundur. B\u00fcy\u00fck ve karma\u015f\u0131k projelerde ayr\u0131 dizinler, daha iyi izolasyon ve anla\u015f\u0131labilirlik sa\u011flar.<\/li>\n<\/ol>\n<p>Hangi yakla\u015f\u0131m\u0131 se\u00e7erseniz se\u00e7in, her ortam\u0131n kendi Terraform state dosyas\u0131n\u0131 g\u00fcvenli ve uzak bir backend'de saklamas\u0131 kritik \u00f6neme sahiptir. Bu, state dosyas\u0131n\u0131n kaybolmas\u0131n\u0131 \u00f6nler, ekipler aras\u0131 i\u015fbirli\u011fini m\u00fcmk\u00fcn k\u0131lar ve state kilitleme mekanizmalar\u0131 ile e\u015f zamanl\u0131 de\u011fi\u015fikliklerden kaynaklanan tutars\u0131zl\u0131klar\u0131 engeller.<\/p>\n<p><strong>Kod \u00d6rne\u011fi: Uzak Backend Yap\u0131land\u0131rmas\u0131 (AWS S3 ve DynamoDB ile)<\/strong><\/p>\n<pre><code>\n\/\/ environments\/dev\/backend.tf\nterraform {\n  backend \"s3\" {\n    bucket         = \"my-terraform-state-dev\"  # Dev ortam\u0131 i\u00e7in S3 kovas\u0131\n    key            = \"dev\/network\/terraform.tfstate\" # State dosyas\u0131n\u0131n yolu\n    region         = \"eu-central-1\" # S3 kovas\u0131n\u0131n bulundu\u011fu b\u00f6lge\n    encrypt        = true           # State dosyas\u0131n\u0131 \u015fifrele\n    dynamodb_table = \"my-terraform-state-lock\" # Kilitleme i\u00e7in DynamoDB tablosu\n  }\n}\n\n\/\/ environments\/prod\/backend.tf (farkl\u0131 bir kova ve yol)\nterraform {\n  backend \"s3\" {\n    bucket         = \"my-terraform-state-prod\" # Prod ortam\u0131 i\u00e7in S3 kovas\u0131\n    key            = \"prod\/network\/terraform.tfstate\"\n    region         = \"eu-central-1\"\n    encrypt        = true\n    dynamodb_table = \"my-terraform-state-lock\"\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>CI\/CD Boru Hatt\u0131na Terraform Entegrasyonu Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Altyap\u0131 kodunuz bir referans deposunda d\u00fczenli bir \u015fekilde sakland\u0131\u011f\u0131nda, bir sonraki do\u011fal ad\u0131m bu kodun otomatik olarak da\u011f\u0131t\u0131m\u0131n\u0131 sa\u011flamakt\u0131r. CI\/CD boru hatlar\u0131, Terraform i\u015flemlerini (<code>init<\/code>, <code>plan<\/code>, <code>apply<\/code>) otomatikle\u015ftirerek insan m\u00fcdahalesini en aza indirir ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r.<\/p>\n<p>Tipik bir Terraform CI\/CD boru hatt\u0131 \u015fu ad\u0131mlar\u0131 i\u00e7erebilir:<\/p>\n<ol>\n<li><strong>Kod De\u011fi\u015fikli\u011fi (Commit):<\/strong> Bir geli\u015ftirici Terraform kodunda de\u011fi\u015fiklik yapar ve bunu Git deposuna push eder.<\/li>\n<li><strong>Tetkleme (Trigger):<\/strong> Git push i\u015flemi, CI\/CD sistemini (Jenkins, GitLab CI, GitHub Actions, Azure DevOps Pipelines vb.) tetikler.<\/li>\n<li><strong>\u0130nitializasyon (<code>terraform init<\/code>):<\/strong> CI\/CD arac\u0131, ortam i\u00e7in gerekli sa\u011flay\u0131c\u0131 eklentilerini ve backend konfig\u00fcrasyonunu y\u00fcklemek \u00fczere <code>terraform init<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Do\u011frulama ve Bi\u00e7imlendirme (<code>terraform validate<\/code>, <code>terraform fmt<\/code>, <code>tflint<\/code>):<\/strong> Kodun s\u00f6zdizimsel olarak do\u011fru olup olmad\u0131\u011f\u0131n\u0131, en iyi uygulamalara uygun olup olmad\u0131\u011f\u0131n\u0131 ve bi\u00e7imlendirme standartlar\u0131n\u0131 kar\u015f\u0131lay\u0131p kar\u015f\u0131lamad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<li><strong>Planlama (<code>terraform plan<\/code>):<\/strong> Bu ad\u0131m, Terraform'un mevcut altyap\u0131 state'i ile tan\u0131mlanan konfig\u00fcrasyon aras\u0131ndaki farklar\u0131 analiz etmesini sa\u011flar. Plan \u00e7\u0131kt\u0131s\u0131, hangi kaynaklar\u0131n olu\u015fturulaca\u011f\u0131n\u0131, g\u00fcncellenece\u011fini veya yok edilece\u011fini detayl\u0131 olarak g\u00f6sterir. Bu \u00e7\u0131kt\u0131, genellikle bir kod incelemesi ad\u0131m\u0131nda onay i\u00e7in ekibe sunulur.<\/li>\n<li><strong>Uygulama (<code>terraform apply<\/code>):<\/strong> Plan onayland\u0131ktan sonra, CI\/CD arac\u0131 <code>terraform apply<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak altyap\u0131 de\u011fi\u015fikliklerini uygular. G\u00fcvenli bir ortamda, bu ad\u0131m genellikle manuel bir onay gerektirir, \u00f6zellikle \u00fcretim ortamlar\u0131 i\u00e7in.<\/li>\n<li><strong>Test (Terratest):<\/strong> Da\u011f\u0131t\u0131m sonras\u0131, Terratest gibi ara\u00e7larla altyap\u0131n\u0131n beklenen \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in u\u00e7tan uca testler \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/li>\n<\/ol>\n<p><strong>Vaka Analizi: H\u0131zl\u0131 B\u00fcy\u00fcyen Bir SaaS \u015eirketi<\/strong><\/p>\n<p>Bir SaaS (Software as a Service) \u015firketi, yeni m\u00fc\u015fteriler i\u00e7in h\u0131zl\u0131 bir \u015fekilde izole ortamlar olu\u015fturma ihtiyac\u0131yla kar\u015f\u0131 kar\u015f\u0131yayd\u0131. Her yeni m\u00fc\u015fteri i\u00e7in \u00f6zel bir VPC, veritabanlar\u0131, uygulama sunucular\u0131 ve di\u011fer AWS hizmetlerinin olu\u015fturulmas\u0131 gerekiyordu. Ba\u015flang\u0131\u00e7ta bu s\u00fcre\u00e7 manueldi ve g\u00fcnler s\u00fcr\u00fcyordu, bu da m\u00fc\u015fteri onboarding (m\u00fc\u015fteri kabul) s\u00fcre\u00e7lerini yava\u015flat\u0131yordu. \u015eirket, bu sorunu \u00e7\u00f6zmek i\u00e7in bir Terraform referans deposu ve entegre bir CI\/CD boru hatt\u0131 kullanmaya karar verdi.<\/p>\n<p>\u00d6nce, t\u00fcm temel altyap\u0131 bile\u015fenleri i\u00e7in parametrele\u015ftirilebilir Terraform mod\u00fclleri (AWS VPC mod\u00fcl\u00fc, RDS mod\u00fcl\u00fc, ECS k\u00fcmesi mod\u00fcl\u00fc vb.) referans deposuna eklendi. Ard\u0131ndan, yeni bir m\u00fc\u015fteri ortam\u0131 olu\u015fturmak i\u00e7in bir \"root module\" yaz\u0131ld\u0131 ve bu mod\u00fcl, referans deposundaki di\u011fer mod\u00fclleri belirli m\u00fc\u015fteri de\u011fi\u015fkenleri ile \u00e7a\u011f\u0131r\u0131yordu. GitHub Actions kullan\u0131larak bir CI\/CD boru hatt\u0131 kuruldu.<\/p>\n<p>Yeni bir m\u00fc\u015fteri i\u00e7in bir repoda PR a\u00e7\u0131ld\u0131\u011f\u0131nda, GitHub Actions otomatik olarak <code>terraform plan<\/code> \u00e7al\u0131\u015ft\u0131r\u0131r ve olu\u015fturulacak kaynaklar\u0131 PR yorumlar\u0131na ekler. Bir ekip \u00fcyesi bu plan\u0131 onaylad\u0131\u011f\u0131nda, <code>terraform apply<\/code> ad\u0131m\u0131 tetiklenir ve yeni m\u00fc\u015fteri ortam\u0131 tamamen otomatik olarak birka\u00e7 dakika i\u00e7inde da\u011f\u0131t\u0131l\u0131r. Bu otomasyon sayesinde \u015firket, m\u00fc\u015fteri onboarding s\u00fcresini g\u00fcnlerden dakikalara indirdi, operasyonel hatalar\u0131 s\u0131f\u0131ra yakla\u015ft\u0131rd\u0131 ve ekiplerin daha stratejik g\u00f6revlere odaklanmas\u0131n\u0131 sa\u011flad\u0131. Bu, dinamik ortam y\u00f6netimi ve CI\/CD entegrasyonunun i\u015fletmeler i\u00e7in nas\u0131l d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc olabilece\u011finin \u00e7arp\u0131c\u0131 bir \u00f6rne\u011fidir.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: CI\/CD boru hatt\u0131n\u0131zda <code>terraform apply -auto-approve<\/code> komutunu \u00fcretim ortamlar\u0131 i\u00e7in kullanmaktan ka\u00e7\u0131n\u0131n. Her zaman bir insan onay\u0131 veya detayl\u0131 bir otomatik kontrol ad\u0131m\u0131na yer verin. G\u00fcvenlik ve hata \u00f6nleme a\u00e7\u0131s\u0131ndan bu kritik bir ad\u0131md\u0131r. Ayr\u0131ca, <code>terraform plan<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 bir artifact olarak saklay\u0131n ve <code>apply<\/code> ad\u0131m\u0131 s\u0131ras\u0131nda ayn\u0131 plan dosyas\u0131n\u0131 kullan\u0131n, b\u00f6ylece plan ile uygulama aras\u0131nda bir tutars\u0131zl\u0131k olu\u015fmaz.\n<\/div>\n<h2>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Zorluklar ve \u00c7\u00f6z\u00fcm \u00d6nerileri<\/h2>\n<p>Terraform ile altyap\u0131 y\u00f6netimi, bir\u00e7ok avantaj sunsa da, beraberinde baz\u0131 zorluklar\u0131 da getirir. \u00d6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde, bu zorluklar geli\u015ftirme s\u00fcre\u00e7lerini yava\u015flatabilir ve hatta sistem ar\u0131zalar\u0131na yol a\u00e7abilir. Neyse ki, bu sorunlar\u0131n \u00e7o\u011fu i\u00e7in kan\u0131tlanm\u0131\u015f \u00e7\u00f6z\u00fcmler ve en iyi uygulamalar bulunmaktad\u0131r. \u0130\u015fte en s\u0131k kar\u015f\u0131la\u015f\u0131lan baz\u0131 zorluklar ve bunlara y\u00f6nelik \u00e7\u00f6z\u00fcm \u00f6nerileri:<\/p>\n<h3>State Y\u00f6netimi: Merkezi Kontrol ve G\u00fcvenlik Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Terraform, altyap\u0131n\u0131z\u0131n mevcut durumunu (state) takip etmek i\u00e7in bir state dosyas\u0131 kullan\u0131r. Bu dosya, Terraform'un y\u00f6netti\u011fi kaynaklar\u0131n ID'lerini, \u00f6zelliklerini ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7erir. State y\u00f6netimi, Terraform'un kalbidir, ancak ayn\u0131 zamanda en b\u00fcy\u00fck zorluklar\u0131ndan biri olabilir.<\/p>\n<ul>\n<li><strong>State Tutars\u0131zl\u0131\u011f\u0131 ve \u00c7ak\u0131\u015fmalar:<\/strong> Birden fazla ki\u015fi ayn\u0131 state dosyas\u0131 \u00fczerinde \u00e7al\u0131\u015f\u0131rken veya CI\/CD boru hatlar\u0131 e\u015fzamanl\u0131 olarak tetiklendi\u011finde state tutars\u0131zl\u0131klar\u0131 veya \u00e7ak\u0131\u015fmalar ya\u015fanabilir.<\/li>\n<li><strong>Hassas Bilgi S\u0131z\u0131nt\u0131s\u0131:<\/strong> State dosyalar\u0131, hassas bilgiler (\u00f6rne\u011fin, veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) i\u00e7erebilir ve bunlar\u0131n d\u00fcz metin olarak saklanmas\u0131 b\u00fcy\u00fck bir g\u00fcvenlik riski olu\u015fturur.<\/li>\n<li><strong>State Kayb\u0131\/Bozulmas\u0131:<\/strong> Yerel olarak tutulan state dosyalar\u0131, makine ar\u0131zalar\u0131 veya yanl\u0131\u015fl\u0131kla silinmeler sonucunda kaybolabilir veya bozulabilir.<\/li>\n<\/ul>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<ol>\n<li><strong>Uzak Backend Kullan\u0131m\u0131:<\/strong> State dosyalar\u0131n\u0131z\u0131 her zaman S3 (AWS), Azure Blob Storage (Azure), Google Cloud Storage (GCP) gibi g\u00fcvenli ve y\u00fcksek eri\u015filebilirli\u011fe sahip uzak bir backend'de saklay\u0131n. Bu, state kayb\u0131n\u0131 \u00f6nler ve ekipler aras\u0131 i\u015fbirli\u011fini kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>State Kilitleme Mekanizmas\u0131:<\/strong> Uzak backend'inizi state kilitlemeyi destekleyen bir servis ile entegre edin (\u00f6rne\u011fin, AWS i\u00e7in DynamoDB, Azure i\u00e7in Azure Storage Account'un yerle\u015fik kilitlemesi). Bu, ayn\u0131 state \u00fczerinde birden fazla i\u015flemin e\u015fzamanl\u0131 olarak \u00e7al\u0131\u015fmas\u0131n\u0131 engeller ve \u00e7ak\u0131\u015fmalar\u0131 \u00f6nler.<\/li>\n<li><strong>State \u015eifrelemesi:<\/strong> Hassas bilgilerin state dosyas\u0131nda d\u00fcz metin olarak g\u00f6r\u00fcnmesini engellemek i\u00e7in state dosyas\u0131n\u0131 \u015fifreleyin. \u00c7o\u011fu uzak backend, depolama s\u0131ras\u0131nda \u015fifreleme (encryption at rest) \u00f6zelli\u011fini destekler. Ek olarak, hassas bilgileri Terraform state'inde hi\u00e7 tutmamak i\u00e7in Secret Y\u00f6netim Servisleri kullan\u0131n.<\/li>\n<\/ol>\n<h3>Secret Y\u00f6netimi: Hassas Bilgiler Nas\u0131l G\u00fcvenle Saklan\u0131r?<\/h3>\n<p>API anahtarlar\u0131, veritaban\u0131 \u015fifreleri, SSH anahtarlar\u0131 gibi hassas bilgiler, altyap\u0131y\u0131 tan\u0131mlarken s\u0131k\u00e7a kullan\u0131l\u0131r. Bu bilgileri do\u011frudan Terraform koduna veya state dosyas\u0131na d\u00fcz metin olarak yazmak b\u00fcy\u00fck bir g\u00fcvenlik riskidir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<p>Secret'lar\u0131 g\u00fcvenli bir \u015fekilde y\u00f6netmek i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f secret y\u00f6netim servislerini kullan\u0131n:<\/p>\n<ul>\n<li><strong>HashiCorp Vault:<\/strong> Hem bulut tabanl\u0131 hem de on-premise \u00e7\u00f6z\u00fcmlere uygun, g\u00fc\u00e7l\u00fc ve esnek bir secret y\u00f6netim arac\u0131d\u0131r.<\/li>\n<li><strong>AWS Secrets Manager \/ AWS Parameter Store:<\/strong> AWS ortamlar\u0131nda hassas bilgileri g\u00fcvenle depolamak ve y\u00f6netmek i\u00e7in tasarlanm\u0131\u015f servislerdir.<\/li>\n<li><strong>Azure Key Vault:<\/strong> Azure ortamlar\u0131 i\u00e7in benzer bir hizmet sunar.<\/li>\n<li><strong>Google Secret Manager:<\/strong> GCP ortamlar\u0131 i\u00e7in secret y\u00f6netimi sa\u011flar.<\/li>\n<\/ul>\n<p>Bu servisler, secret'lar\u0131 \u015fifreler, eri\u015fim kontrol\u00fcn\u00fc sa\u011flar, secret rotasyonunu (d\u00f6n\u00fc\u015f\u00fcm\u00fcn\u00fc) destekler ve Terraform ile entegre edilebilirler, b\u00f6ylece Terraform kodunuz secret'lara ihtiya\u00e7 duydu\u011funda g\u00fcvenli bir \u015fekilde eri\u015febilir.<\/p>\n<h3>Mod\u00fcl Ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve Karma\u015f\u0131kl\u0131k: Y\u00f6netilebilirli\u011fi Nas\u0131l Sa\u011flar\u0131z?<\/h3>\n<p>B\u00fcy\u00fck Terraform projelerinde, mod\u00fcller birbirine ba\u011f\u0131ml\u0131 hale gelebilir ve bu ba\u011f\u0131ml\u0131l\u0131klar zamanla karma\u015f\u0131k bir a\u011f olu\u015fturabilir. Bu durum, bir mod\u00fclde yap\u0131lan de\u011fi\u015fikli\u011fin beklenmedik yan etkilere yol a\u00e7mas\u0131n\u0131 veya ba\u011f\u0131ml\u0131l\u0131klar\u0131n \u00e7\u00f6z\u00fcm\u00fcn\u00fc zorla\u015ft\u0131rmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<ul>\n<li><strong>Gran\u00fcler Mod\u00fcller:<\/strong> Daha \u00f6nce bahsedildi\u011fi gibi, mod\u00fclleri k\u00fc\u00e7\u00fck ve tek odakl\u0131 tutmak karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r. Bir mod\u00fcl sadece bir \u015feyi yapmal\u0131 ve o \u015feyi iyi yapmal\u0131d\u0131r.<\/li>\n<li><strong>Net \u00c7\u0131kt\u0131lar ve Giri\u015fler:<\/strong> Mod\u00fcller aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 a\u00e7\u0131k\u00e7a tan\u0131mlamak i\u00e7in <code>output<\/code> de\u011ferlerini ve <code>variable<\/code> bloklar\u0131n\u0131 d\u00fczenli kullan\u0131n. Mod\u00fcl\u00fcn hangi verileri d\u0131\u015fa aktard\u0131\u011f\u0131n\u0131 ve hangi verilere ihtiya\u00e7 duydu\u011funu netle\u015ftirin.<\/li>\n<li><strong>Mod\u00fcl S\u00fcr\u00fcm Y\u00f6netimi:<\/strong> Mod\u00fcllerinizi versiyonlamak, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmenin en etkili yollar\u0131ndan biridir. Mod\u00fcl kullan\u0131c\u0131lar\u0131 belirli bir s\u00fcr\u00fcm\u00fc hedefleyebilir ve bu sayede bir mod\u00fcldeki k\u0131r\u0131c\u0131 de\u011fi\u015fikliklerin di\u011fer projeleri an\u0131nda etkilemesini engelleyebilirsiniz.<\/li>\n<li><strong>Belgelendirme:<\/strong> Her mod\u00fcl i\u00e7in kapsaml\u0131 bir <code>README.md<\/code> dosyas\u0131 olu\u015fturmak, mod\u00fcl\u00fcn amac\u0131, kullan\u0131m\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 hakk\u0131nda bilgi sa\u011flar.<\/li>\n<\/ul>\n<h3>Kullan\u0131c\u0131 Yetkilendirmeleri ve Eri\u015fim Kontrol\u00fc: G\u00fcvenlik Nas\u0131l Peiki\u015ftirilir?<\/h3>\n<p>Kimlerin Terraform kodunu de\u011fi\u015ftirebilece\u011fi, state dosyalar\u0131na eri\u015febilece\u011fi ve altyap\u0131 da\u011f\u0131t\u0131m\u0131n\u0131 tetikleyebilece\u011fi kritik bir g\u00fcvenlik konusudur.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm \u00d6nerileri:<\/strong><\/p>\n<ul>\n<li><strong>Minimum Ayr\u0131cal\u0131k Prensibi (Least Privilege):<\/strong> Her kullan\u0131c\u0131n\u0131n veya CI\/CD servis prensibinin sadece i\u015fini yapmas\u0131 i\u00e7in gerekli olan minimum izinlere sahip olmas\u0131n\u0131 sa\u011flay\u0131n.<\/li>\n<li><strong>IAM Rolleri\/Kullan\u0131c\u0131lar\u0131:<\/strong> Bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n Kimlik ve Eri\u015fim Y\u00f6netimi (IAM) servislerini kullanarak Terraform'un bulut kaynaklar\u0131na eri\u015fimi i\u00e7in \u00f6zel roller veya kullan\u0131c\u0131lar tan\u0131mlay\u0131n. Bu rol veya kullan\u0131c\u0131lar sadece Terraform i\u015flemlerini ger\u00e7ekle\u015ftirmek i\u00e7in gerekli izinlere sahip olmal\u0131d\u0131r.<\/li>\n<li><strong>Kod \u0130ncelemeleri (Code Reviews):<\/strong> Terraform kodundaki t\u00fcm de\u011fi\u015fiklikler, bir ba\u015fkas\u0131 taraf\u0131ndan incelenmeli ve onaylanmal\u0131d\u0131r. Bu, hem kod kalitesini art\u0131r\u0131r hem de g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 veya yanl\u0131\u015f yap\u0131land\u0131rmalar\u0131 yakalamaya yard\u0131mc\u0131 olur.<\/li>\n<li><strong>State Dosyalar\u0131na Eri\u015fim Kontrol\u00fc:<\/strong> Uzak backend'de saklanan state dosyalar\u0131na eri\u015fimi s\u0131k\u0131 bir \u015fekilde kontrol edin. Sadece yetkili ki\u015filer ve servis prensipleri bu dosyalara okuma\/yazma eri\u015fimine sahip olmal\u0131d\u0131r.<\/li>\n<\/ul>\n<h3>Tablo \u00d6rne\u011fi: Yayg\u0131n Zorluklar ve Pratik \u00c7\u00f6z\u00fcmleri<\/h3>\n<table>\n<thead>\n<tr>\n<th>Zorluk<\/th>\n<th>Potansiyel \u00c7\u00f6z\u00fcm<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-label=\"Zorluk\">State Tutars\u0131zl\u0131\u011f\u0131<\/td>\n<td data-label=\"Potansiyel \u00c7\u00f6z\u00fcm\">Uzak Backend + State Kilitleme<\/td>\n<td data-label=\"A\u00e7\u0131klama\">S3, GCS veya Azure Blob Storage gibi servislerde state dosyas\u0131n\u0131 merkezi y\u00f6netmek ve DynamoDB gibi servislerle e\u015f zamanl\u0131 eri\u015fimleri engellemek.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Zorluk\">Gizli Bilgilerin Y\u00f6netimi<\/td>\n<td data-label=\"Potansiyel \u00c7\u00f6z\u00fcm\">Secret Y\u00f6netim Servisleri<\/td>\n<td data-label=\"A\u00e7\u0131klama\">API anahtarlar\u0131, veritaban\u0131 \u015fifreleri gibi hassas verileri g\u00fcvenli servislerde (AWS Secrets Manager, HashiCorp Vault, Azure Key Vault) tutmak.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Zorluk\">Mod\u00fcl Ba\u011f\u0131ml\u0131l\u0131k Karma\u015fas\u0131<\/td>\n<td data-label=\"Potansiyel \u00c7\u00f6z\u00fcm\">Gran\u00fcler Mod\u00fcller + S\u00fcr\u00fcmleme<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Her mod\u00fcl\u00fcn tek bir i\u015flevi yapmas\u0131n\u0131 sa\u011flamak ve Semantic Versioning ile mod\u00fcl s\u00fcr\u00fcmlerini sabitlemek.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Zorluk\">Yanl\u0131\u015f Konfig\u00fcrasyonlar<\/td>\n<td data-label=\"Potansiyel \u00c7\u00f6z\u00fcm\">CI\/CD'de Otomatik Do\u011frulama<\/td>\n<td data-label=\"A\u00e7\u0131klama\"><code>terraform validate<\/code>, <code>tflint<\/code> ve di\u011fer linting ara\u00e7lar\u0131n\u0131 CI\/CD boru hatt\u0131na dahil ederek potansiyel hatalar\u0131 erkenden yakalamak.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Zorluk\">\u0130zin Y\u00f6netimi Sorunlar\u0131<\/td>\n<td data-label=\"Potansiyel \u00c7\u00f6z\u00fcm\">IAM Rolleri ve Minimum Ayr\u0131cal\u0131k<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Terraform i\u015flemlerini ger\u00e7ekle\u015ftiren kullan\u0131c\u0131lara\/servislere sadece gerekli en az ayr\u0131cal\u0131klar\u0131 veren IAM rolleri atamak.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu zorluklar\u0131n \u00fcstesinden gelmek, sa\u011flam, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir Terraform altyap\u0131 y\u00f6netimi stratejisinin temelini olu\u015fturur. En iyi uygulamalar\u0131 takip ederek ve do\u011fru ara\u00e7lar\u0131 kullanarak, Terraform projelerinizin ba\u015far\u0131l\u0131 bir \u015fekilde ilerlemesini sa\u011flayabilirsiniz.<\/p>\n<h3>Mobil Uyumlu HTML ve Stil \u0130pu\u00e7lar\u0131<\/h3>\n<p>Bu makale, teknik i\u00e7eri\u011fi sunarken ayn\u0131 zamanda okuyucu deneyimini de \u00f6n planda tutmaktad\u0131r. Makalenin farkl\u0131 cihazlarda, \u00f6zellikle mobil cihazlarda d\u00fczg\u00fcn bir \u015fekilde g\u00f6r\u00fcnt\u00fclenmesi, i\u00e7eri\u011fin geni\u015f bir kitleye ula\u015fmas\u0131 i\u00e7in kritik \u00f6neme sahiptir. Bu nedenle, yukar\u0131daki <code><\/p>\n<style><\/code> blo\u011fu i\u00e7erisinde mobil uyumluluk i\u00e7in baz\u0131 CSS (Cascading Style Sheets) kurallar\u0131 tan\u0131mlanm\u0131\u015ft\u0131r.<\/p>\n<p>Responsive tasar\u0131m prensipleri gere\u011fi, medya sorgular\u0131 (<code>@media<\/code> rules) kullanarak ekran boyutuna g\u00f6re stil ayarlamalar\u0131 yap\u0131lm\u0131\u015ft\u0131r. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><code>@media (max-width: 768px)<\/code>: Tablet boyutundaki cihazlar i\u00e7in d\u00fczenlemeler yapar. Bu boyutta, sayfa i\u00e7eri\u011fi daha dar bir alana s\u0131\u011fd\u0131r\u0131l\u0131r, ba\u015fl\u0131k boyutlar\u0131 k\u00fc\u00e7\u00fclt\u00fcl\u00fcr ve padding de\u011ferleri ayarlan\u0131r.<\/li>\n<li><code>@media (max-width: 480px)<\/code>: K\u00fc\u00e7\u00fck ak\u0131ll\u0131 telefon ekranlar\u0131 i\u00e7in daha da fazla optimizasyon sa\u011flar. Ba\u015fl\u0131k boyutlar\u0131 daha da k\u00fc\u00e7\u00fclt\u00fcl\u00fcr, paragraflar\u0131n font boyutlar\u0131 ayarlan\u0131r ve listeler i\u00e7in daha az padding kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p>\u00d6zellikle tablolar\u0131n mobil cihazlarda okunabilirli\u011fini art\u0131rmak i\u00e7in \u00f6zel bir teknik kullan\u0131lm\u0131\u015ft\u0131r. Normalde tablolar k\u00fc\u00e7\u00fck ekranlarda kayd\u0131rma \u00e7ubuklar\u0131 veya bozuk bir d\u00fczenle sonu\u00e7lanabilir. Buradaki CSS, tablolar\u0131 y\u0131\u011f\u0131lm\u0131\u015f bir d\u00fczene d\u00f6n\u00fc\u015ft\u00fcr\u00fcr; her sat\u0131r bir blok haline gelir ve her h\u00fccre, ba\u015fl\u0131\u011f\u0131n\u0131 \"data-label\" \u00f6zniteli\u011fi arac\u0131l\u0131\u011f\u0131yla g\u00f6sterir. Bu sayede, tablo verileri daha dikey ve okunabilir bir formatta sunulur.<\/p>\n<p>Ayr\u0131ca, kod bloklar\u0131 (<code><\/p>\n<pre><code><\/code>) i\u00e7in <code>overflow-x: auto;<\/code> \u00f6zelli\u011fi eklenerek, uzun kod sat\u0131rlar\u0131n\u0131n k\u00fc\u00e7\u00fck ekranlarda yatay kayd\u0131rma \u00e7ubu\u011fu ile g\u00f6r\u00fcnt\u00fclenebilmesi sa\u011flanm\u0131\u015ft\u0131r. Bu, kodun hi\u00e7bir k\u0131sm\u0131n\u0131n ekran d\u0131\u015f\u0131na ta\u015fmamas\u0131n\u0131 garantilerken, kullan\u0131c\u0131ya kodun tamam\u0131n\u0131 inceleme imkan\u0131 verir. Metinlerin ak\u0131\u015f\u0131n\u0131 sa\u011flamak i\u00e7in <code>white-space: pre-wrap;<\/code> ve <code>word-wrap: break-word;<\/code> gibi \u00f6zellikler de kod blo\u011fu stilinde mevcuttur. Genel font se\u00e7imi ve renk paleti de okunabilirli\u011fi art\u0131rmak ve g\u00f6z yorgunlu\u011funu azaltmak i\u00e7in dikkatlice belirlenmi\u015ftir.<\/p>\n<h2>Sonu\u00e7: Terraform ile Huzura Ermek M\u00fcmk\u00fcn m\u00fc?<\/h2>\n<p>Terraform referans deposu olu\u015fturmak, ilk bak\u0131\u015fta ek bir \u00e7aba gibi g\u00f6r\u00fcnse de, uzun vadede altyap\u0131 y\u00f6netiminde devrim niteli\u011finde bir de\u011fi\u015fim yarat\u0131r. Bu makalede ele ald\u0131\u011f\u0131m\u0131z konular, Terraform projelerinizi daha y\u00f6netilebilir, \u00f6l\u00e7eklenebilir ve g\u00fcvenli hale getirmek i\u00e7in sa\u011flam bir temel sunmaktad\u0131r. Tekrar eden ba\u015f a\u011fr\u0131lar\u0131na, tutars\u0131z da\u011f\u0131t\u0131mlara ve karma\u015f\u0131k bak\u0131m s\u00fcre\u00e7lerine veda ederek, altyap\u0131 m\u00fchendislerinizin ve geli\u015ftiricilerinizin daha stratejik ve yenilik\u00e7i projelere odaklanmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<p>Anahtar \u00e7\u0131kar\u0131mlar\u0131m\u0131za g\u00f6z atacak olursak:<\/p>\n<ul>\n<li><strong>Tutarl\u0131l\u0131k ve Yeniden Kullan\u0131labilirlik:<\/strong> Mod\u00fcler bir yap\u0131 ve merkezi bir depo, altyap\u0131n\u0131z\u0131n her zaman tutarl\u0131 olmas\u0131n\u0131 ve kod tekrar\u0131n\u0131n en aza indirilmesini sa\u011flar.<\/li>\n<li><strong>Otomasyon ve Verimlilik:<\/strong> CI\/CD entegrasyonu ile Terraform i\u015flemlerini otomatize etmek, da\u011f\u0131t\u0131m s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r ve insan kaynakl\u0131 hatalar\u0131 azalt\u0131r.<\/li>\n<li><strong>G\u00fcvenlik ve S\u00fcrd\u00fcr\u00fclebilirlik:<\/strong> Uzak state y\u00f6netimi, secret y\u00f6netimi ve s\u0131k\u0131 eri\u015fim kontrolleri, altyap\u0131n\u0131z\u0131n g\u00fcvenli\u011fini art\u0131r\u0131rken, iyi belgelenmi\u015f mod\u00fcller uzun vadede s\u00fcrd\u00fcr\u00fclebilirli\u011fi destekler.<\/li>\n<li><strong>\u0130\u015fbirli\u011fi ve \u00d6\u011frenme:<\/strong> Ortak bir referans noktas\u0131, ekipler aras\u0131 i\u015fbirli\u011fini g\u00fc\u00e7lendirir ve yeni ekip \u00fcyelerinin \u00f6\u011frenme e\u011frisini k\u0131salt\u0131r.<\/li>\n<\/ul>\n<p>Unutmay\u0131n, iyi bir referans deposu bir gecede olu\u015fmaz. S\u00fcrekli iyile\u015ftirme, geri bildirim ve ekip i\u00e7indeki adaptasyon s\u00fcre\u00e7leri gerektirir. Ancak bu yat\u0131r\u0131m\u0131n kar\u015f\u0131l\u0131\u011f\u0131n\u0131, daha az stres, daha h\u0131zl\u0131 da\u011f\u0131t\u0131mlar ve daha g\u00fcvenilir bir altyap\u0131 olarak fazlas\u0131yla alacaks\u0131n\u0131z. Duvarlara kafa atmay\u0131 b\u0131rak\u0131n ve Terraform ile altyap\u0131 y\u00f6netiminde huzura erin!<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<div class=\"faq\">\n<h3>Soru 1: Referans deposu olu\u015fturmak \u00e7ok zaman al\u0131r m\u0131?<\/h3>\n<p><strong>Cevap 1:<\/strong> Ba\u015flang\u0131\u00e7ta, referans deposunun planlanmas\u0131 ve ilk mod\u00fcllerin olu\u015fturulmas\u0131 biraz zaman ve \u00e7aba gerektirebilir. Ancak bu, uzun vadeli bir yat\u0131r\u0131md\u0131r. K\u0131sa vadede harcanan bu zaman, tekrar eden kod yazma, hata ay\u0131klama ve tutars\u0131zl\u0131klar\u0131 giderme gibi s\u00fcre\u00e7lerden kaynaklanan \u00e7ok daha b\u00fcy\u00fck zaman kay\u0131plar\u0131n\u0131 engeller. Proje olgunla\u015ft\u0131k\u00e7a, yeni altyap\u0131 da\u011f\u0131t\u0131mlar\u0131 \u00e7ok daha h\u0131zl\u0131 ve g\u00fcvenilir hale gelir, bu da toplamda b\u00fcy\u00fck bir zaman tasarrufu sa\u011flar.<\/p>\n<\/div>\n<div class=\"faq\">\n<h3>Soru 2: Mevcut Terraform projelerimi referans deposuna nas\u0131l ta\u015f\u0131r\u0131m?<\/h3>\n<p><strong>Cevap 2:<\/strong> Mevcut projelerinizi referans deposuna ta\u015f\u0131mak kademeli bir s\u00fcre\u00e7tir. \u0130lk ad\u0131m, mevcut altyap\u0131n\u0131zdaki ortak bile\u015fenleri (\u00f6rne\u011fin, VPC'ler, veritabanlar\u0131, g\u00fcvenlik gruplar\u0131) belirlemek ve bunlar\u0131 yeniden kullan\u0131labilir Terraform mod\u00fcllerine d\u00f6n\u00fc\u015ft\u00fcrmektir. Ard\u0131ndan, bu mod\u00fclleri referans deponuza ekleyin. Daha sonra, mevcut \"root module\" konfig\u00fcrasyonlar\u0131n\u0131z\u0131, yeni olu\u015fturdu\u011funuz mod\u00fclleri \u00e7a\u011f\u0131racak \u015fekilde g\u00fcncelleyin. Bu, ad\u0131m ad\u0131m, kontroll\u00fc bir ge\u00e7i\u015f plan\u0131 olu\u015fturarak mevcut altyap\u0131n\u0131zda kesinti ya\u015fanmamas\u0131n\u0131 sa\u011flar.<\/p>\n<\/div>\n<div class=\"faq\">\n<h3>Soru 3: Hangi versiyon kontrol sistemi referans deposu i\u00e7in en iyisidir?<\/h3>\n<p><strong>Cevap 3:<\/strong> Git, end\u00fcstri standard\u0131 haline gelmi\u015f bir versiyon kontrol sistemidir ve referans deposu i\u00e7in en iyi se\u00e7enektir. Git'in da\u011f\u0131t\u0131k yap\u0131s\u0131, ekipler aras\u0131 i\u015fbirli\u011fini, kod incelemelerini ve de\u011fi\u015fikliklerin izlenmesini m\u00fckemmel bir \u015fekilde destekler. GitHub, GitLab, Bitbucket gibi bulut tabanl\u0131 Git platformlar\u0131, entegre CI\/CD \u00f6zellikleri ve zengin i\u015fbirli\u011fi ara\u00e7lar\u0131 sunarak bu s\u00fcreci daha da kolayla\u015ft\u0131r\u0131r.<\/p>\n<\/div>\n<div class=\"faq\">\n<h3>Soru 4: Referans deposu i\u00e7inde birden fazla bulut sa\u011flay\u0131c\u0131s\u0131 kullanabilir miyim?<\/h3>\n<p><strong>Cevap 4:<\/strong> Evet, kesinlikle. Referans deponuzun mod\u00fcl yap\u0131s\u0131n\u0131, her bulut sa\u011flay\u0131c\u0131s\u0131na \u00f6zel mod\u00fclleri i\u00e7erecek \u015fekilde tasarlayabilirsiniz (\u00f6rne\u011fin, <code>modules\/aws-vpc<\/code>, <code>modules\/azure-vnet<\/code>). Ortam dizinlerinizde ise, belirli bir ortam i\u00e7in ihtiya\u00e7 duydu\u011funuz bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131n mod\u00fcllerini \u00e7a\u011f\u0131rabilirsiniz. Bu, birden fazla bulut sa\u011flay\u0131c\u0131s\u0131yla \u00e7al\u0131\u015fan (multi-cloud) ortamlar i\u00e7in olduk\u00e7a esnek ve y\u00f6netilebilir bir yakla\u015f\u0131md\u0131r. Her bulut sa\u011flay\u0131c\u0131s\u0131 i\u00e7in ayr\u0131 <code>provider<\/code> bloklar\u0131 ve gerekti\u011finde ayr\u0131 state dosyalar\u0131 kullanarak bulutlar aras\u0131 izolasyonu da koruyabilirsiniz.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak 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":[1],"tags":[],"class_list":{"0":"post-31672","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 Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!<\/title>\n<meta name=\"description\" content=\"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.\" \/>\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-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!\" \/>\n<meta property=\"og:description\" content=\"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-12T13:01:44+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!\",\"datePublished\":\"2025-10-12T13:01:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\"},\"wordCount\":5350,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\",\"name\":\"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-12T13:01:44+00:00\",\"description\":\"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!\"}]},{\"@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 Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!","description":"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.","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-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/","og_locale":"tr_TR","og_type":"article","og_title":"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!","og_description":"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.","og_url":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-12T13:01:44+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!","datePublished":"2025-10-12T13:01:44+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/"},"wordCount":5350,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/","url":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/","name":"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-12T13:01:44+00:00","description":"Terraform projelerinde tutarl\u0131l\u0131k ve verimlilik arayanlar i\u00e7in kapsaml\u0131 bir referans deposu nas\u0131l olu\u015fturulur? Tekrar eden hatalardan ka\u00e7\u0131nmak ve geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunuyoruz. Altyap\u0131 kodlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in bu makaledeki ipu\u00e7lar\u0131n\u0131 uygulayarak duvarlara kafa atmay\u0131 b\u0131rakabilirsiniz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-referans-deposu-olusturma-duvarlara-kafa-atmayi-birakin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Terraform Referans Deposu Olu\u015fturma: Duvarlara Kafa Atmay\u0131 B\u0131rak\u0131n!"}]},{"@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\/31672","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=31672"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31672\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}