{"id":34028,"date":"2025-11-10T05:31:09","date_gmt":"2025-11-10T02:31:09","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/"},"modified":"2025-11-10T05:31:09","modified_gmt":"2025-11-10T02:31:09","slug":"terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/","title":{"rendered":"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik"},"content":{"rendered":"<style>\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, h3 {\n    color: #2c3e50;\n    margin-top: 30px;\n    margin-bottom: 15px;\n  }\n  h2 {\n    font-size: 1.8em;\n    border-bottom: 2px solid #3498db;\n    padding-bottom: 10px;\n  }\n  h3 {\n    font-size: 1.4em;\n    color: #34495e;\n  }\n  p {\n    margin-bottom: 1em;\n  }\n  pre {\n    background-color: #ecf0f1;\n    border: 1px solid #bdc3c7;\n    padding: 15px;\n    border-radius: 5px;\n    overflow-x: auto;\n    margin-bottom: 15px;\n  }\n  code {\n    font-family: \"Courier New\", monospace;\n    color: #c0392b; \/* K\u0131rm\u0131z\u0131ms\u0131 ton *\/\n    background-color: #ecf0f1;\n    padding: 2px 4px;\n    border-radius: 3px;\n  }\n  pre code {\n    color: #2c3e50; \/* Koyu gri *\/\n    background-color: transparent;\n    padding: 0;\n  }\n  ul {\n    list-style-type: disc;\n    margin-left: 20px;\n    margin-bottom: 1em;\n  }\n  ol {\n    list-style-type: decimal;\n    margin-left: 20px;\n    margin-bottom: 1em;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 1em;\n  }\n  th, td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n  }\n  .expert-tip {\n    background-color: #e8f6f3;\n    border-left: 5px solid #1abc9c;\n    padding: 15px;\n    margin: 20px 0;\n    border-radius: 5px;\n    font-style: italic;\n    color: #2c3e50;\n  }\n  .faq-section {\n    margin-top: 40px;\n    padding-top: 20px;\n    border-top: 1px solid #eee;\n  }\n  .faq-question {\n    font-weight: bold;\n    color: #34495e;\n    margin-bottom: 5px;\n  }\n  .faq-answer {\n    margin-bottom: 15px;\n  }<\/p>\n<p>  \/* Mobil Uyumlu HTML i\u00e7in Medya Sorgular\u0131 *\/\n  @media screen and (max-width: 768px) {\n    body {\n      padding: 15px;\n    }\n    h2 {\n      font-size: 1.5em;\n    }\n    h3 {\n      font-size: 1.2em;\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 {\n      border: 1px solid #ccc;\n      margin-bottom: 10px;\n    }\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  }\n<\/style>\n<p><body><\/p>\n<p>Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform&#8217;un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform&#8217;un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.<\/p>\n<h2>Terraform De\u011fi\u015fkenleri Neden Gereklidir? Temel Kavramlara Giri\u015f<\/h2>\n<p>Altyap\u0131 as Kod (IaC) yakla\u015f\u0131mlar\u0131n\u0131n temel amac\u0131, altyap\u0131y\u0131 kod ile tan\u0131mlamak ve otomatize etmektir. Ancak, her altyap\u0131 tan\u0131m\u0131n\u0131n sabit de\u011ferlerle yaz\u0131lmas\u0131, k\u0131sa s\u00fcrede bir y\u00f6netim kabusuna d\u00f6n\u00fc\u015febilir. Bir\u00e7ok zaman, ayn\u0131 altyap\u0131 bloklar\u0131n\u0131 farkl\u0131 isimlerle, farkl\u0131 b\u00f6lgelerde veya farkl\u0131 boyutlarda da\u011f\u0131tmak isteriz. \u0130\u015fte bu gibi senaryolarda Terraform de\u011fi\u015fkenleri, sihirli bir de\u011fnek g\u00f6revi g\u00f6r\u00fcr. De\u011fi\u015fkenler, Terraform konfig\u00fcrasyon dosyalar\u0131n\u0131za d\u0131\u015far\u0131dan de\u011ferler aktarman\u0131za olanak tan\u0131yarak kodunuzu daha dinamik ve esnek hale getirir.<\/p>\n<p>\u00d6rne\u011fin, bir sunucu olu\u015ftururken her seferinde IP adresi veya b\u00f6lge gibi bilgileri manuel olarak girmek yerine, bu de\u011ferleri de\u011fi\u015fken olarak tan\u0131mlayabilir ve her da\u011f\u0131t\u0131m i\u00e7in farkl\u0131 de\u011ferler atayabilirsiniz. Bu yakla\u015f\u0131m, sadece zamandan tasarruf etmekle kalmaz, ayn\u0131 zamanda kod tekrar\u0131n\u0131 azalt\u0131r ve altyap\u0131 tan\u0131mlar\u0131n\u0131z\u0131n daha okunabilir ve s\u00fcrd\u00fcr\u00fclebilir olmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, hassas bilgileri do\u011frudan kod i\u00e7ine yazmak yerine de\u011fi\u015fkenler arac\u0131l\u0131\u011f\u0131yla y\u00f6netmek, g\u00fcvenlik a\u00e7\u0131s\u0131ndan da \u00f6nemli bir avantaj sunar. Geli\u015ftirme, test ve \u00fcretim gibi farkl\u0131 ortamlar i\u00e7in ayn\u0131 temel altyap\u0131 kodunu kullan\u0131rken yaln\u0131zca ilgili de\u011fi\u015fken de\u011ferlerini de\u011fi\u015ftirerek h\u0131zl\u0131ca ortamlar aras\u0131 ge\u00e7i\u015f yapabilirsiniz. Bu esneklik, CI\/CD s\u00fcre\u00e7lerinde altyap\u0131 da\u011f\u0131t\u0131mlar\u0131n\u0131 otomatikle\u015ftirmek i\u00e7in de hayati \u00f6neme sahiptir.<\/p>\n<h3>De\u011fi\u015fken T\u00fcrleri Nelerdir ve Nas\u0131l Tan\u0131mlan\u0131r?<\/h3>\n<p>Terraform&#8217;da de\u011fi\u015fkenler, <\/p>\n<pre><code>variable<\/pre>\n<p><\/code> blo\u011fu kullan\u0131larak tan\u0131mlan\u0131r. Her de\u011fi\u015fkenin bir ismi, iste\u011fe ba\u011fl\u0131 olarak bir t\u00fcr\u00fc, bir a\u00e7\u0131klamas\u0131 ve bir varsay\u0131lan de\u011feri olabilir. De\u011fi\u015fken t\u00fcrleri, Terraform'un tip g\u00fcvenli\u011fini sa\u011flamas\u0131na yard\u0131mc\u0131 olur ve beklenmeyen hatalar\u0131n \u00f6n\u00fcne ge\u00e7er. Ba\u015fl\u0131ca de\u011fi\u015fken t\u00fcrleri \u015funlard\u0131r:<\/p>\n<ul>\n<li>\n<pre><code>string<\/pre>\n<p><\/code>: Metin de\u011ferleri i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, \"us-east-1\", \"my-server-name\").<\/li>\n<li>\n<pre><code>number<\/pre>\n<p><\/code>: Say\u0131sal de\u011ferler i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, 80, 443, 2).<\/li>\n<li>\n<pre><code>bool<\/pre>\n<p><\/code>: Boolean de\u011ferleri i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, <\/p>\n<pre><code>true<\/pre>\n<p><\/code>, <\/p>\n<pre><code>false<\/pre>\n<p><\/code>).<\/li>\n<li>\n<pre><code>list(...)<\/pre>\n<p><\/code>: Ayn\u0131 t\u00fcrden de\u011ferlerin s\u0131ral\u0131 koleksiyonu i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, <\/p>\n<pre><code>list(string)<\/pre>\n<p><\/code> veya <\/p>\n<pre><code>list(number)<\/pre>\n<p><\/code>).<\/li>\n<li>\n<pre><code>map(...)<\/pre>\n<p><\/code>: Anahtar-de\u011fer \u00e7iftlerinden olu\u015fan bir koleksiyon i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, <\/p>\n<pre><code>map(string)<\/pre>\n<p><\/code>).<\/li>\n<li>\n<pre><code>object(...)<\/pre>\n<p><\/code>: Farkl\u0131 t\u00fcrlerdeki alanlara sahip karma\u015f\u0131k bir yap\u0131 i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li>\n<pre><code>set(...)<\/pre>\n<p><\/code>: S\u0131ras\u0131z ve benzersiz elemanlardan olu\u015fan bir koleksiyon i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li>\n<pre><code>any<\/pre>\n<p><\/code>: Herhangi bir t\u00fcr\u00fc kabul eder (genellikle ka\u00e7\u0131n\u0131lmas\u0131 \u00f6nerilir).<\/li>\n<\/ul>\n<p>Bir de\u011fi\u015fken tan\u0131mlamak i\u00e7in basit bir \u00f6rnek:<\/p>\n<pre><code>\nvariable \"region\" {\n  description = \"AWS b\u00f6lgesi\"\n  type        = string\n  default     = \"us-east-1\"\n}\n\nvariable \"instance_count\" {\n  description = \"Olu\u015fturulacak EC2 \u00f6rneklerinin say\u0131s\u0131\"\n  type        = number\n  default     = 1\n}\n\nvariable \"tags\" {\n  description = \"EC2 \u00f6rne\u011fine eklenecek etiketler\"\n  type        = map(string)\n  default = {\n    Environment = \"development\"\n    Project     = \"myproject\"\n  }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <\/p>\n<pre><code>region<\/pre>\n<p><\/code>, <\/p>\n<pre><code>instance_count<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>tags<\/pre>\n<p><\/code> ad\u0131nda \u00fc\u00e7 de\u011fi\u015fken tan\u0131mlad\u0131k. Her birine bir a\u00e7\u0131klama (<\/p>\n<pre><code>description<\/pre>\n<p><\/code>), bir veri tipi (<\/p>\n<pre><code>type<\/pre>\n<p><\/code>) ve bir varsay\u0131lan de\u011fer (<\/p>\n<pre><code>default<\/pre>\n<p><\/code>) atad\u0131k. De\u011fi\u015fkenleri konfig\u00fcrasyonunuzda kullanmak i\u00e7in <\/p>\n<pre><code>var.<de\u011fi\u015fken_ad\u0131><\/pre>\n<p><\/code> s\u00f6zdizimini kullan\u0131r\u0131z. \u00d6rne\u011fin:<\/p>\n<pre><code>\nresource \"aws_instance\" \"web\" {\n  ami           = \"ami-0abcdef1234567890\" # Ger\u00e7ek bir AMI ID kullan\u0131n\n  instance_type = \"t2.micro\"\n  count         = var.instance_count # De\u011fi\u015fken kullan\u0131m\u0131\n  tags = var.tags # De\u011fi\u015fken kullan\u0131m\u0131\n}\n  <\/pre>\n<p><\/code><\/p>\n<h3>Varsay\u0131lan De\u011ferler ve Hassas Bilgilerle \u00c7al\u0131\u015fmak Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>De\u011fi\u015fkenlere varsay\u0131lan de\u011fer atamak, \u00e7o\u011fu zaman kolayl\u0131k sa\u011flar. Bu sayede, Terraform'u \u00e7al\u0131\u015ft\u0131r\u0131rken her zaman t\u00fcm de\u011fi\u015fkenleri sa\u011flamak zorunda kalmazs\u0131n\u0131z; yaln\u0131zca varsay\u0131lan de\u011ferini de\u011fi\u015ftirmek istedi\u011finiz de\u011fi\u015fkenler i\u00e7in de\u011fer girmeniz yeterli olur. E\u011fer bir de\u011fi\u015fkenin varsay\u0131lan de\u011feri yoksa, Terraform sizden bu de\u011feri sa\u011flaman\u0131z\u0131 ister.<\/p>\n<p>De\u011fi\u015fkenlere de\u011fer ataman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<ol>\n<li><strong>Komut sat\u0131r\u0131 arg\u00fcmanlar\u0131:<\/strong>\n<pre><code>terraform apply -var=\"region=eu-west-1\"<\/pre>\n<p><\/code><\/li>\n<li><strong>De\u011fi\u015fken tan\u0131mlama dosyalar\u0131 (<code>.tfvars<\/code>):<\/strong>\n<pre><code>terraform.tfvars<\/pre>\n<p><\/code> veya <\/p>\n<pre><code>*.auto.tfvars<\/pre>\n<p><\/code> dosyalar\u0131. \u00d6rne\u011fin, <\/p>\n<pre><code>production.tfvars<\/pre>\n<p><\/code> dosyas\u0131 olu\u015fturup i\u00e7ine a\u015fa\u011f\u0131daki gibi yazabilirsiniz:<\/p>\n<pre><code>\nregion = \"eu-west-1\"\ninstance_count = 3\n      <\/pre>\n<p><\/code><br \/>\n      Ard\u0131ndan <\/p>\n<pre><code>terraform apply -var-file=\"production.tfvars\"<\/pre>\n<p><\/code> komutunu kullan\u0131rs\u0131n\u0131z.<\/li>\n<li><strong>Ortam de\u011fi\u015fkenleri:<\/strong>\n<pre><code>TF_VAR_region=ap-southeast-1 terraform apply<\/pre>\n<p><\/code><\/li>\n<li><strong>Etkile\u015fimli giri\u015f:<\/strong> E\u011fer bir de\u011fi\u015fkene de\u011fer atanmam\u0131\u015fsa ve varsay\u0131lan de\u011feri yoksa, Terraform sizden komut sat\u0131r\u0131nda etkile\u015fimli olarak de\u011fer girmenizi ister.<\/li>\n<\/ol>\n<aside class=\"expert-tip\">\n    Uzman \u0130pucu: Hassas bilgiler (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 vb.) asla do\u011frudan kodunuza veya versiyon kontrol sistemine kaydedilmemelidir. Bunun yerine, bu t\u00fcr verileri ortam de\u011fi\u015fkenleri (<\/p>\n<pre><code>TF_VAR_<\/pre>\n<p><\/code> \u00f6neki ile), <a href=\"https:\/\/www.terraform.io\/docs\/language\/values\/variables.html#secret-values-in-variables\">Terraform Cloud\/Enterprise de\u011fi\u015fkenleri<\/a> veya <a href=\"https:\/\/www.vaultproject.io\/\">HashiCorp Vault<\/a> gibi g\u00fcvenli depolama \u00e7\u00f6z\u00fcmleri arac\u0131l\u0131\u011f\u0131yla Terraform'a aktar\u0131n. <\/p>\n<pre><code>sensitive = true<\/pre>\n<p><\/code> arg\u00fcman\u0131n\u0131 kullanarak hassas de\u011fi\u015fkenlerin Terraform \u00e7\u0131kt\u0131s\u0131nda veya plan\u0131nda g\u00f6r\u00fcnmesini engelleyebilirsiniz.<br \/>\n  <\/aside>\n<pre><code>\nvariable \"db_password\" {\n  description = \"Veritaban\u0131 y\u00f6neticisi \u015fifresi\"\n  type        = string\n  sensitive   = true # Bu de\u011fi\u015fkenin de\u011ferinin \u00e7\u0131kt\u0131larda gizlenmesini sa\u011flar\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>De\u011fi\u015fkenler sadece parametre ge\u00e7i\u015fi i\u00e7in de\u011fil, ayn\u0131 zamanda <\/p>\n<pre><code>locals<\/pre>\n<p><\/code> bloklar\u0131yla da birlikte kullan\u0131labilir. <\/p>\n<pre><code>locals<\/pre>\n<p><\/code>, konfig\u00fcrasyon i\u00e7inde karma\u015f\u0131k ifadeleri basitle\u015ftirmek ve tekrar eden hesaplamalar\u0131 merkezile\u015ftirmek i\u00e7in kullan\u0131lan yerel adland\u0131r\u0131lm\u0131\u015f de\u011ferlerdir. \u00d6rne\u011fin, bir kaynak ad\u0131na proje ad\u0131n\u0131 dahil etmek istedi\u011finizde:<\/p>\n<pre><code>\nvariable \"project_name\" {\n  type    = string\n  default = \"mycompany\"\n}\n\nlocals {\n  resource_prefix = \"${var.project_name}-\"\n  web_server_name = \"${local.resource_prefix}web-server\"\n}\n\nresource \"aws_instance\" \"web\" {\n  # ...\n  tags = {\n    Name = local.web_server_name\n  }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu y\u00f6ntem, kodunuzu daha mod\u00fcler ve okunabilir hale getirir, ayn\u0131 zamanda karma\u015f\u0131k hesaplamalar\u0131 tek bir yerden y\u00f6netmenize olanak tan\u0131r. K\u0131sacas\u0131, Terraform de\u011fi\u015fkenleri, dinamik ve esnek altyap\u0131 tan\u0131mlar\u0131 olu\u015fturman\u0131n temelini olu\u015fturur. Bu sayede, altyap\u0131 kodunuzu tek bir kaynaktan y\u00f6netebilir ve farkl\u0131 ortamlar veya gereksinimler i\u00e7in kolayca uyarlayabilirsiniz.<\/p>\n<h2>Terraform Mod\u00fclleri ile Tekrar Kullan\u0131labilir Altyap\u0131 Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>De\u011fi\u015fkenler, Terraform konfig\u00fcrasyonlar\u0131m\u0131z\u0131 dinamikle\u015ftirmek i\u00e7in harikad\u0131r, ancak tek ba\u015f\u0131na yeterli de\u011fildir. B\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131lar\u0131 y\u00f6netirken, kod tekrar\u0131n\u0131 daha da azaltmak ve konfig\u00fcrasyonu mant\u0131ksal birimlere ay\u0131rmak isteriz. \u0130\u015fte burada Terraform mod\u00fclleri devreye girer. Bir mod\u00fcl, Terraform konfig\u00fcrasyon dosyalar\u0131n\u0131n bir koleksiyonudur ve tek bir mant\u0131ksal birim olarak kullan\u0131lmak \u00fczere paketlenmi\u015ftir. Temel olarak, bir mod\u00fcl, bir veya daha fazla kaynak tan\u0131m\u0131 i\u00e7eren, kendi ba\u015f\u0131na \u00e7al\u0131\u015fan bir Terraform projesi gibi d\u00fc\u015f\u00fcn\u00fclebilir.<\/p>\n<p>Mod\u00fcllerin en b\u00fcy\u00fck avantaj\u0131, kodun tekrar kullan\u0131labilirli\u011fini sa\u011flamas\u0131d\u0131r. Bir kere bir VPC (Virtual Private Cloud), EC2 \u00f6rne\u011fi veya veritaban\u0131 mod\u00fcl\u00fc yazd\u0131\u011f\u0131n\u0131zda, bunu farkl\u0131 projelerde, farkl\u0131 ortamlarda veya hatta farkl\u0131 tak\u0131mlar aras\u0131nda kolayca kullanabilirsiniz. Bu, geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r, tutarl\u0131l\u0131\u011f\u0131 garanti eder ve hatalar\u0131 azalt\u0131r. Bir\u00e7ok \u015firket, \"standart\" altyap\u0131 bile\u015fenleri i\u00e7in kendi \u00f6zel mod\u00fcl k\u00fct\u00fcphanelerini olu\u015fturur. Bu k\u00fct\u00fcphaneler, \u015firketin g\u00fcvenlik, maliyet ve performans standartlar\u0131na uygun \u00f6nceden tan\u0131mlanm\u0131\u015f \u015fablonlar i\u00e7erir.<\/p>\n<p>Mod\u00fcller ayr\u0131ca, karma\u015f\u0131k altyap\u0131lar\u0131n y\u00f6netimini basitle\u015ftirir. B\u00fcy\u00fck bir Terraform projesini y\u00f6netmek yerine, bu projeyi daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir mod\u00fcllere b\u00f6lebilirsiniz. Her mod\u00fcl, kendi sorumluluk alan\u0131na sahip olur ve bu da ekiplerin paralel \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r. \u00d6rne\u011fin, bir ekip a\u011f mod\u00fcl\u00fcn\u00fc geli\u015ftirirken, ba\u015fka bir ekip veritaban\u0131 mod\u00fcl\u00fcn\u00fc geli\u015ftirebilir. Bu mod\u00fcller daha sonra ana konfig\u00fcrasyon dosyas\u0131nda bir araya getirilebilir. Bu yap\u0131, \u00f6zellikle mikroservis mimarileri veya \u00e7oklu hizmet ortamlar\u0131 gibi senaryolarda altyap\u0131 y\u00f6netimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Mod\u00fcl Kaynaklar\u0131 ve Yerel Mod\u00fcller Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Terraform mod\u00fclleri, temelde iki ana kategoride incelenebilir: yerel mod\u00fcller ve uzak mod\u00fcller (remote modules). Yerel mod\u00fcller, ayn\u0131 Terraform projesi i\u00e7inde veya alt dizinlerde bulunan mod\u00fcllerdir. Uzak mod\u00fcller ise Git depolar\u0131ndan (GitHub, GitLab vb.), Terraform Registry'den veya S3 gibi bulut depolama hizmetlerinden \u00e7ekilen mod\u00fcllerdir.<\/p>\n<p>Yerel bir mod\u00fcl olu\u015fturmak i\u00e7in, ana konfig\u00fcrasyonunuzdan ayr\u0131 bir dizinde Terraform dosyalar\u0131 (<\/p>\n<pre><code>.tf<\/pre>\n<p><\/code>) olu\u015fturman\u0131z yeterlidir. \u00d6rne\u011fin, <\/p>\n<pre><code>modules\/vpc<\/pre>\n<p><\/code> ad\u0131nda bir dizin olu\u015fturup i\u00e7ine <\/p>\n<pre><code>main.tf<\/pre>\n<p><\/code>, <\/p>\n<pre><code>variables.tf<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>outputs.tf<\/pre>\n<p><\/code> dosyalar\u0131n\u0131 koyabilirsiniz. Bu dizin art\u0131k bir mod\u00fcld\u00fcr. Ana konfig\u00fcrasyonunuzdan bu mod\u00fcl\u00fc \u00e7a\u011f\u0131rmak i\u00e7in <\/p>\n<pre><code>module<\/pre>\n<p><\/code> blo\u011funu kullan\u0131r\u0131z:<\/p>\n<pre><code>\n# main.tf dosyan\u0131zda\nmodule \"my_vpc\" {\n  source = \".\/modules\/vpc\" # Yerel mod\u00fcl\u00fcn yolu\n  \n  # Mod\u00fcl i\u00e7indeki de\u011fi\u015fkenlere de\u011fer atama\n  cidr_block = \"10.0.0.0\/16\"\n  public_subnets = [\"10.0.1.0\/24\", \"10.0.2.0\/24\"]\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, ana konfig\u00fcrasyonumuz <\/p>\n<pre><code>my_vpc<\/pre>\n<p><\/code> ad\u0131nda bir mod\u00fcl \u00e7a\u011f\u0131r\u0131yor ve <\/p>\n<pre><code>modules\/vpc<\/pre>\n<p><\/code> dizinindeki kodu kullan\u0131yor. Bu mod\u00fcle <\/p>\n<pre><code>cidr_block<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>public_subnets<\/pre>\n<p><\/code> gibi de\u011fi\u015fkenler arac\u0131l\u0131\u011f\u0131yla de\u011ferler iletiyoruz. Yerel mod\u00fcller, \u00f6zellikle b\u00fcy\u00fck projelerde kodu organize etmek ve ilgili kaynaklar\u0131 bir araya toplamak i\u00e7in \u00e7ok etkilidir. \u00d6rne\u011fin, t\u00fcm a\u011f kaynaklar\u0131n\u0131z\u0131 (VPC, subnetler, g\u00fcvenlik gruplar\u0131) bir a\u011f mod\u00fcl\u00fcnde, veritaban\u0131 kaynaklar\u0131n\u0131z\u0131 ayr\u0131 bir veritaban\u0131 mod\u00fcl\u00fcnde toplayabilirsiniz.<\/p>\n<p>Uzak mod\u00fcller ise genellikle daha karma\u015f\u0131k ve genel kullan\u0131ma uygun mod\u00fcllerdir. Terraform Registry, AWS VPC veya EC2 gibi pop\u00fcler bulut hizmetleri i\u00e7in \u00f6nceden yaz\u0131lm\u0131\u015f bir\u00e7ok mod\u00fcl bar\u0131nd\u0131r\u0131r. Bu mod\u00fclleri kullanmak, kendi mod\u00fcllerinizi yazmak zorunda kalmadan h\u0131zl\u0131ca altyap\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bir uzak mod\u00fcl\u00fc \u00e7a\u011f\u0131rmak da yerel mod\u00fcl\u00fc \u00e7a\u011f\u0131rmaya benzer, sadece <\/p>\n<pre><code>source<\/pre>\n<p><\/code> de\u011feri de\u011fi\u015fir:<\/p>\n<pre><code>\nmodule \"aws_vpc\" {\n  source  = \"terraform-aws-modules\/vpc\/aws\" # Terraform Registry'den bir mod\u00fcl\n  version = \"3.1.0\" # Mod\u00fcl versiyonu\n  \n  name = \"my-prod-vpc\"\n  cidr = \"10.0.0.0\/16\"\n  azs  = [\"us-east-1a\", \"us-east-1b\", \"us-east-1c\"]\n  \n  # Di\u011fer de\u011fi\u015fkenler...\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Mod\u00fcller sayesinde, altyap\u0131 kodunuz daha d\u00fczenli, anla\u015f\u0131l\u0131r ve bak\u0131m\u0131 kolay hale gelir. Ayr\u0131ca, mod\u00fcller, best practices (en iyi uygulamalar) ve g\u00fcvenlik standartlar\u0131n\u0131 \u015firket genelinde uygulaman\u0131n g\u00fc\u00e7l\u00fc bir yoludur. Herkes ayn\u0131 mod\u00fclleri kulland\u0131\u011f\u0131nda, belirli bir hizmetin veya kayna\u011f\u0131n her zaman do\u011fru \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olabilirsiniz. Bu, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli ve \u00e7oklu ekip ortamlar\u0131nda tutarl\u0131l\u0131k sa\u011flamak i\u00e7in kritik bir \u00f6zelliktir.<\/p>\n<h3>Mod\u00fcl Giri\u015f ve \u00c7\u0131k\u0131\u015flar\u0131: Veri Ak\u0131\u015f\u0131n\u0131 Y\u00f6netmek<\/h3>\n<p>Bir mod\u00fcl, d\u0131\u015far\u0131dan de\u011fi\u015fkenler arac\u0131l\u0131\u011f\u0131yla girdi al\u0131rken, <\/p>\n<pre><code>output<\/pre>\n<p><\/code> bloklar\u0131 arac\u0131l\u0131\u011f\u0131yla da d\u0131\u015far\u0131ya bilgi aktarabilir. Mod\u00fcl \u00e7\u0131kt\u0131lar\u0131n\u0131n amac\u0131, mod\u00fcl taraf\u0131ndan olu\u015fturulan veya hesaplanan de\u011ferleri, \u00e7a\u011f\u0131ran mod\u00fcl\u00fcn (veya k\u00f6k konfig\u00fcrasyonun) eri\u015fimine sunmakt\u0131r. \u00d6rne\u011fin, bir VPC mod\u00fcl\u00fc olu\u015fturdu\u011funuzda, bu VPC'nin ID'sini, public subnet ID'lerini veya NAT Gateway IP adreslerini di\u011fer mod\u00fcllerin kullanmas\u0131 gerekebilir.<\/p>\n<p>Mod\u00fcl\u00fcn i\u00e7indeki <\/p>\n<pre><code>outputs.tf<\/pre>\n<p><\/code> dosyas\u0131na bir \u00e7\u0131kt\u0131 tan\u0131mlamak i\u00e7in:<\/p>\n<pre><code>\n# modules\/vpc\/outputs.tf\noutput \"vpc_id\" {\n  description = \"Olu\u015fturulan VPC'nin ID'si\"\n  value       = aws_vpc.main.id # aws_vpc.main bir VPC kayna\u011f\u0131n\u0131z olsun\n}\n\noutput \"public_subnet_ids\" {\n  description = \"Olu\u015fturulan public subnet'lerin ID'leri\"\n  value       = aws_subnet.public.*.id\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, ana konfig\u00fcrasyonunuzda bu \u00e7\u0131kt\u0131lar\u0131 \u00e7a\u011f\u0131rmak i\u00e7in <\/p>\n<pre><code>module.<mod\u00fcl_ad\u0131>.<\u00e7\u0131kt\u0131_ad\u0131><\/pre>\n<p><\/code> s\u00f6zdizimini kullan\u0131rs\u0131n\u0131z:<\/p>\n<pre><code>\n# main.tf dosyan\u0131zda\nmodule \"my_vpc\" {\n  source = \".\/modules\/vpc\"\n  cidr_block = \"10.0.0.0\/16\"\n  # ... di\u011fer de\u011fi\u015fkenler ...\n}\n\nresource \"aws_security_group\" \"web_sg\" {\n  name        = \"web-sg\"\n  vpc_id      = module.my_vpc.vpc_id # Mod\u00fcl \u00e7\u0131kt\u0131s\u0131 kullan\u0131m\u0131\n  \n  ingress {\n    from_port   = 80\n    to_port     = 80\n    protocol    = \"tcp\"\n    cidr_blocks = [\"0.0.0.0\/0\"]\n  }\n}\n\noutput \"web_security_group_id\" {\n  value = aws_security_group.web_sg.id\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu mekanizma, mod\u00fcller aras\u0131nda temiz ve yap\u0131land\u0131r\u0131lm\u0131\u015f bir veri ak\u0131\u015f\u0131 sa\u011flar. Her mod\u00fcl kendi sorumlulu\u011funu yerine getirir ve gerekli bilgileri di\u011fer mod\u00fcllerle payla\u015f\u0131r. Bu, ba\u011f\u0131ml\u0131l\u0131klar\u0131n y\u00f6netilmesini kolayla\u015ft\u0131r\u0131r ve altyap\u0131 tan\u0131m\u0131n\u0131z\u0131 daha \u015feffaf hale getirir. Mod\u00fcller ve onlar\u0131n giri\u015f\/\u00e7\u0131k\u0131\u015flar\u0131, b\u00fcy\u00fck \u00f6l\u00e7ekli, kurumsal d\u00fczeyde Terraform projelerinde tutarl\u0131, g\u00fcvenli ve verimli bir \u015fekilde altyap\u0131 y\u00f6netimi i\u00e7in vazge\u00e7ilmez ara\u00e7lard\u0131r. Bu sayede, karma\u015f\u0131k sistemleri bile par\u00e7alara ay\u0131rarak daha kolay anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirebilirsiniz.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131: \u00c7oklu Ortamlarda Altyap\u0131y\u0131 Y\u00f6netmek<\/h2>\n<p>Ger\u00e7ek d\u00fcnya projelerinde, tek bir ortamla \u00e7al\u0131\u015fmak nadiren kar\u015f\u0131la\u015f\u0131lan bir durumdur. Genellikle geli\u015ftirme (development), test (staging\/UAT) ve \u00fcretim (production) gibi birden fazla ortam\u0131m\u0131z olur. Bu ortamlar\u0131n her biri, ayn\u0131 temel altyap\u0131 \u015fablonunu kullan\u0131r ancak farkl\u0131 boyutlarda, farkl\u0131 ayarlarla veya farkl\u0131 maliyet k\u0131s\u0131tlamalar\u0131yla yap\u0131land\u0131r\u0131l\u0131r. \u00d6rne\u011fin, geli\u015ftirme ortam\u0131nda daha k\u00fc\u00e7\u00fck ve daha az maliyetli kaynaklar kullan\u0131rken, \u00fcretim ortam\u0131nda y\u00fcksek performansl\u0131, y\u00fcksek eri\u015filebilirli\u011fe sahip ve daha pahal\u0131 kaynaklar kullanmak isteyebiliriz. Terraform de\u011fi\u015fkenleri ve mod\u00fclleri, bu t\u00fcr \u00e7oklu ortam senaryolar\u0131n\u0131 verimli ve tutarl\u0131 bir \u015fekilde y\u00f6netmek i\u00e7in m\u00fckemmel bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Manuel olarak her ortam i\u00e7in ayr\u0131 bir altyap\u0131 kodu yazmak, inan\u0131lmaz derecede zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir. Her yeni \u00f6zellik veya de\u011fi\u015fiklik, her ortam i\u00e7in manuel olarak g\u00fcncellenmelidir, bu da tutars\u0131zl\u0131k riskini art\u0131r\u0131r. Terraform ile ise, temel altyap\u0131 mant\u0131\u011f\u0131n\u0131 bir kez tan\u0131mlar ve ard\u0131ndan bu mant\u0131\u011f\u0131 farkl\u0131 ortamlar i\u00e7in uygun de\u011fi\u015fken de\u011ferleriyle da\u011f\u0131tabilirsiniz. Bu, \"tek kaynak kodu, \u00e7oklu da\u011f\u0131t\u0131m\" prensibini altyap\u0131 y\u00f6netimine getirir.<\/p>\n<h3>Geli\u015ftirme, Test ve \u00dcretim Ortamlar\u0131 \u0130\u00e7in Ortak Mod\u00fcller Nas\u0131l Kullan\u0131l\u0131r?<\/h3>\n<p>\u00c7oklu ortam stratejisinde, \u00e7ekirdek altyap\u0131 bile\u015fenlerinizi (VPC, veritaban\u0131, uygulama sunucular\u0131 vb.) mod\u00fcller halinde paketlemek en iyi yakla\u015f\u0131md\u0131r. Her ortam i\u00e7in ayr\u0131 bir ana Terraform konfig\u00fcrasyon dosyas\u0131 (<\/p>\n<pre><code>main.tf<\/pre>\n<p><\/code>) veya ayr\u0131 dizinler olu\u015fturarak, bu mod\u00fclleri farkl\u0131 de\u011fi\u015fken de\u011ferleriyle \u00e7a\u011f\u0131rabilirsiniz. \u00d6rne\u011fin:<\/p>\n<p>Proje yap\u0131s\u0131 \u015f\u00f6yle olabilir:<\/p>\n<pre><code>\nmy-project\/\n\u251c\u2500\u2500 modules\/\n\u2502   \u251c\u2500\u2500 vpc\/\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 app-server\/\n\u2502       \u251c\u2500\u2500 main.tf\n\u2502       \u251c\u2500\u2500 variables.tf\n\u2502       \u2514\u2500\u2500 outputs.tf\n\u251c\u2500\u2500 environments\/\n\u2502   \u251c\u2500\u2500 dev\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u2514\u2500\u2500 terraform.tfvars\n\u2502   \u251c\u2500\u2500 staging\/\n\u2502   \u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u2502   \u2514\u2500\u2500 terraform.tfvars\n\u2502   \u2514\u2500\u2500 prod\/\n\u2502       \u251c\u2500\u2500 main.tf\n\u2502       \u2514\u2500\u2500 terraform.tfvars\n\u2514\u2500\u2500 README.md\n  <\/pre>\n<p><\/code><\/p>\n<p>Her ortam\u0131n <\/p>\n<pre><code>main.tf<\/pre>\n<p><\/code> dosyas\u0131, ayn\u0131 mod\u00fclleri \u00e7a\u011f\u0131racak ancak kendi <\/p>\n<pre><code>terraform.tfvars<\/pre>\n<p><\/code> dosyas\u0131ndaki farkl\u0131 de\u011fi\u015fken de\u011ferlerini kullanacakt\u0131r. \u00d6rne\u011fin, <\/p>\n<pre><code>environments\/dev\/terraform.tfvars<\/pre>\n<p><\/code> dosyan\u0131zda \u015funlar olabilir:<\/p>\n<pre><code>\n# environments\/dev\/terraform.tfvars\naws_region = \"us-east-1\"\nenvironment_name = \"development\"\ninstance_type = \"t2.micro\"\ninstance_count = 1\nvpc_cidr = \"10.10.0.0\/16\"\n  <\/pre>\n<p><\/code><\/p>\n<p>Ve <\/p>\n<pre><code>environments\/prod\/terraform.tfvars<\/pre>\n<p><\/code> dosyan\u0131zda ise:<\/p>\n<pre><code>\n# environments\/prod\/terraform.tfvars\naws_region = \"us-west-2\"\nenvironment_name = \"production\"\ninstance_type = \"m5.large\"\ninstance_count = 3\nvpc_cidr = \"10.20.0.0\/16\"\n  <\/pre>\n<p><\/code><\/p>\n<p>Her ortam\u0131n <\/p>\n<pre><code>main.tf<\/pre>\n<p><\/code> dosyas\u0131 ise bu de\u011fi\u015fkenleri mod\u00fcllere aktar\u0131r:<\/p>\n<pre><code>\n# environments\/dev\/main.tf (veya prod\/main.tf)\nvariable \"aws_region\" { type = string }\nvariable \"environment_name\" { type = string }\nvariable \"instance_type\" { type = string }\nvariable \"instance_count\" { type = number }\nvariable \"vpc_cidr\" { type = string }\n\nprovider \"aws\" {\n  region = var.aws_region\n}\n\nmodule \"app_vpc\" {\n  source = \"..\/..\/modules\/vpc\"\n  cidr_block = var.vpc_cidr\n  env_name = var.environment_name\n}\n\nmodule \"web_servers\" {\n  source = \"..\/..\/modules\/app-server\"\n  vpc_id = module.app_vpc.vpc_id\n  subnet_ids = module.app_vpc.public_subnet_ids\n  instance_type = var.instance_type\n  instance_count = var.instance_count\n  env_name = var.environment_name\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131 sayesinde, her ortam i\u00e7in sadece <\/p>\n<pre><code>.tfvars<\/pre>\n<p><\/code> dosyas\u0131n\u0131 g\u00fcncelleyerek farkl\u0131 konfig\u00fcrasyonlar uygulayabilirsiniz. Altyap\u0131n\u0131n temel mant\u0131\u011f\u0131 ise <\/p>\n<pre><code>modules<\/pre>\n<p><\/code> dizininde merkezi olarak y\u00f6netilir. Bu, hem tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r hem de yeni bir ortam olu\u015fturmay\u0131 veya mevcut bir ortam\u0131 g\u00fcncelle\u015ftirmeyi \u00e7ok daha h\u0131zl\u0131 hale getirir.<\/p>\n<h3>Vaka Analizi: Birden Fazla AWS Hesab\u0131nda VPC Da\u011f\u0131t\u0131m\u0131<\/h3>\n<p>B\u00fcy\u00fck kurulu\u015flar genellikle birden fazla AWS hesab\u0131na sahiptir (\u00f6rne\u011fin, geli\u015ftirme, test, \u00fcretim i\u00e7in ayr\u0131 hesaplar). Bu senaryoda da mod\u00fcller ve de\u011fi\u015fkenler kilit rol oynar. Her bir AWS hesab\u0131 i\u00e7in ayr\u0131 bir Terraform yap\u0131land\u0131rmas\u0131 olu\u015fturmak yerine, tek bir VPC mod\u00fcl\u00fc yaz\u0131l\u0131r ve bu mod\u00fcl farkl\u0131 AWS hesaplar\u0131ndaki farkl\u0131 b\u00f6lgelere farkl\u0131 de\u011fi\u015fkenlerle da\u011f\u0131t\u0131l\u0131r.<\/p>\n<p>\u00d6rnek senaryo: Bir \u015firket, her ortam i\u00e7in ayr\u0131 bir AWS hesab\u0131na ve her hesapta iki farkl\u0131 b\u00f6lgeye (\u00f6rne\u011fin, <\/p>\n<pre><code>us-east-1<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>eu-west-1<\/pre>\n<p><\/code>) bir VPC da\u011f\u0131tmak istiyor. Her VPC'nin CIDR blo\u011fu ve subnet say\u0131lar\u0131 ortama ve b\u00f6lgeye g\u00f6re de\u011fi\u015febilir.<\/p>\n<p>Bu durumda, <\/p>\n<pre><code>modules\/vpc<\/pre>\n<p><\/code> dizininde standart bir VPC mod\u00fcl\u00fc tan\u0131mlars\u0131n\u0131z. Daha sonra, her AWS hesab\u0131 (\u00f6rne\u011fin, <\/p>\n<pre><code>dev-account<\/pre>\n<p><\/code>, <\/p>\n<pre><code>prod-account<\/pre>\n<p><\/code>) i\u00e7in ayr\u0131 bir k\u00f6k dizin olu\u015fturursunuz. Bu dizinlerin her birinin alt\u0131nda, farkl\u0131 b\u00f6lgeler i\u00e7in (\u00f6rne\u011fin, <\/p>\n<pre><code>us-east-1<\/pre>\n<p><\/code>, <\/p>\n<pre><code>eu-west-1<\/pre>\n<p><\/code>) alt dizinler olabilir. Her b\u00f6lge dizininde, o b\u00f6lgeye \u00f6zg\u00fc de\u011fi\u015fkenleri i\u00e7eren bir <\/p>\n<pre><code>terraform.tfvars<\/pre>\n<p><\/code> dosyas\u0131 bulunur ve ana <\/p>\n<pre><code>main.tf<\/pre>\n<p><\/code> dosyas\u0131 bu mod\u00fcl\u00fc \u00e7a\u011f\u0131r\u0131r.<\/p>\n<pre><code>\n# prod-account\/us-east-1\/terraform.tfvars\naws_region = \"us-east-1\"\nvpc_name   = \"prod-us-east-vpc\"\nvpc_cidr   = \"10.0.0.0\/16\"\npublic_subnet_cidrs = [\"10.0.1.0\/24\", \"10.0.2.0\/24\"]\n\n# prod-account\/eu-west-1\/terraform.tfvars\naws_region = \"eu-west-1\"\nvpc_name   = \"prod-eu-west-vpc\"\nvpc_cidr   = \"10.10.0.0\/16\"\npublic_subnet_cidrs = [\"10.10.1.0\/24\", \"10.10.2.0\/24\"]\n  <\/pre>\n<p><\/code><\/p>\n<p>Her bir k\u00f6k dizinde (<\/p>\n<pre><code>dev-account\/us-east-1<\/pre>\n<p><\/code> vb.) \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z <\/p>\n<pre><code>terraform init<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>terraform apply<\/pre>\n<p><\/code> komutlar\u0131, o dizinin <\/p>\n<pre><code>terraform.tfvars<\/pre>\n<p><\/code> dosyas\u0131n\u0131 otomatik olarak y\u00fckler ve ayn\u0131 VPC mod\u00fcl\u00fcn\u00fc farkl\u0131 parametrelerle da\u011f\u0131t\u0131r. Bu, tutarl\u0131l\u0131k, \u00f6l\u00e7eklenebilirlik ve y\u00f6netim kolayl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan inan\u0131lmaz bir g\u00fc\u00e7 sa\u011flar. \u015eirketler, bu yakla\u015f\u0131mla y\u00fczlerce hatta binlerce kaynak olu\u015fturabilir ve y\u00f6netebilirken, kod tekrar\u0131n\u0131 minimumda tutar ve hata yapma olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<\/p>\n<aside class=\"expert-tip\">\n    Uzman \u0130pucu: \u00c7oklu AWS hesab\u0131 senaryolar\u0131nda, AWS CLI'nin <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/cli-configure-profiles.html\">profil \u00f6zelli\u011fini<\/a> kullanarak her hesap i\u00e7in kimlik bilgilerini ayr\u0131 ayr\u0131 y\u00f6netebilirsiniz. Terraform'un <\/p>\n<pre><code>provider<\/pre>\n<p><\/code> blo\u011funda <\/p>\n<pre><code>profile<\/pre>\n<p><\/code> arg\u00fcman\u0131n\u0131 kullanarak hangi AWS hesab\u0131n\u0131 hedefleyece\u011finizi belirtebilirsiniz. Ayr\u0131ca, remote backend (uzak durum) y\u00f6netimi i\u00e7in her ortam ve hesap i\u00e7in ayr\u0131 bir S3 kovas\u0131 ve DynamoDB tablosu kullanmak, durum dosyalar\u0131n\u0131n izolasyonunu ve g\u00fcvenli\u011fini sa\u011flar.<br \/>\n  <\/aside>\n<h2>\u0130leri D\u00fczey Terraform Uygulamalar\u0131 ve En \u0130yi Pratikler<\/h2>\n<p>Terraform'da de\u011fi\u015fkenler ve mod\u00fcllerin temel kullan\u0131m\u0131n\u0131 anlad\u0131ktan sonra, daha karma\u015f\u0131k ve dinamik altyap\u0131lar olu\u015fturmak i\u00e7in ileri d\u00fczey tekniklere ge\u00e7ebiliriz. Bu teknikler, Terraform kodunuzu daha da esnek, \u00f6l\u00e7eklenebilir ve otomatik hale getirecektir. \u00d6zellikle b\u00fcy\u00fck ve s\u00fcrekli de\u011fi\u015fen altyap\u0131larla \u00e7al\u0131\u015f\u0131rken, bu pratikler size ciddi zaman kazand\u0131racak ve y\u00f6netim y\u00fck\u00fcn\u00fc hafifletecektir.<\/p>\n<p>\u0130leri d\u00fczey kullan\u0131mlar genellikle, ko\u015fullu mant\u0131k, d\u00f6ng\u00fcler ve dinamik kaynak olu\u015fturma gibi konular\u0131 kapsar. Bu sayede, \"if-else\" benzeri ko\u015fullara g\u00f6re kaynak olu\u015fturabilir, belirli bir say\u0131daki veya listedeki \u00f6\u011feler i\u00e7in tekrarlayan kaynaklar\u0131 tek bir blokla y\u00f6netebilir ve daha soyut altyap\u0131 bile\u015fenleri tasarlayabilirsiniz. Ayr\u0131ca, farkl\u0131 mod\u00fcller veya k\u00f6k konfig\u00fcrasyonlar aras\u0131nda veri payla\u015f\u0131m\u0131n\u0131 g\u00fcvenli ve etkili bir \u015fekilde sa\u011flamak da ileri d\u00fczey konular aras\u0131ndad\u0131r. Bu teknikler, Terraform'u sadece deklaratif bir ara\u00e7 olmaktan \u00e7\u0131kar\u0131p, ger\u00e7ek anlamda programlanabilir bir altyap\u0131 otomasyon platformuna d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<h3><code>for_each<\/code> ve <code>count<\/code> ile De\u011fi\u015fkenleri Dinamik Kullanma<\/h3>\n<p>Baz\u0131 durumlarda, belirli bir kaynak grubunu, girdi de\u011fi\u015fkenlerinin say\u0131s\u0131na veya de\u011ferine g\u00f6re dinamik olarak olu\u015fturmak isteyebiliriz. Terraform bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in <\/p>\n<pre><code>count<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> meta-arg\u00fcmanlar\u0131n\u0131 sunar.<\/p>\n<ul>\n<li>\n      <strong><\/p>\n<pre><code>count<\/pre>\n<p><\/code> Meta-arg\u00fcman\u0131:<\/strong><\/p>\n<p><pre><code>count<\/pre>\n<p><\/code>, bir kayna\u011f\u0131n veya mod\u00fcl\u00fcn belirli bir say\u0131 kadar kopyas\u0131n\u0131 olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. De\u011feri s\u0131f\u0131rdan b\u00fcy\u00fck bir tamsay\u0131 olmal\u0131d\u0131r. \u00d6zellikle ayn\u0131 t\u00fcrden birden fazla kayna\u011f\u0131 olu\u015fturman\u0131z gerekti\u011finde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\nvariable \"server_names\" {\n  description = \"Web sunucusu isimleri\"\n  type        = list(string)\n  default     = [\"web-01\", \"web-02\"]\n}\n\nresource \"aws_instance\" \"web\" {\n  count         = length(var.server_names) # Listenin uzunlu\u011fu kadar \u00f6rnek olu\u015ftur\n  ami           = \"ami-0abcdef1234567890\"\n  instance_type = \"t2.micro\"\n  tags = {\n    Name = var.server_names[count.index] # Her \u00f6rne\u011fe listeden bir isim ata\n  }\n}\n      <\/pre>\n<p><\/code><\/p>\n<p><pre><code>count.index<\/pre>\n<p><\/code> ifadesi, mevcut kayna\u011f\u0131n veya mod\u00fcl\u00fcn 0'dan ba\u015flayan indeksini temsil eder. Bu, her bir kopyaya farkl\u0131 \u00f6zellikler atamak i\u00e7in kullan\u0131labilir. Ancak, <\/p>\n<pre><code>count<\/pre>\n<p><\/code> ile olu\u015fturulan kaynaklar\u0131n silinmesi veya yeniden s\u0131ralanmas\u0131 durumunda (\u00f6rne\u011fin listeden bir \u00f6\u011fe \u00e7\u0131kar\u0131ld\u0131\u011f\u0131nda) beklenmeyen davran\u0131\u015flar ortaya \u00e7\u0131kabilir.<\/p>\n<\/li>\n<li>\n      <strong><\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> Meta-arg\u00fcman\u0131:<\/strong><\/p>\n<p><pre><code>for_each<\/pre>\n<p><\/code>, bir koleksiyondaki (harita veya k\u00fcme) her bir \u00f6\u011fe i\u00e7in ayr\u0131 ayr\u0131 kaynak veya mod\u00fcl olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. <\/p>\n<pre><code>count<\/pre>\n<p><\/code>'tan farkl\u0131 olarak, <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> ile olu\u015fturulan kaynaklar\u0131n her biri, koleksiyondaki ilgili \u00f6\u011fenin anahtar\u0131 veya de\u011feri ile benzersiz bir \u015fekilde ili\u015fkilendirilir. Bu, kaynaklar\u0131n eklenmesi veya \u00e7\u0131kar\u0131lmas\u0131 durumunda daha \u00f6ng\u00f6r\u00fclebilir bir davran\u0131\u015f sa\u011flar.<\/p>\n<pre><code>\nvariable \"subnets\" {\n  description = \"VPC i\u00e7indeki alt a\u011flar\"\n  type = map(object({\n    cidr_block = string\n    az         = string\n  }))\n  default = {\n    public_1a = { cidr_block = \"10.0.1.0\/24\", az = \"us-east-1a\" }\n    public_1b = { cidr_block = \"10.0.2.0\/24\", az = \"us-east-1b\" }\n  }\n}\n\nresource \"aws_subnet\" \"example\" {\n  for_each          = var.subnets # Her bir harita \u00f6\u011fesi i\u00e7in bir alt a\u011f olu\u015ftur\n  vpc_id            = aws_vpc.main.id\n  cidr_block        = each.value.cidr_block\n  availability_zone = each.value.az\n  tags = {\n    Name = each.key # Harita anahtar\u0131n\u0131 isim olarak kullan\n  }\n}\n      <\/pre>\n<p><\/code><\/p>\n<p><pre><code>for_each<\/pre>\n<p><\/code> ile birlikte <\/p>\n<pre><code>each.key<\/pre>\n<p><\/code> (haritan\u0131n anahtar\u0131 veya k\u00fcmenin de\u011feri) ve <\/p>\n<pre><code>each.value<\/pre>\n<p><\/code> (haritan\u0131n de\u011feri) ifadelerini kullan\u0131r\u0131z. Bu, daha esnek ve g\u00fc\u00e7l\u00fc dinamik kaynak olu\u015fturma yetenekleri sunar. Genel olarak, dinamik kaynak olu\u015fturmak i\u00e7in bir dizi veya liste kullan\u0131yorsan\u0131z ve \u00f6\u011felerin s\u0131ras\u0131n\u0131n \u00f6nemli olmad\u0131\u011f\u0131 durumlarda <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> tercih edilmelidir. S\u0131ralaman\u0131n \u00f6nemli oldu\u011fu veya sadece bir say\u0131ya g\u00f6re kaynak olu\u015fturmak istedi\u011finiz durumlarda ise <\/p>\n<pre><code>count<\/pre>\n<p><\/code> kullan\u0131labilir.<\/p>\n<\/li>\n<\/ul>\n<h3>Remote State Y\u00f6netimi ve Mod\u00fcller Aras\u0131 Ba\u011flant\u0131<\/h3>\n<p>B\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131larda, Terraform state (durum) dosyas\u0131n\u0131 yerel makinenizde tutmak pratik ve g\u00fcvenli de\u011fildir. <\/p>\n<pre><code>terraform.tfstate<\/pre>\n<p><\/code> dosyas\u0131, Terraform'un y\u00f6netti\u011fi t\u00fcm kaynaklar\u0131n ger\u00e7ek durumunu i\u00e7eren hassas bilgiler bar\u0131nd\u0131r\u0131r. Bu nedenle, state dosyas\u0131n\u0131 g\u00fcvenli, merkezi ve versiyon kontroll\u00fc bir konumda saklamak kritik \u00f6neme sahiptir. Bu i\u015flem \"Remote State Y\u00f6netimi\" olarak adland\u0131r\u0131l\u0131r.<\/p>\n<p>En pop\u00fcler remote state backend'leri aras\u0131nda Amazon S3, Azure Blob Storage, Google Cloud Storage ve HashiCorp'un kendi \u00e7\u00f6z\u00fcm\u00fc olan Terraform Cloud\/Enterprise bulunur. \u00d6rne\u011fin, AWS S3 backend'ini kullanmak i\u00e7in <\/p>\n<pre><code>backend \"s3\"<\/pre>\n<p><\/code> blo\u011funu konfig\u00fcrasyonunuza eklersiniz:<\/p>\n<pre><code>\nterraform {\n  backend \"s3\" {\n    bucket         = \"my-terraform-state-bucket\"\n    key            = \"prod\/network\/terraform.tfstate\"\n    region         = \"us-east-1\"\n    encrypt        = true\n    dynamodb_table = \"terraform-lock-table\" # Paralel operasyonlar i\u00e7in kilit mekanizmas\u0131\n  }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu konfig\u00fcrasyon, Terraform'a state dosyas\u0131n\u0131 belirtilen S3 kovas\u0131nda saklamas\u0131 ve DynamoDB tablosunu kilit mekanizmas\u0131 olarak kullanmas\u0131 talimat\u0131n\u0131 verir. Bu, ekip \u00fcyelerinin ayn\u0131 anda <\/p>\n<pre><code>terraform apply<\/pre>\n<p><\/code> \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 engeller ve state dosyas\u0131n\u0131n bozulmas\u0131n\u0131 \u00f6nler.<\/p>\n<p>Remote state'in bir ba\u015fka g\u00fc\u00e7l\u00fc yan\u0131 ise, farkl\u0131 Terraform k\u00f6k konfig\u00fcrasyonlar\u0131 veya mod\u00fcller aras\u0131nda veri payla\u015f\u0131m\u0131n\u0131 sa\u011flamas\u0131d\u0131r. \u00d6rne\u011fin, bir \"a\u011f\" ekibi bir VPC olu\u015fturabilir ve bu VPC'nin ID'sini remote state'e kaydedebilir. Daha sonra, bir \"uygulama\" ekibi, kendi Terraform konfig\u00fcrasyonundan bu VPC ID'sini okuyarak kendi uygulama sunucular\u0131n\u0131 bu VPC i\u00e7ine da\u011f\u0131tabilir. Bu, <\/p>\n<pre><code>terraform_remote_state<\/pre>\n<p><\/code> veri kayna\u011f\u0131 ile yap\u0131l\u0131r:<\/p>\n<pre><code>\n# Uygulama ekibinin main.tf dosyas\u0131\ndata \"terraform_remote_state\" \"network\" {\n  backend = \"s3\"\n  config = {\n    bucket         = \"my-terraform-state-bucket\"\n    key            = \"prod\/network\/terraform.tfstate\"\n    region         = \"us-east-1\"\n  }\n}\n\nresource \"aws_instance\" \"app\" {\n  ami           = \"ami-0abcdef1234567890\"\n  instance_type = \"t2.micro\"\n  vpc_security_group_ids = [data.terraform_remote_state.network.outputs.web_sg_id] # A\u011f mod\u00fcl\u00fcnden gelen \u00e7\u0131kt\u0131\n  subnet_id = data.terraform_remote_state.network.outputs.app_subnet_id\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu mekanizma, altyap\u0131 bile\u015fenlerinin ayr\u0131 ayr\u0131 y\u00f6netilmesini sa\u011flarken, aralar\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 da sorunsuz bir \u015fekilde \u00e7\u00f6zer. B\u00f6ylece b\u00fcy\u00fck altyap\u0131lar, mant\u0131ksal olarak ayr\u0131 par\u00e7alar halinde geli\u015ftirilebilir ve da\u011f\u0131t\u0131labilir, bu da DevOps ekipleri i\u00e7in b\u00fcy\u00fck bir esneklik ve verimlilik art\u0131\u015f\u0131 sa\u011flar.<\/p>\n<h2>Sonu\u00e7: Terraform ile Esnek ve \u00d6l\u00e7eklenebilir Altyap\u0131 Y\u00f6netimi<\/h2>\n<p>Bu makalede, Terraform'un altyap\u0131 otomasyonunda neden bu kadar g\u00fc\u00e7l\u00fc bir ara\u00e7 oldu\u011funu, \u00f6zellikle de\u011fi\u015fkenler ve mod\u00fcller gibi temel ama bir o kadar da g\u00fc\u00e7l\u00fc \u00f6zellikleriyle inceledik. De\u011fi\u015fkenler sayesinde kodumuzu dinamikle\u015ftirdik, tekrar eden de\u011ferleri d\u0131\u015far\u0131dan besleyebildik ve farkl\u0131 ortamlar i\u00e7in kolayca uyarlanabilir hale getirdik. Mod\u00fcller ise, bu dinamikli\u011fi bir ad\u0131m \u00f6teye ta\u015f\u0131yarak altyap\u0131 kodumuzu mant\u0131ksal, tekrar kullan\u0131labilir birimlere ay\u0131rmam\u0131z\u0131 sa\u011flad\u0131. Bu sayede, karma\u015f\u0131k altyap\u0131lar\u0131 daha y\u00f6netilebilir par\u00e7alara b\u00f6ld\u00fck, kod tekrar\u0131n\u0131 dramatik bir \u015fekilde azaltt\u0131k ve tutarl\u0131l\u0131\u011f\u0131 art\u0131rd\u0131k.<\/p>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, \u00f6zellikle \u00e7oklu ortam y\u00f6netimi ve birden fazla AWS hesab\u0131nda tutarl\u0131 altyap\u0131 da\u011f\u0131t\u0131m\u0131 gibi durumlarda, de\u011fi\u015fkenler ve mod\u00fcllerin nas\u0131l vazge\u00e7ilmez oldu\u011funu g\u00f6rd\u00fck. Ayr\u0131ca, <\/p>\n<pre><code>count<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> gibi ileri d\u00fczey meta-arg\u00fcmanlarla dinamik kaynak olu\u015fturma yeteneklerimizi geli\u015ftirdik ve remote state y\u00f6netimi ile mod\u00fcller aras\u0131 veri payla\u015f\u0131m\u0131n\u0131n nas\u0131l sa\u011fland\u0131\u011f\u0131n\u0131 \u00f6\u011frendik. T\u00fcm bu \u00f6zellikler bir araya geldi\u011finde, Terraform, modern bulut altyap\u0131lar\u0131n\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir \u015fekilde otomatikle\u015ftirilmesi i\u00e7in kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Terraform ile \u00e7al\u0131\u015fmaya devam ettik\u00e7e, bu kavramlar\u0131 kendi projelerinizde uygulayarak hem verimlili\u011finizi art\u0131racak hem de daha sa\u011flam ve hata pay\u0131 d\u00fc\u015f\u00fck altyap\u0131lar in\u015fa edeceksiniz. Unutmay\u0131n, iyi yap\u0131land\u0131r\u0131lm\u0131\u015f, mod\u00fcler ve de\u011fi\u015fken kullanan bir Terraform konfig\u00fcrasyonu, sadece bug\u00fcn\u00fcn de\u011fil, gelece\u011fin altyap\u0131 ihtiya\u00e7lar\u0131 i\u00e7in de esneklik ve adaptasyon yetene\u011fi sunar.<\/p>\n<div class=\"faq-section\">\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<div class=\"faq-item\">\n<p class=\"faq-question\">1. Terraform de\u011fi\u015fkenleri ve yerel de\u011ferler (<\/p>\n<pre><code>locals<\/pre>\n<p><\/code>) aras\u0131ndaki temel fark nedir?<\/p>\n<p class=\"faq-answer\">Terraform de\u011fi\u015fkenleri (<\/p>\n<pre><code>variable<\/pre>\n<p><\/code> bloklar\u0131), konfig\u00fcrasyonunuza d\u0131\u015far\u0131dan de\u011ferler sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Yani, Terraform kodunuzu \u00e7al\u0131\u015ft\u0131r\u0131rken bu de\u011ferleri de\u011fi\u015ftirebilirsiniz (komut sat\u0131r\u0131, <\/p>\n<pre><code>.tfvars<\/pre>\n<p><\/code> dosyalar\u0131 vb. arac\u0131l\u0131\u011f\u0131yla). Yerel de\u011ferler (<\/p>\n<pre><code>locals<\/pre>\n<p><\/code> bloklar\u0131) ise, konfig\u00fcrasyonunuzun i\u00e7inde karma\u015f\u0131k ifadeleri basitle\u015ftirmek ve tekrar eden hesaplamalar\u0131 merkezile\u015ftirmek i\u00e7in tan\u0131mlanan adland\u0131r\u0131lm\u0131\u015f de\u011ferlerdir. <\/p>\n<pre><code>locals<\/pre>\n<p><\/code> de\u011ferleri, kodunuz d\u0131\u015f\u0131ndan de\u011fi\u015ftirilemez, ancak de\u011fi\u015fkenlerden ve di\u011fer kaynak niteliklerinden t\u00fcretilebilirler.<\/p>\n<\/p><\/div>\n<div class=\"faq-item\">\n<p class=\"faq-question\">2. Hangi durumlarda <\/p>\n<pre><code>count<\/pre>\n<p><\/code>, hangi durumlarda <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> kullanmal\u0131y\u0131m?<\/p>\n<p class=\"faq-answer\">E\u011fer ayn\u0131 t\u00fcrden N adet kaynak olu\u015fturmak istiyorsan\u0131z ve bu kaynaklar\u0131n s\u0131ras\u0131n\u0131n (indekslerinin) \u00f6nemli oldu\u011fu durumlarda <\/p>\n<pre><code>count<\/pre>\n<p><\/code> kullan\u0131\u015fl\u0131d\u0131r. Ancak, <\/p>\n<pre><code>count<\/pre>\n<p><\/code> ile bir kayd\u0131 listeden \u00e7\u0131kar\u0131rsan\u0131z di\u011fer kaynaklar\u0131n indeksleri kayabilir ve Terraform beklenmedik \u015fekilde kaynaklar\u0131 yeniden olu\u015fturmaya \u00e7al\u0131\u015fabilir. <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> ise, bir harita veya k\u00fcmedeki her bir \u00f6\u011fe i\u00e7in kaynak olu\u015fturur. Burada her kaynak, haritan\u0131n anahtar\u0131 veya k\u00fcmenin de\u011feri ile benzersiz bir \u015fekilde ili\u015fkilendirilir. Bu, kaynak ekleme\/\u00e7\u0131karma durumlar\u0131nda daha kararl\u0131 bir davran\u0131\u015f sa\u011flar. Genel olarak, dinamik kaynaklar\u0131 y\u00f6netirken <\/p>\n<pre><code>for_each<\/pre>\n<p><\/code> daha esnek ve hata toleransl\u0131 oldu\u011fu i\u00e7in tercih edilir, \u00f6zellikle \u00f6\u011felerin kendilerine \u00f6zg\u00fc nitelikleri oldu\u011funda.<\/p>\n<\/p><\/div>\n<div class=\"faq-item\">\n<p class=\"faq-question\">3. Terraform mod\u00fclleri performans \u00fczerinde olumsuz bir etkiye sahip mi?<\/p>\n<p class=\"faq-answer\">Hay\u0131r, genellikle mod\u00fcller performans\u0131 olumsuz etkilemez. Aksine, mod\u00fcller kodu organize etti\u011fi ve tekrar kullan\u0131labilirli\u011fi art\u0131rd\u0131\u011f\u0131 i\u00e7in, b\u00fcy\u00fck projelerin y\u00f6netimini kolayla\u015ft\u0131r\u0131r ve daha h\u0131zl\u0131 iterasyon sa\u011flar. Terraform, mod\u00fclleri i\u015flerken optimize edilmi\u015f bir yakla\u015f\u0131ma sahiptir. Performans sorunlar\u0131 genellikle mod\u00fcllerin kendisinden ziyade, \u00e7ok say\u0131da kaynak i\u00e7eren a\u015f\u0131r\u0131 b\u00fcy\u00fck konfig\u00fcrasyonlardan veya optimize edilmemi\u015f provider (sa\u011flay\u0131c\u0131) API \u00e7a\u011fr\u0131lar\u0131ndan kaynaklan\u0131r. Mod\u00fcllerin avantajlar\u0131, olas\u0131 k\u00fc\u00e7\u00fck performans farkl\u0131l\u0131klar\u0131ndan \u00e7ok daha fazlad\u0131r.<\/p>\n<\/p><\/div>\n<div class=\"faq-item\">\n<p class=\"faq-question\">4. Hassas bilgileri (\u015fifreler, API anahtarlar\u0131) Terraform'da nas\u0131l g\u00fcvenli bir \u015fekilde y\u00f6netebilirim?<\/p>\n<p class=\"faq-answer\">Hassas bilgileri do\u011frudan Terraform kodunuza veya versiyon kontrol sistemine (Git) asla kaydetmeyin. Bunun yerine, a\u015fa\u011f\u0131daki y\u00f6ntemleri kullan\u0131n:<\/p>\n<ul>\n<li><strong>Ortam De\u011fi\u015fkenleri:<\/strong>\n<pre><code>TF_VAR_<\/pre>\n<p><\/code> \u00f6nekiyle ortam de\u011fi\u015fkenleri tan\u0131mlay\u0131n (\u00f6rne\u011fin, <\/p>\n<pre><code>TF_VAR_db_password<\/pre>\n<p><\/code>).<\/li>\n<li><strong>De\u011fi\u015fken Dosyalar\u0131 (\n<pre><code>.tfvars<\/pre>\n<p><\/code>):<\/strong> Hassas bilgileri i\u00e7eren <\/p>\n<pre><code>.tfvars<\/pre>\n<p><\/code> dosyalar\u0131n\u0131 versiyon kontrol\u00fcne almaktan ka\u00e7\u0131n\u0131n ve bunlar\u0131 g\u00fcvenli bir \u015fekilde y\u00f6netin (\u00f6rne\u011fin, manuel olarak veya CI\/CD sisteminiz taraf\u0131ndan olu\u015fturularak).<\/li>\n<li><strong>\n<pre><code>sensitive = true<\/pre>\n<p><\/code> arg\u00fcman\u0131:<\/strong> De\u011fi\u015fken tan\u0131m\u0131n\u0131za <\/p>\n<pre><code>sensitive = true<\/pre>\n<p><\/code> ekleyerek, bu de\u011fi\u015fkenin de\u011ferinin Terraform plan ve apply \u00e7\u0131kt\u0131lar\u0131nda gizlenmesini sa\u011flay\u0131n.<\/li>\n<li><strong>Harici Kasa \u00c7\u00f6z\u00fcmleri:<\/strong> HashiCorp Vault, AWS Secrets Manager, Azure Key Vault veya Google Secret Manager gibi \u00f6zel gizli kasa \u00e7\u00f6z\u00fcmleri kullanarak hassas bilgileri g\u00fcvenli bir \u015fekilde depolay\u0131n ve Terraform'a gerekti\u011finde dinamik olarak \u00e7ekmesini sa\u011flay\u0131n. Bu, en g\u00fcvenli ve \u00f6nerilen yakla\u015f\u0131md\u0131r.<\/li>\n<\/ul>\n<\/p><\/div>\n<\/p><\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131&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-34028","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 De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik<\/title>\n<meta name=\"description\" content=\"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform&#039;un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform&#039;un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.\" \/>\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-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik\" \/>\n<meta property=\"og:description\" content=\"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform&#039;un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform&#039;un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-10T02:31:09+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik\",\"datePublished\":\"2025-11-10T02:31:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\"},\"wordCount\":4247,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\",\"name\":\"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-10T02:31:09+00:00\",\"description\":\"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform'un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform'un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik\"}]},{\"@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 De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik","description":"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform'un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform'un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.","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-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/","og_locale":"tr_TR","og_type":"article","og_title":"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik","og_description":"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform'un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform'un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.","og_url":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-10T02:31:09+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik","datePublished":"2025-11-10T02:31:09+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/"},"wordCount":4247,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/","url":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/","name":"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-10T02:31:09+00:00","description":"Bulut altyap\u0131n\u0131z\u0131 manuel olarak y\u00f6netmek giderek karma\u015f\u0131k ve zaman al\u0131c\u0131 hale mi geliyor? S\u00fcrekli tekrar eden konfig\u00fcrasyonlar, farkl\u0131 ortamlar aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 koruma m\u00fccadelesi ve her de\u011fi\u015fiklikte ortaya \u00e7\u0131kan insan hatalar\u0131 sizi yoruyor olabilir. \u0130\u015fte tam da bu noktada, Terraform'un de\u011fi\u015fkenleri ve mod\u00fcl mekanizmas\u0131 devreye girerek altyap\u0131 otomasyonunuzu k\u00f6kten de\u011fi\u015ftirebilir. Bu makale, Terraform'un g\u00fcc\u00fcn\u00fc kullanarak altyap\u0131n\u0131z\u0131 nas\u0131l daha esnek, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirece\u011finizi, s\u0131f\u0131rdan ad\u0131m ad\u0131m \u00f6\u011frenmenizi sa\u011flayacak.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/terraform-degiskenleri-ve-modulleri-ile-altyapi-otomasyonunda-tekrar-kullanilabilirlik\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Terraform De\u011fi\u015fkenleri ve Mod\u00fclleri ile Altyap\u0131 Otomasyonunda Tekrar Kullan\u0131labilirlik"}]},{"@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\/34028","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=34028"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34028\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}