{"id":31329,"date":"2025-10-08T18:03:06","date_gmt":"2025-10-08T15:03:06","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/"},"modified":"2025-10-08T18:03:06","modified_gmt":"2025-10-08T15:03:06","slug":"azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/","title":{"rendered":"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#8217;a Y\u00fckleme"},"content":{"rendered":"<p><body><\/p>\n<p>Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub&#8217;a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<p>Uygulamalar\u0131n\u0131z\u0131n kullan\u0131c\u0131 taleplerine g\u00f6re an\u0131nda \u00f6l\u00e7eklenebilmesini, y\u00fcksek eri\u015filebilirlik sunmas\u0131n\u0131 ve y\u00f6netim y\u00fck\u00fcn\u00fc azaltmas\u0131n\u0131 m\u0131 istiyorsunuz? Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmeleri (VMSS), i\u015fte tam da bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc bir bulut hizmetidir. Tek bir yap\u0131land\u0131rma ile binlerce ayn\u0131 sanal makineyi da\u011f\u0131tman\u0131za ve y\u00f6netmenize olanak tan\u0131r. \u00d6zellikle de\u011fi\u015fken i\u015f y\u00fcklerine sahip uygulamalar i\u00e7in vazge\u00e7ilmez bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>\u00d6ncelikle, VMSS&#8217;nin sundu\u011fu en b\u00fcy\u00fck avantajlardan biri <strong>otomatik \u00f6l\u00e7eklendirmedir<\/strong>. Uygulaman\u0131z\u0131n trafik y\u00fck\u00fc artt\u0131\u011f\u0131nda, VMSS otomatik olarak yeni sanal makineler ekleyerek performans\u0131 sabit tutar. Trafik azald\u0131\u011f\u0131nda ise gereksiz makineleri kapatarak maliyetleri optimize eder. Bu esneklik, \u00f6zellikle Black Friday gibi yo\u011fun al\u0131\u015fveri\u015f d\u00f6nemlerinde anl\u0131k trafik patlamalar\u0131 ya\u015fayan bir e-ticaret platformu i\u00e7in hayat kurtar\u0131c\u0131 olabilir. Manuel olarak sunucu ekleyip \u00e7\u0131karmak yerine, sistem bu s\u00fcreci sizin i\u00e7in \u015feffaf bir \u015fekilde y\u00f6netir. Bu, insan hatas\u0131 riskini azalt\u0131rken operasyonel verimlili\u011fi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<p>Bununla birlikte, VMSS ayn\u0131 zamanda <strong>y\u00fcksek eri\u015filebilirlik ve dayan\u0131kl\u0131l\u0131k<\/strong> sa\u011flar. \u00d6l\u00e7ek k\u00fcmesindeki bir sanal makine ar\u0131zaland\u0131\u011f\u0131nda, VMSS otomatik olarak ar\u0131zal\u0131 makineyi alg\u0131lar ve yerine yenisini ba\u015flat\u0131r. Bu sayede uygulaman\u0131z\u0131n kesintisiz \u00e7al\u0131\u015fmaya devam etmesi sa\u011flan\u0131r. Ayr\u0131ca, Azure Load Balancer veya Application Gateway gibi y\u00fck dengeleyici hizmetlerle entegre olarak \u00e7al\u0131\u015f\u0131r. Gelen trafi\u011fi \u00f6l\u00e7ek k\u00fcmesindeki t\u00fcm sanal makinelere e\u015fit \u015fekilde da\u011f\u0131tarak tek bir hata noktas\u0131n\u0131 ortadan kald\u0131r\u0131r ve uygulaman\u0131z\u0131n performans\u0131n\u0131 maksimum seviyede tutar. Bu, i\u015f s\u00fcreklili\u011fi a\u00e7\u0131s\u0131ndan kritik bir rol oynar ve kullan\u0131c\u0131 deneyimini do\u011frudan etkiler.<\/p>\n<p>Son olarak, VMSS&#8217;nin <strong>kolay y\u00f6netim ve da\u011f\u0131t\u0131m<\/strong> \u00f6zelli\u011fi, DevOps ekipleri i\u00e7in b\u00fcy\u00fck bir kolayl\u0131k sunar. T\u00fcm sanal makineler tek bir birim olarak y\u00f6netildi\u011fi i\u00e7in, i\u015fletim sistemi g\u00fcncellemeleri, g\u00fcvenlik yamalar\u0131 veya uygulama da\u011f\u0131t\u0131mlar\u0131 gibi i\u015flemler tek seferde t\u00fcm k\u00fcme i\u00e7in uygulanabilir. Bu, manuel m\u00fcdahale gerektiren s\u00fcre\u00e7leri minimize eder ve zamandan tasarruf sa\u011flar. Sanal makinelerin yap\u0131land\u0131rmalar\u0131 ve imajlar\u0131 tek bir merkezden kontrol edildi\u011fi i\u00e7in, tutarl\u0131l\u0131k sa\u011flan\u0131r ve &#8220;konfig\u00fcrasyon kaymas\u0131&#8221; gibi sorunlar\u0131n \u00f6n\u00fcne ge\u00e7ilir. Geli\u015ftiriciler ve operasyon ekipleri, altyap\u0131y\u0131 kod olarak y\u00f6netme (Infrastructure as Code &#8211; IaC) prensiplerini benimseyerek, VMSS&#8217;nin kurulumunu ve y\u00f6netimini otomatikle\u015ftirebilirler. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131lar i\u00e7in vazge\u00e7ilmez bir yetenektir.<\/p>\n<p>\u00d6zetle, Azure VMSS; esneklik, dayan\u0131kl\u0131l\u0131k, \u00f6l\u00e7eklenebilirlik ve y\u00f6netim kolayl\u0131\u011f\u0131 gibi bir dizi \u00f6nemli avantaj sunarak modern bulut uygulamalar\u0131n\u0131n temelini olu\u015fturur. Uygulaman\u0131z\u0131n yo\u011funlu\u011funu d\u00fc\u015f\u00fcnmeden, sadece i\u015f mant\u0131\u011f\u0131n\u0131za odaklanman\u0131z\u0131 sa\u011flayan bu g\u00fc\u00e7l\u00fc hizmet, bulut altyap\u0131n\u0131z\u0131 daha verimli ve g\u00fcvenilir hale getirir.<\/p>\n<h2>Altyap\u0131y\u0131 Kod Olarak Y\u00f6netmek: Terraform ve Azure Entegrasyonu<\/h2>\n<p>Geleneksel olarak, sunucu ve a\u011f gibi altyap\u0131 bile\u015fenlerinin elle yap\u0131land\u0131r\u0131lmas\u0131 hem zaman al\u0131c\u0131 hem de hataya a\u00e7\u0131k bir s\u00fcre\u00e7ti. Peki ya altyap\u0131n\u0131z\u0131, uygulaman\u0131z\u0131n kodu gibi y\u00f6netebilseydiniz? \u0130\u015fte bu noktada Altyap\u0131y\u0131 Kod Olarak (Infrastructure as Code &#8211; IaC) kavram\u0131 ve onun en pop\u00fcler ara\u00e7lar\u0131ndan biri olan Terraform devreye giriyor. IaC, altyap\u0131n\u0131n betikler veya tan\u0131m dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netilmesi, sa\u011flanmas\u0131 ve yap\u0131land\u0131r\u0131lmas\u0131 felsefesidir. Bu, altyap\u0131 da\u011f\u0131t\u0131mlar\u0131n\u0131 tekrarlanabilir, tutarl\u0131 ve otomatize edilebilir hale getirir.<\/p>\n<h3>Terraform Nedir ve Neden Tercih Etmeliyiz?<\/h3>\n<p>Terraform, HashiCorp taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k kaynakl\u0131 bir IaC arac\u0131d\u0131r. Deklaratif bir dil (HashiCorp Configuration Language &#8211; HCL) kullanarak, istedi\u011finiz altyap\u0131 durumunu tan\u0131mlaman\u0131za olanak tan\u0131r. Siz Terraform&#8217;a &#8220;\u015eu kaynaklar\u0131 bu ayarlarla istiyorum&#8221; dersiniz, Terraform ise mevcut durumu analiz eder ve bu istedi\u011finiz duruma ula\u015fmak i\u00e7in gereken ad\u0131mlar\u0131 otomatik olarak atar. Bu, idempotent (ayn\u0131 i\u015flemi birden fazla kez uygulad\u0131\u011f\u0131n\u0131zda hep ayn\u0131 sonucu veren) bir yakla\u015f\u0131md\u0131r, yani altyap\u0131n\u0131z\u0131n her zaman bekledi\u011finiz gibi olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Terraform&#8217;u tercih etmemizin ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Sa\u011flay\u0131c\u0131 Agnostik:<\/strong> Sadece Azure ile de\u011fil, AWS, Google Cloud, Oracle Cloud gibi bir\u00e7ok bulut sa\u011flay\u0131c\u0131s\u0131 ve VMware, Kubernetes gibi platformlarla entegre olabilir. Bu, hibrit bulut stratejileri uygulayan veya farkl\u0131 sa\u011flay\u0131c\u0131larda kaynaklar\u0131 olan \u015firketler i\u00e7in b\u00fcy\u00fck bir avantajd\u0131r.<\/li>\n<li><strong>Durum Y\u00f6netimi:<\/strong> Terraform, da\u011f\u0131t\u0131lan altyap\u0131n\u0131n durumunu bir &#8220;state&#8221; dosyas\u0131nda tutar. Bu dosya, ger\u00e7ek altyap\u0131 ile kodunuz aras\u0131nda bir e\u015fleme g\u00f6revi g\u00f6r\u00fcr ve Terraform&#8217;un de\u011fi\u015fiklikleri do\u011fru bir \u015fekilde y\u00f6netmesini sa\u011flar. Bu, manuel konfig\u00fcrasyon kaymalar\u0131n\u0131 \u00f6nler ve her da\u011f\u0131t\u0131m\u0131n \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Mod\u00fcler Yap\u0131:<\/strong> Karma\u015f\u0131k altyap\u0131lar\u0131 daha k\u00fc\u00e7\u00fck, yeniden kullan\u0131labilir mod\u00fcllere ay\u0131rabilirsiniz. Bu mod\u00fcller, farkl\u0131 projelerde veya farkl\u0131 ekipler aras\u0131nda payla\u015f\u0131labilir, bu da geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r ve tutarl\u0131l\u0131\u011f\u0131 sa\u011flar.<\/li>\n<li><strong>Planlama Yetene\u011fi:<\/strong> <code>terraform plan<\/code> komutu, altyap\u0131n\u0131zda yap\u0131lacak de\u011fi\u015fiklikleri uygulamadan \u00f6nce size g\u00f6sterir. Bu sayede, beklenmedik s\u00fcrprizlerle kar\u015f\u0131la\u015fma riskiniz azal\u0131r ve da\u011f\u0131t\u0131ma tam kontrol sa\u011flars\u0131n\u0131z.<\/li>\n<\/ul>\n<h3>Azure \u00dczerinde Terraform Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Terraform&#8217;u Azure ile kullanmaya ba\u015flamak i\u00e7in birka\u00e7 \u00f6n ko\u015fulun yerine getirilmesi gerekir:<\/p>\n<ol>\n<li><strong>Terraform Kurulumu:<\/strong> \u0130lk olarak, i\u015fletim sisteminize Terraform&#8217;u kurman\u0131z gerekir. HashiCorp&#8217;un resmi web sitesinden veya paket y\u00f6neticiniz arac\u0131l\u0131\u011f\u0131yla kolayca kurabilirsiniz.<\/li>\n<li><strong>Azure CLI Kurulumu:<\/strong> Terraform&#8217;un Azure kaynaklar\u0131n\u0131 y\u00f6netebilmesi i\u00e7in Azure Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc (CLI) y\u00fckl\u00fc ve yap\u0131land\u0131r\u0131lm\u0131\u015f olmal\u0131d\u0131r. Bu, Terraform&#8217;un Azure API&#8217;leriyle etkile\u015fime ge\u00e7mesini sa\u011flar.<\/li>\n<li><strong>Azure Kimlik Do\u011frulamas\u0131:<\/strong> Terraform&#8217;un Azure ortam\u0131nda kaynak olu\u015fturma, g\u00fcncelleme veya silme yetkisine sahip olmas\u0131 i\u00e7in kimlik do\u011frulamas\u0131 yapmas\u0131 gerekir. Bunun en g\u00fcvenli ve \u00f6nerilen yolu, bir Service Principal (Hizmet Sorumlusu) kullanmakt\u0131r.<\/li>\n<\/ol>\n<p>Bir Service Principal olu\u015fturmak i\u00e7in Azure CLI&#8217;da a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz. Bu, Terraform&#8217;un Azure&#8217;a eri\u015fimini g\u00fcvenli bir \u015fekilde sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">\n    az ad sp create-for-rbac --name \"terraform-sp\" --role \"Contributor\" --scopes \"\/subscriptions\/YOUR_SUBSCRIPTION_ID\"\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu komut size <code>appId<\/code>, <code>password<\/code> (client secret), <code>tenant<\/code> ve <code>subscriptionId<\/code> gibi bilgileri d\u00f6nd\u00fcrecektir. Bu bilgiler, Terraform'un Azure sa\u011flay\u0131c\u0131s\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in kullan\u0131lacakt\u0131r. Bu bilgiler hassas oldu\u011fu i\u00e7in g\u00fcvenli bir \u015fekilde saklanmal\u0131d\u0131r.<\/p>\n<p>Terraform, altyap\u0131n\u0131z\u0131 kod olarak y\u00f6neterek DevOps s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131r ve tekrarlanabilirlik sa\u011flar. Azure ile entegrasyonu sayesinde, bulut kaynaklar\u0131n\u0131z\u0131 deklaratif bir yakla\u015f\u0131mla kolayca da\u011f\u0131tabilir ve y\u00f6netebilirsiniz. Bu, hata oran\u0131n\u0131 azalt\u0131rken verimlili\u011fi maksimize eder.<\/p>\n<h3>Terraform ile Azure VMSS Olu\u015fturma Ad\u0131m Ad\u0131m Rehberi<\/h3>\n<p>\u015eimdi pratik k\u0131sma ge\u00e7elim ve Terraform kullanarak Azure'da bir Sanal Makine \u00d6l\u00e7ek K\u00fcmesi olu\u015ftural\u0131m. Bu s\u00fcre\u00e7, basit bir web uygulamas\u0131 i\u00e7in gerekli olan temel a\u011f bile\u015fenlerinden, y\u00fck dengeleyiciye ve \u00f6l\u00e7ek k\u00fcmesinin kendisine kadar t\u00fcm altyap\u0131y\u0131 kapsayacak. Amac\u0131m\u0131z, uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilir ve y\u00fcksek eri\u015filebilir olmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<h4>Ad\u0131m 1: Temel \u00d6n Haz\u0131rl\u0131klar ve Dosya Yap\u0131s\u0131<\/h4>\n<p>Herhangi bir Terraform projesine ba\u015flamadan \u00f6nce, projemiz i\u00e7in uygun bir dizin olu\u015fturmal\u0131y\u0131z. Bu dizin i\u00e7inde, Terraform yap\u0131land\u0131rma dosyalar\u0131m\u0131z\u0131 bar\u0131nd\u0131raca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">\n    mkdir azure-vmss-terraform\n    cd azure-vmss-terraform\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu dizin i\u00e7erisinde, genellikle a\u015fa\u011f\u0131daki gibi bir dosya yap\u0131s\u0131 kullan\u0131r\u0131z:<\/p>\n<ul>\n<li><code>main.tf<\/code>: Ana kaynak tan\u0131mlar\u0131m\u0131z\u0131 ve mod\u00fcl \u00e7a\u011fr\u0131lar\u0131n\u0131 i\u00e7erir.<\/li>\n<li><code>variables.tf<\/code>: De\u011fi\u015fken tan\u0131mlar\u0131n\u0131 bar\u0131nd\u0131r\u0131r, b\u00f6ylece yap\u0131land\u0131rmay\u0131 daha esnek hale getirebiliriz.<\/li>\n<li><code>outputs.tf<\/code>: Da\u011f\u0131t\u0131m sonras\u0131 elde etmek istedi\u011fimiz \u00e7\u0131kt\u0131 de\u011ferlerini (\u00f6rne\u011fin, Public IP adresi) tan\u0131mlar.<\/li>\n<li><code>versions.tf<\/code>: Terraform ve sa\u011flay\u0131c\u0131 versiyon k\u0131s\u0131tlamalar\u0131n\u0131 belirtir.<\/li>\n<\/ul>\n<h4>Ad\u0131m 2: Terraform Yap\u0131land\u0131rma Dosyalar\u0131<\/h4>\n<p>\u015eimdi bu dosyalara ad\u0131m ad\u0131m i\u00e7erik ekleyelim:<\/p>\n<h5><code>versions.tf<\/code> (Terraform ve Sa\u011flay\u0131c\u0131 Versiyonlar\u0131)<\/h5>\n<p>Bu dosya, Terraform'un hangi s\u00fcr\u00fcmle ve Azure sa\u011flay\u0131c\u0131s\u0131n\u0131n hangi s\u00fcr\u00fcm\u00fcyle \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir. Bu, tutarl\u0131l\u0131k ve uyumluluk a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<pre><code class=\"language-hcl\">\n    terraform {\n      required_version = \">= 1.0.0\" # Terraform'un minimum s\u00fcr\u00fcm\u00fc\n      required_providers {\n        azurerm = {\n          source  = \"hashicorp\/azurerm\"\n          version = \"~> 3.0\" # Azure sa\u011flay\u0131c\u0131s\u0131n\u0131n s\u00fcr\u00fcm\u00fc\n        }\n      }\n    }\n\n    provider \"azurerm\" {\n      features {} # Azure provider'\u0131n \u00f6zellik setini etkinle\u015ftirir\n    }\n    <\/pre>\n<p><\/code><\/p>\n<h5><code>variables.tf<\/code> (De\u011fi\u015fken Tan\u0131mlar\u0131)<\/h5>\n<p>Bu dosya, da\u011f\u0131t\u0131m\u0131m\u0131zda kullan\u0131lacak dinamik de\u011ferleri tan\u0131mlar. Bu sayede kodu farkl\u0131 ortamlar veya ayarlar i\u00e7in kolayca \u00f6zelle\u015ftirebiliriz.<\/p>\n<pre><code class=\"language-hcl\">\n    variable \"resource_group_name\" {\n      description = \"Azure kaynak grubunun ad\u0131.\"\n      type        = string\n      default     = \"rg-vmss-terraform-prod\"\n    }\n\n    variable \"location\" {\n      description = \"Kaynaklar\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 Azure b\u00f6lgesi.\"\n      type        = string\n      default     = \"West Europe\"\n    }\n\n    variable \"vmss_name\" {\n      description = \"Sanal Makine \u00d6l\u00e7ek K\u00fcmesinin ad\u0131.\"\n      type        = string\n      default     = \"vmss-web-app\"\n    }\n\n    variable \"vm_size\" {\n      description = \"Sanal makinelerin boyutu (SKU).\"\n      type        = string\n      default     = \"Standard_B2s\"\n    }\n\n    variable \"admin_username\" {\n      description = \"Sanal makine i\u00e7in y\u00f6netici kullan\u0131c\u0131 ad\u0131.\"\n      type        = string\n      default     = \"azureuser\"\n    }\n\n    variable \"admin_password\" {\n      description = \"Sanal makine i\u00e7in y\u00f6netici \u015fifresi.\"\n      type        = string\n      sensitive   = true # Hassas bilgi oldu\u011funu belirtir\n    }\n    <\/pre>\n<p><\/code><\/p>\n<h5><code>main.tf<\/code> (Ana Kaynak Tan\u0131mlar\u0131)<\/h5>\n<p>Bu en kapsaml\u0131 dosyam\u0131zd\u0131r. Burada kaynak grubundan, a\u011f bile\u015fenlerine ve nihayet Sanal Makine \u00d6l\u00e7ek K\u00fcmesine kadar her \u015feyi tan\u0131mlayaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-hcl\">\n    # Azure Kaynak Grubu Olu\u015fturma\n    resource \"azurerm_resource_group\" \"rg\" {\n      name     = var.resource_group_name\n      location = var.location\n    }\n\n    # Sanal A\u011f (VNet) Olu\u015fturma\n    resource \"azurerm_virtual_network\" \"vnet\" {\n      name                = \"vnet-vmss\"\n      address_space       = [\"10.0.0.0\/16\"]\n      location            = azurerm_resource_group.rg.location\n      resource_group_name = azurerm_resource_group.rg.name\n    }\n\n    # Alt A\u011f (Subnet) Olu\u015fturma\n    resource \"azurerm_subnet\" \"subnet\" {\n      name                 = \"subnet-vmss\"\n      resource_group_name  = azurerm_resource_group.rg.name\n      virtual_network_name = azurerm_virtual_network.vnet.name\n      address_prefixes     = [\"10.0.2.0\/24\"]\n    }\n\n    # Genel IP Adresi Olu\u015fturma (Y\u00fck Dengeleyici i\u00e7in)\n    resource \"azurerm_public_ip\" \"pip\" {\n      name                = \"pip-vmss-lb\"\n      location            = azurerm_resource_group.rg.location\n      resource_group_name = azurerm_resource_group.rg.name\n      allocation_method   = \"Static\"\n      sku                 = \"Standard\"\n    }\n\n    # Y\u00fck Dengeleyici (Load Balancer) Olu\u015fturma\n    resource \"azurerm_lb\" \"lb\" {\n      name                = \"lb-vmss\"\n      location            = azurerm_resource_group.rg.location\n      resource_group_name = azurerm_resource_group.rg.name\n      sku                 = \"Standard\"\n\n      frontend_ip_configuration {\n        name                 = \"FrontEndIpConfiguration\"\n        public_ip_address_id = azurerm_public_ip.pip.id\n      }\n    }\n\n    # Y\u00fck Dengeleyici Backend Havuzu Olu\u015fturma\n    resource \"azurerm_lb_backend_address_pool\" \"backend_pool\" {\n      loadbalancer_id = azurerm_lb.lb.id\n      name            = \"BackendPool\"\n    }\n\n    # Y\u00fck Dengeleyici Sa\u011fl\u0131k Kontrol\u00fc (Health Probe) Olu\u015fturma\n    resource \"azurerm_lb_probe\" \"http_probe\" {\n      loadbalancer_id = azurerm_lb.lb.id\n      name            = \"http-probe\"\n      port            = 80 # Web sunucusunun \u00e7al\u0131\u015ft\u0131\u011f\u0131 port\n      protocol        = \"Tcp\"\n      request_path    = \"\/\" # Sa\u011fl\u0131k kontrol\u00fc i\u00e7in HTTP yolu (iste\u011fe ba\u011fl\u0131)\n    }\n\n    # Y\u00fck Dengeleyici Kural\u0131 Olu\u015fturma (HTTP i\u00e7in)\n    resource \"azurerm_lb_rule\" \"http_rule\" {\n      loadbalancer_id                = azurerm_lb.lb.id\n      name                           = \"http-rule\"\n      protocol                       = \"Tcp\"\n      frontend_port                  = 80\n      backend_port                   = 80\n      frontend_ip_configuration_name = azurerm_lb.lb.frontend_ip_configuration[0].name\n      backend_address_pool_ids       = [azurerm_lb_backend_address_pool.backend_pool.id]\n      probe_id                       = azurerm_lb_probe.http_probe.id\n      disable_outbound_snat          = true # VMSS i\u00e7in SNAT devre d\u0131\u015f\u0131 b\u0131rak\u0131l\u0131r\n    }\n\n    # A\u011f G\u00fcvenlik Grubu (NSG) Olu\u015fturma (Opsiyonel, daha fazla g\u00fcvenlik i\u00e7in)\n    resource \"azurerm_network_security_group\" \"nsg\" {\n      name                = \"nsg-vmss\"\n      location            = azurerm_resource_group.rg.location\n      resource_group_name = azurerm_resource_group.rg.name\n\n      security_rule {\n        name                       = \"Allow_HTTP_Inbound\"\n        priority                   = 100\n        direction                  = \"Inbound\"\n        access                     = \"Allow\"\n        protocol                   = \"Tcp\"\n        source_port_range          = \"*\"\n        destination_port_range     = \"80\"\n        source_address_prefix      = \"Internet\"\n        destination_address_prefix = \"*\"\n      }\n\n      security_rule {\n        name                       = \"Allow_SSH_Inbound\"\n        priority                   = 101\n        direction                  = \"Inbound\"\n        access                     = \"Allow\"\n        protocol                   = \"Tcp\"\n        source_port_range          = \"*\"\n        destination_port_range     = \"22\"\n        source_address_prefix      = \"Internet\"\n        destination_address_prefix = \"*\"\n      }\n    }\n\n    # Sanal Makine \u00d6l\u00e7ek K\u00fcmesi (VMSS) Olu\u015fturma\n    resource \"azurerm_linux_virtual_machine_scale_set\" \"vmss\" {\n      name                            = var.vmss_name\n      resource_group_name             = azurerm_resource_group.rg.name\n      location                        = azurerm_resource_group.rg.location\n      sku                             = var.vm_size\n      instances                       = 2 # Ba\u015flang\u0131\u00e7 \u00f6rnek say\u0131s\u0131\n      admin_username                  = var.admin_username\n      admin_password                  = var.admin_password\n      disable_password_authentication = false # SSH anahtar\u0131 yerine \u015fifre kullan\u0131l\u0131r (test i\u00e7in)\n      os_disk {\n        caching              = \"ReadWrite\"\n        storage_account_type = \"Standard_LRS\"\n      }\n\n      source_image_reference {\n        publisher = \"Canonical\"\n        offer     = \"0001-com-ubuntu-server-focal\"\n        sku       = \"20_04-lts-gen2\"\n        version   = \"latest\"\n      }\n\n      network_interface {\n        name    = \"vmss-nic\"\n        primary = true\n        ip_configuration {\n          name      = \"vmss-ipconfig\"\n          primary   = true\n          subnet_id = azurerm_subnet.subnet.id\n          load_balancer_backend_address_pool_ids = [azurerm_lb_backend_address_pool.backend_pool.id]\n        }\n      }\n\n      # \u00d6zel komut dosyas\u0131 ile web sunucusu (Nginx) y\u00fckleme\n      custom_data = base64encode(<<EOF\n    #!\/bin\/bash\n    apt-get update\n    apt-get install -y nginx\n    systemctl start nginx\n    systemctl enable nginx\n    echo \"<h1>Hello from Azure VMSS! Hostname: $(hostname)<\/h1>\" > \/var\/www\/html\/index.nginx-debian.html\n    EOF\n      )\n\n      # Otomatik \u00f6l\u00e7eklendirme ayarlar\u0131\n      # Bu \u00f6rnekte minimum 2, maksimum 5 \u00f6rnek aras\u0131nda \u00f6l\u00e7eklenecek\n      # Daha geli\u015fmi\u015f kurallar i\u00e7in azurerm_monitor_autoscale_setting kayna\u011f\u0131na bak\u0131n\u0131z.\n      # Bu basic \u00f6rnekte sadece instance say\u0131s\u0131 tan\u0131mlanm\u0131\u015ft\u0131r.\n    }\n    <\/pre>\n<p><\/code><\/p>\n<h4>Ad\u0131m 3: Terraform Komutlar\u0131<\/h4>\n<p>Yap\u0131land\u0131rma dosyalar\u0131m\u0131z\u0131 tamamlad\u0131ktan sonra, Terraform komutlar\u0131n\u0131 kullanarak altyap\u0131m\u0131z\u0131 da\u011f\u0131tabiliriz:<\/p>\n<ol>\n<li><strong><code>terraform init<\/code>:<\/strong> Terraform projesini ba\u015flat\u0131r, gerekli sa\u011flay\u0131c\u0131 eklentilerini indirir ve arka ucu yap\u0131land\u0131r\u0131r.<\/li>\n<li><strong><code>terraform plan<\/code>:<\/strong> Yap\u0131land\u0131rma dosyalar\u0131n\u0131zdaki de\u011fi\u015fiklikleri ger\u00e7ek Azure ortam\u0131yla kar\u015f\u0131la\u015ft\u0131r\u0131r ve hangi kaynaklar\u0131n olu\u015fturulaca\u011f\u0131n\u0131, g\u00fcncellenece\u011fini veya silinece\u011fini g\u00f6sterir. Bu, bir da\u011f\u0131t\u0131m\u0131n ne yapaca\u011f\u0131n\u0131 \u00f6nceden g\u00f6rmek i\u00e7in kritik bir ad\u0131md\u0131r.<\/li>\n<li><strong><code>terraform apply<\/code>:<\/strong> Planlanan de\u011fi\u015fiklikleri Azure ortam\u0131na uygular ve kaynaklar\u0131 olu\u015fturur. Sizden onay isteyecektir.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">\n    terraform init\n    terraform plan -var 'admin_password=YourStrongPasswordHere' # \u015eifreyi do\u011frudan komut sat\u0131r\u0131nda ge\u00e7mek yerine de\u011fi\u015fkene atay\u0131n\n    terraform apply -var 'admin_password=YourStrongPasswordHere' # Otomatik onay i\u00e7in -auto-approve kullanabilirsiniz (dikkatli olun)\n    <\/pre>\n<p><\/code><\/p>\n<p><code>admin_password<\/code> i\u00e7in bir de\u011fer sa\u011flamay\u0131 unutmay\u0131n. G\u00fcvenlik nedeniyle, bu t\u00fcr hassas bilgileri do\u011frudan komut sat\u0131r\u0131nda vermek yerine, \u00e7evre de\u011fi\u015fkenleri veya Terraform'un de\u011fi\u015fken dosyalar\u0131 (<code>.tfvars<\/code>) arac\u0131l\u0131\u011f\u0131yla sa\u011flamak daha g\u00fcvenlidir.<\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Hassas verileri (\u015fifreler, API anahtarlar\u0131 vb.) <code>variables.tf<\/code> dosyas\u0131nda <code>sensitive = true<\/code> olarak i\u015faretlemek ve <code>terraform.tfvars<\/code> gibi bir dosyada tutmak, ancak bu dosyay\u0131 versiyon kontrol\u00fcne (GitHub'a) y\u00fcklememek en iyi uygulamad\u0131r. Bunun yerine, bu de\u011fi\u015fkenleri CI\/CD ortam\u0131nda secret olarak veya elle girerek sa\u011flamal\u0131s\u0131n\u0131z.\n    <\/div>\n<p>Bu ad\u0131mlarla, temel bir Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini ba\u015far\u0131yla da\u011f\u0131tm\u0131\u015f olacaks\u0131n\u0131z. Y\u00fck dengeleyici genel IP adresini kullanarak web taray\u0131c\u0131n\u0131zdan \"Hello from Azure VMSS!\" mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h2>Altyap\u0131 Kodunuzu Versiyonlamak: GitHub Entegrasyonu<\/h2>\n<p>Altyap\u0131m\u0131z\u0131 kod olarak tan\u0131mlamak harika, ancak bu kodu nas\u0131l y\u00f6netece\u011fiz, ekip i\u00e7inde nas\u0131l payla\u015faca\u011f\u0131z ve zaman i\u00e7indeki de\u011fi\u015fiklikleri nas\u0131l takip edece\u011fiz? \u0130\u015fte bu noktada versiyon kontrol sistemleri ve \u00f6zellikle GitHub devreye giriyor. Altyap\u0131 kodunuzu GitHub'da depolamak, sadece bir depolama \u00e7\u00f6z\u00fcm\u00fc de\u011fil, ayn\u0131 zamanda i\u015fbirli\u011fi, g\u00fcvenlik ve otomasyon i\u00e7in g\u00fc\u00e7l\u00fc bir temel olu\u015fturur.<\/p>\n<h3>Neden Altyap\u0131 Kodunu GitHub'a Y\u00fcklemeliyiz?<\/h3>\n<p>GitHub, d\u00fcnyan\u0131n en b\u00fcy\u00fck kod bar\u0131nd\u0131rma platformlar\u0131ndan biridir ve Git versiyon kontrol sistemini temel al\u0131r. Altyap\u0131 kodunuzu (Terraform dosyalar\u0131n\u0131z\u0131) GitHub'a y\u00fcklemenin bir\u00e7ok avantaj\u0131 vard\u0131r:<\/p>\n<ul>\n<li><strong>Versiyon Kontrol\u00fc:<\/strong> Her de\u011fi\u015fiklik bir taahh\u00fct (commit) olarak kaydedilir. Bu, ge\u00e7mi\u015fe d\u00f6n\u00fck t\u00fcm de\u011fi\u015fiklikleri g\u00f6rmenizi, belirli bir s\u00fcr\u00fcme geri d\u00f6nmenizi ve kimin hangi de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131 izlemenizi sa\u011flar. Bu, hata ay\u0131klama ve denetim s\u00fcre\u00e7leri i\u00e7in paha bi\u00e7ilmezdir.<\/li>\n<li><strong>\u0130\u015fbirli\u011fi ve Ekip \u00c7al\u0131\u015fmas\u0131:<\/strong> Birden fazla geli\u015ftirici veya DevOps m\u00fchendisi ayn\u0131 altyap\u0131 kodu \u00fczerinde e\u015f zamanl\u0131 olarak \u00e7al\u0131\u015fabilir. \u00c7ekme istekleri (Pull Requests) ve kod incelemeleri (Code Reviews), de\u011fi\u015fikliklerin kaliteli ve g\u00fcvenli olmas\u0131n\u0131 sa\u011flar. Bu, tak\u0131m\u0131n birlikte daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 te\u015fvik eder.<\/li>\n<li><strong>CI\/CD Tetikleyicisi:<\/strong> GitHub'a yap\u0131lan her kod de\u011fi\u015fikli\u011fi (push), otomatik olarak S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) i\u015f ak\u0131\u015flar\u0131n\u0131 tetikleyebilir. Bu, altyap\u0131 de\u011fi\u015fikliklerinin otomatik olarak test edilmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Belgelendirme ve \u015eeffafl\u0131k:<\/strong> Kodun kendisi en iyi belgedir. GitHub, kodunuzu ve de\u011fi\u015fiklik ge\u00e7mi\u015fini merkezi bir konumda tutarak, herkesin altyap\u0131n\u0131z\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>G\u00fcvenlik:<\/strong> Hassas bilgileri (\u015fifreler, API anahtarlar\u0131) do\u011frudan koda g\u00f6mmek yerine, GitHub Secrets gibi \u00f6zelliklerle g\u00fcvenli bir \u015fekilde y\u00f6netebilirsiniz. Ayr\u0131ca, GitHub'\u0131n eri\u015fim kontrol mekanizmalar\u0131, deponuza kimlerin eri\u015febilece\u011fini ve hangi i\u015flemleri yapabilece\u011fini belirlemenizi sa\u011flar.<\/li>\n<\/ul>\n<h3>Yerel Terraform Projesini GitHub Deposuna \u0130tme<\/h3>\n<p>Terraform projenizi GitHub'a y\u00fcklemek olduk\u00e7a basit bir s\u00fcre\u00e7tir. Ad\u0131mlar genellikle \u015fu \u015fekildedir:<\/p>\n<ol>\n<li><strong>Yeni Bir GitHub Deposu Olu\u015fturma:<\/strong> GitHub'a gidin ve projeniz i\u00e7in yeni bir bo\u015f depo (repository) olu\u015fturun.<\/li>\n<li><strong>Yerel Git Deposunu Ba\u015flatma:<\/strong> Terraform dosyalar\u0131n\u0131z\u0131n bulundu\u011fu dizinde bir Git deposu ba\u015flat\u0131n.<\/li>\n<li><strong><code>.gitignore<\/code> Dosyas\u0131 Olu\u015fturma:<\/strong> Terraform'un durum dosyas\u0131 (<code>terraform.tfstate<\/code>) ve hassas de\u011fi\u015fkenler i\u00e7eren <code>.tfvars<\/code> dosyalar\u0131 gibi baz\u0131 dosyalar kesinlikle versiyon kontrol\u00fcne dahil edilmemelidir. Bu dosyalar\u0131 <code>.gitignore<\/code>'a ekleyerek Git'in bunlar\u0131 izlemesini engellersiniz.<\/li>\n<li><strong>Dosyalar\u0131 A\u015famaya Ekleme ve Taahh\u00fct Etme:<\/strong> De\u011fi\u015fikliklerinizi a\u015famaya (staging area) ekleyin ve bir taahh\u00fct mesaj\u0131yla kaydedin.<\/li>\n<li><strong>Uzak Depoyu Ekleme ve Y\u00fckleme:<\/strong> Yerel deponuzu GitHub'daki uzaktan depoyla ili\u015fkilendirin ve kodunuzu y\u00fckleyin.<\/li>\n<\/ol>\n<p>\u0130\u015fte komutlar:<\/p>\n<pre><code class=\"language-bash\">\n    # 1. Proje dizinine gidin\n    cd azure-vmss-terraform\n\n    # 2. Git deposunu ba\u015flat\u0131n\n    git init\n\n    # 3. .gitignore dosyas\u0131 olu\u015fturun ve hassas dosyalar\u0131 ekleyin\n    echo \"*.tfstate\" > .gitignore\n    echo \"*.tfstate.backup\" >> .gitignore\n    echo \"*.tfvars\" >> .gitignore\n    echo \".terraform\/\" >> .gitignore\n    echo \".terraform.lock.hcl\" >> .gitignore\n    echo \"*.json\" >> .gitignore # E\u011fer \u00e7\u0131kt\u0131lar\u0131 JSON olarak al\u0131yorsan\u0131z\n\n    # 4. T\u00fcm Terraform dosyalar\u0131n\u0131 (ve .gitignore'\u0131) a\u015famaya ekleyin\n    git add .\n\n    # 5. De\u011fi\u015fiklikleri taahh\u00fct edin (commit)\n    git commit -m \"Initial commit: Azure VMSS Terraform configuration\"\n\n    # 6. GitHub'da olu\u015fturdu\u011funuz deponun URL'sini buraya ekleyin\n    # \u00d6rne\u011fin: https:\/\/github.com\/kullaniciadi\/azure-vmss-terraform.git\n    git remote add origin https:\/\/github.com\/YOUR_USERNAME\/YOUR_REPOSITORY.git\n\n    # 7. Kodu GitHub'a y\u00fckleyin\n    git push -u origin main\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu ad\u0131mlar sayesinde altyap\u0131 kodunuz art\u0131k GitHub \u00fczerinde merkezi olarak y\u00f6netilecek. Herhangi bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, <code>git add .<\/code>, <code>git commit -m \"mesaj\"<\/code> ve <code>git push<\/code> komutlar\u0131yla bu de\u011fi\u015fiklikleri GitHub'a yans\u0131tabilirsiniz.<\/p>\n<h3>Terraform Durum Dosyas\u0131n\u0131n G\u00fcvenli\u011fi ve Uzak Durum Y\u00f6netimi<\/h3>\n<p>Yukar\u0131daki <code>.gitignore<\/code> \u00f6rne\u011finde belirtti\u011fimiz gibi, <code>terraform.tfstate<\/code> dosyas\u0131 asla do\u011frudan Git deposuna y\u00fcklenmemelidir. Bu dosya, da\u011f\u0131tt\u0131\u011f\u0131n\u0131z altyap\u0131n\u0131n t\u00fcm ayr\u0131nt\u0131lar\u0131n\u0131 ve hassas verileri (\u00f6rne\u011fin, sanal makinelerin \u00f6zel IP adresleri, SSH anahtarlar\u0131n\u0131n baz\u0131 k\u0131s\u0131mlar\u0131) i\u00e7erebilir. Bunun yerine, Terraform'un uzak durum y\u00f6netimi (remote state) \u00f6zelli\u011fini kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p>Azure Blob Storage, Terraform durum dosyas\u0131n\u0131 g\u00fcvenli ve eri\u015filebilir bir \u015fekilde saklamak i\u00e7in m\u00fckemmel bir \u00e7\u00f6z\u00fcmd\u00fcr. Uzak durum kullanarak, Terraform durumu merkezile\u015ftirilir ve ekip \u00fcyeleri aras\u0131nda payla\u015f\u0131labilir hale gelir, ayn\u0131 zamanda kilit mekanizmalar\u0131 sayesinde e\u015f zamanl\u0131 da\u011f\u0131t\u0131mlar\u0131n \u00e7ak\u0131\u015fmas\u0131 \u00f6nlenir. <code>main.tf<\/code> dosyan\u0131z\u0131n ba\u015f\u0131na a\u015fa\u011f\u0131daki blo\u011fu ekleyerek uzak durumu yap\u0131land\u0131rabilirsiniz (veya <code>versions.tf<\/code> i\u00e7inde de tan\u0131mlanabilir):<\/p>\n<pre><code class=\"language-hcl\">\n    terraform {\n      backend \"azurerm\" {\n        resource_group_name  = \"tfstate-rg\"        # Durum dosyas\u0131n\u0131n tutulaca\u011f\u0131 kaynak grubu\n        storage_account_name = \"tfstatesa12345\"    # Durum dosyas\u0131n\u0131n tutulaca\u011f\u0131 depolama hesab\u0131\n        container_name       = \"tfstate\"           # Depolama hesab\u0131 i\u00e7indeki kapsay\u0131c\u0131 ad\u0131\n        key                  = \"vmss-production.tfstate\" # Durum dosyas\u0131n\u0131n ad\u0131\n      }\n      # ... di\u011fer terraform ayarlar\u0131 ...\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma ile <code>terraform init<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Terraform durum dosyan\u0131z\u0131 belirtilen Azure Blob Storage hesab\u0131na kaydedecektir. Bu, hem g\u00fcvenlik hem de i\u015fbirli\u011fi i\u00e7in en iyi uygulamad\u0131r.<\/p>\n<h2>GitHub Actions ile S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) Entegrasyonu<\/h2>\n<p>Altyap\u0131 kodumuzu GitHub'a y\u00fckledik, peki \u015fimdi bu koddaki de\u011fi\u015fiklikleri nas\u0131l otomatik olarak Azure'a da\u011f\u0131tabiliriz? Manuel <code>terraform apply<\/code> komutlar\u0131 yerine, GitHub Actions gibi bir S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) arac\u0131 kullanarak bu s\u00fcreci tamamen otomatikle\u015ftirebiliriz. GitHub Actions, deponuzdaki olaylara (\u00f6rne\u011fin, bir push veya pull request) yan\u0131t olarak i\u015f ak\u0131\u015flar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan esnek bir otomasyon platformudur.<\/p>\n<h3>GitHub Actions Nedir ve Neden Kullanmal\u0131y\u0131z?<\/h3>\n<p>GitHub Actions, do\u011frudan GitHub deponuzda CI\/CD i\u015f ak\u0131\u015flar\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar. Bu i\u015f ak\u0131\u015flar\u0131, genellikle YAML dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla tan\u0131mlan\u0131r ve bir veya daha fazla ad\u0131m (ad\u0131m), i\u015f (job) ve eylem (action) i\u00e7erir. GitHub Actions'\u0131 kullanman\u0131n ba\u015fl\u0131ca faydalar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Depo Entegrasyonu:<\/strong> \u0130\u015f ak\u0131\u015flar\u0131n\u0131z do\u011frudan kodunuzla ayn\u0131 deponun i\u00e7inde ya\u015far. Bu, \"yap\u0131land\u0131rma kaymas\u0131\" riskini azalt\u0131r ve kod ile da\u011f\u0131t\u0131m aras\u0131ndaki senkronizasyonu art\u0131r\u0131r.<\/li>\n<li><strong>Geni\u015f Ekosistem:<\/strong> Terraform da\u011f\u0131t\u0131m\u0131, Docker imaj\u0131 olu\u015fturma, testleri \u00e7al\u0131\u015ft\u0131rma gibi \u00e7e\u015fitli g\u00f6revler i\u00e7in binlerce haz\u0131r eylem (action) mevcuttur.<\/li>\n<li><strong>Otomasyon:<\/strong> Her kod de\u011fi\u015fikli\u011finde otomatik testler ve da\u011f\u0131t\u0131mlar \u00e7al\u0131\u015ft\u0131rarak manuel hatalar\u0131 azalt\u0131r ve da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>\u00dccretsiz Katman:<\/strong> GitHub, a\u00e7\u0131k kaynak projeleri ve k\u00fc\u00e7\u00fck ekipler i\u00e7in c\u00f6mert bir \u00fccretsiz kullan\u0131m katman\u0131 sunar.<\/li>\n<\/ul>\n<h3>Azure ile Kimlik Do\u011frulama ve GitHub Actions \u0130\u015f Ak\u0131\u015f\u0131<\/h3>\n<p>GitHub Actions'\u0131n Azure'da kaynaklar\u0131 y\u00f6netebilmesi i\u00e7in Azure'a kimlik do\u011frulamas\u0131 yapmas\u0131 gerekir. Daha \u00f6nce olu\u015fturdu\u011fumuz Service Principal'\u0131 bu ama\u00e7la kullanabiliriz. Service Principal'\u0131n kimlik bilgilerini GitHub Actions'a g\u00fcvenli bir \u015fekilde aktarmak i\u00e7in GitHub Secrets'\u0131 kullanmak en iyi y\u00f6ntemdir.<\/p>\n<p>GitHub deponuzda <strong>Settings > Secrets > Actions<\/strong> yolunu izleyerek yeni bir repo secret olu\u015fturmal\u0131s\u0131n\u0131z. A\u015fa\u011f\u0131daki s\u0131rlar\u0131 ekleyin:<\/p>\n<ul>\n<li><code>AZURE_CLIENT_ID<\/code>: Service Principal'\u0131n\u0131z\u0131n <code>appId<\/code> de\u011feri.<\/li>\n<li><code>AZURE_CLIENT_SECRET<\/code>: Service Principal'\u0131n\u0131z\u0131n <code>password<\/code> de\u011feri.<\/li>\n<li><code>AZURE_TENANT_ID<\/code>: Azure kirac\u0131n\u0131z\u0131n (tenant) ID'si.<\/li>\n<li><code>AZURE_SUBSCRIPTION_ID<\/code>: Azure aboneli\u011finizin ID'si.<\/li>\n<\/ul>\n<p>Bu s\u0131rlar\u0131 kullanarak, GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131z, Azure'a g\u00fcvenli bir \u015fekilde kimlik do\u011frulamas\u0131 yapabilir.<\/p>\n<h3>Basit Bir GitHub Actions \u0130\u015f Ak\u0131\u015f\u0131 \u00d6rne\u011fi<\/h3>\n<p>\u015eimdi Terraform kodumuzu otomatik olarak da\u011f\u0131tacak basit bir i\u015f ak\u0131\u015f\u0131 olu\u015ftural\u0131m. Deponuzda <code>.github\/workflows\/main.yml<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-yaml\">\n    name: Terraform Azure VMSS CI\/CD\n\n    on:\n      push:\n        branches:\n          - main # main branch'ine yap\u0131lan her push'ta tetikle\n      pull_request:\n        branches:\n          - main # main branch'ine yap\u0131lan her pull request'te tetikle\n\n    env:\n      TF_VAR_admin_password: ${{ secrets.VM_ADMIN_PASSWORD }} # VM i\u00e7in y\u00f6netici \u015fifresi (GitHub Secret'tan)\n\n    jobs:\n      terraform:\n        name: 'Terraform Apply'\n        runs-on: ubuntu-latest\n        environment: production # Ortam tan\u0131mlamas\u0131 (iste\u011fe ba\u011fl\u0131, daha geli\u015fmi\u015f senaryolar i\u00e7in)\n\n        steps:\n        - name: Checkout Code\n          uses: actions\/checkout@v3\n\n        - name: Setup Terraform\n          uses: hashicorp\/setup-terraform@v2\n          with:\n            terraform_version: 1.5.0 # Kullan\u0131lacak Terraform s\u00fcr\u00fcm\u00fc\n\n        - name: Azure Login\n          uses: azure\/login@v1\n          with:\n            client-id: ${{ secrets.AZURE_CLIENT_ID }}\n            tenant-id: ${{ secrets.AZURE_TENANT_ID }}\n            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}\n\n        - name: Terraform Init\n          id: init\n          run: terraform init -backend-config=\"resource_group_name=tfstate-rg\" -backend-config=\"storage_account_name=tfstatesa12345\" -backend-config=\"container_name=tfstate\" -backend-config=\"key=vmss-production.tfstate\"\n\n        - name: Terraform Format\n          id: fmt\n          run: terraform fmt -check\n\n        - name: Terraform Validate\n          id: validate\n          run: terraform validate -no-color\n\n        - name: Terraform Plan\n          id: plan\n          run: terraform plan -no-color\n          # E\u011fer pull request ise, plan \u00e7\u0131kt\u0131s\u0131n\u0131 yorum olarak ekle\n          # if: github.event_name == 'pull_request'\n          # env:\n          #   GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n        - name: Terraform Apply\n          id: apply\n          if: github.ref == 'refs\/heads\/main' && github.event_name == 'push'\n          run: terraform apply -auto-approve -input=false -no-color\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015f ak\u0131\u015f\u0131:<\/p>\n<ul>\n<li><code>main<\/code> dal\u0131na yap\u0131lan her <code>push<\/code> veya <code>pull_request<\/code> olay\u0131nda tetiklenir.<\/li>\n<li>Kodu depolar.<\/li>\n<li>Terraform'u ayarlar.<\/li>\n<li>Azure'a Service Principal kullanarak giri\u015f yapar.<\/li>\n<li><code>terraform init<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak uzak durumu (Azure Blob Storage) yap\u0131land\u0131r\u0131r.<\/li>\n<li><code>terraform fmt -check<\/code> ile kod bi\u00e7imlendirme kontrol\u00fc yapar.<\/li>\n<li><code>terraform validate<\/code> ile yap\u0131land\u0131rma dosyas\u0131n\u0131n ge\u00e7erlili\u011fini kontrol eder.<\/li>\n<li><code>terraform plan<\/code> ile yap\u0131lacak de\u011fi\u015fiklikleri g\u00f6sterir.<\/li>\n<li>Sadece <code>main<\/code> dal\u0131na yap\u0131lan <code>push<\/code> i\u015flemlerinde <code>terraform apply -auto-approve<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak de\u011fi\u015fiklikleri otomatik olarak da\u011f\u0131t\u0131r. Bu, \u00fcretim ortam\u0131na otomatik da\u011f\u0131t\u0131m i\u00e7in g\u00fc\u00e7l\u00fc bir yakla\u015f\u0131md\u0131r.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: \u00dcretim ortamlar\u0131nda <code>-auto-approve<\/code> parametresini do\u011frudan <code>main<\/code> dal\u0131na yap\u0131lan her <code>push<\/code> i\u015flemi i\u00e7in kullanmak riskli olabilir. Genellikle, <code>terraform plan<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 bir insan incelemesinden ge\u00e7irmek ve onaylamak i\u00e7in Pull Request yorumlar\u0131na eklemek veya ayr\u0131 bir manuel onay ad\u0131m\u0131 eklemek daha g\u00fcvenli bir yakla\u015f\u0131md\u0131r.\n    <\/div>\n<p>Bu i\u015f ak\u0131\u015f\u0131, altyap\u0131 kodunuzun versiyonlanmas\u0131n\u0131 ve da\u011f\u0131t\u0131m\u0131n\u0131 tamamen otomatik hale getirerek DevOps s\u00fcre\u00e7lerinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r ve insan hatas\u0131 riskini minimize eder. B\u00f6ylece, geli\u015ftirme ekipleri altyap\u0131 da\u011f\u0131t\u0131m\u0131n\u0131 beklemek yerine daha h\u0131zl\u0131 bir \u015fekilde yeni \u00f6zellikler \u00fczerinde \u00e7al\u0131\u015fabilirler.<\/p>\n<h2>Geli\u015fmi\u015f Konfig\u00fcrasyonlar ve En \u0130yi Uygulamalar<\/h2>\n<p>Terraform ve Azure VMSS ile temel bir da\u011f\u0131t\u0131m yapmay\u0131 \u00f6\u011frendik. \u015eimdi ise daha karma\u015f\u0131k senaryolar ve \u00fcretim ortamlar\u0131 i\u00e7in gerekli olabilecek baz\u0131 ileri d\u00fczey konfig\u00fcrasyonlara ve en iyi uygulamalara g\u00f6z atal\u0131m. Bu teknikler, altyap\u0131n\u0131z\u0131n daha esnek, g\u00fcvenli ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>\u00d6zel Sanal Makine \u0130majlar\u0131 Kullan\u0131m\u0131<\/h3>\n<p>Yukar\u0131daki \u00f6rnekte Azure'un standart Ubuntu imaj\u0131n\u0131 kulland\u0131k. Ancak genellikle uygulamalar\u0131n\u0131z\u0131n belirli ba\u011f\u0131ml\u0131l\u0131klar\u0131 veya \u00f6zel yap\u0131land\u0131rmalar\u0131 olur. Bu durumlarda, \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f \u00f6zel bir sanal makine imaj\u0131 (Custom Image) kullanmak mant\u0131kl\u0131d\u0131r. Azure Compute Gallery (\u00f6nceden Shared Image Gallery), \u00f6zel imajlar\u0131n\u0131z\u0131 y\u00f6netmek ve VMSS taraf\u0131ndan kullan\u0131labilir hale getirmek i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<p>\u00d6zel bir imaj kullanmak i\u00e7in, <code>azurerm_linux_virtual_machine_scale_set<\/code> kayna\u011f\u0131n\u0131n <code>source_image_reference<\/code> blo\u011funu a\u015fa\u011f\u0131daki gibi de\u011fi\u015ftirebilirsiniz:<\/p>\n<pre><code class=\"language-hcl\">\n    resource \"azurerm_linux_virtual_machine_scale_set\" \"vmss\" {\n      # ... di\u011fer ayarlar ...\n\n      source_image_id = \"\/subscriptions\/YOUR_SUBSCRIPTION_ID\/resourceGroups\/YOUR_RG\/providers\/Microsoft.Compute\/galleries\/YOUR_GALLERY_NAME\/images\/YOUR_IMAGE_DEFINITION_NAME\/versions\/YOUR_IMAGE_VERSION\"\n\n      # Veya Managed Image kullanmak i\u00e7in:\n      # source_image_id = azurerm_image.my_custom_image.id\n\n      # ... di\u011fer ayarlar ...\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m, VMSS \u00f6rneklerinizin her zaman ayn\u0131 temel yap\u0131land\u0131rma ile ba\u015flat\u0131lmas\u0131n\u0131 garanti eder ve ba\u015flang\u0131\u00e7 s\u00fcrelerini k\u0131salt\u0131r, \u00e7\u00fcnk\u00fc <code>custom_data<\/code> i\u00e7indeki betiklerin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na gerek kalmaz.<\/p>\n<h3>Geli\u015fmi\u015f \u00d6l\u00e7eklendirme Politikalar\u0131 ve Metrikler<\/h3>\n<p>\u00d6rne\u011fimizde VMSS'yi sabit bir \u00f6rnek say\u0131s\u0131yla ba\u015flatt\u0131k. Ancak VMSS'nin g\u00fcc\u00fc, otomatik \u00f6l\u00e7eklendirme yeteneklerinden gelir. <code>azurerm_monitor_autoscale_setting<\/code> kayna\u011f\u0131n\u0131 kullanarak, CPU kullan\u0131m\u0131, bellek t\u00fcketimi, a\u011f trafi\u011fi veya Azure Kuyruk depolama uzunlu\u011fu gibi metrikleri temel alan karma\u015f\u0131k \u00f6l\u00e7eklendirme kurallar\u0131 tan\u0131mlayabilirsiniz.<\/p>\n<pre><code class=\"language-hcl\">\n    resource \"azurerm_monitor_autoscale_setting\" \"vmss_autoscale\" {\n      name                = \"vmss-autoscale-profile\"\n      resource_group_name = azurerm_resource_group.rg.name\n      location            = azurerm_resource_group.rg.location\n      target_resource_id  = azurerm_linux_virtual_machine_scale_set.vmss.id\n\n      profile {\n        name = \"default\"\n        capacity {\n          default = 2\n          minimum = 2\n          maximum = 5\n        }\n\n        rule {\n          metric_trigger {\n            metric_name        = \"Percentage CPU\"\n            metric_resource_id = azurerm_linux_virtual_machine_scale_set.vmss.id\n            time_grain         = \"PT1M\"\n            statistic          = \"Average\"\n            time_window        = \"PT5M\"\n            aggregation        = \"Average\"\n            operator           = \"GreaterThan\"\n            threshold          = 75\n          }\n          scale_action {\n            direction = \"Increase\"\n            type      = \"ChangeCount\"\n            value     = 1\n            cooldown  = \"PT5M\"\n          }\n        }\n\n        rule {\n          metric_trigger {\n            metric_name        = \"Percentage CPU\"\n            metric_resource_id = azurerm_linux_virtual_machine_scale_set.vmss.id\n            time_grain         = \"PT1M\"\n            statistic          = \"Average\"\n            time_window        = \"PT5M\"\n            aggregation        = \"Average\"\n            operator           = \"LessThan\"\n            threshold          = 25\n          }\n          scale_action {\n            direction = \"Decrease\"\n            type      = \"ChangeCount\"\n            value     = 1\n            cooldown  = \"PT5M\"\n          }\n        }\n      }\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma, CPU kullan\u0131m\u0131 %75'in \u00fczerine \u00e7\u0131kt\u0131\u011f\u0131nda VMSS'ye bir \u00f6rnek ekler, %25'in alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde ise bir \u00f6rnek kald\u0131r\u0131r. Bu, uygulaman\u0131z\u0131n performans\u0131n\u0131 korurken maliyetleri optimize etmenin etkili bir yoludur.<\/p>\n<h3>Mod\u00fcler Yap\u0131land\u0131rma (Terraform Mod\u00fclleri)<\/h3>\n<p>Daha karma\u015f\u0131k altyap\u0131lar veya farkl\u0131 projelerde yeniden kullan\u0131labilir bile\u015fenler olu\u015fturmak istedi\u011finizde, Terraform mod\u00fclleri devreye girer. Mod\u00fcller, bir veya daha fazla kaynak tan\u0131m\u0131n\u0131 bir araya getirerek soyutlama sa\u011flar. \u00d6rne\u011fin, bir \"a\u011f\" mod\u00fcl\u00fc bir VNet, alt a\u011flar ve g\u00fcvenlik gruplar\u0131n\u0131 paketleyebilir, veya bir \"vmss\" mod\u00fcl\u00fc \u00f6l\u00e7ek k\u00fcmesi, y\u00fck dengeleyici ve otomatik \u00f6l\u00e7eklendirme ayarlar\u0131n\u0131 i\u00e7erebilir.<\/p>\n<pre><code class=\"language-hcl\">\n    # \u00d6rnek bir mod\u00fcl \u00e7a\u011fr\u0131s\u0131\n    module \"web_vmss\" {\n      source = \".\/modules\/web-vmss\" # Yerel bir mod\u00fcl yolu\n      # source = \"Azure\/vmss\/azurerm\" # Terraform Registry'den bir mod\u00fcl\n      \n      resource_group_name = azurerm_resource_group.rg.name\n      location            = azurerm_resource_group.rg.location\n      vmss_name           = var.vmss_name\n      # ... di\u011fer mod\u00fcl de\u011fi\u015fkenleri ...\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Mod\u00fcller, kodunuzu daha okunabilir, y\u00f6netilebilir ve yeniden kullan\u0131labilir hale getirerek b\u00fcy\u00fck projelerde karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r.<\/p>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>Bulut altyap\u0131s\u0131 g\u00fcvenli\u011fi her zaman \u00f6ncelikli olmal\u0131d\u0131r:<\/p>\n<ul>\n<li><strong>En Az Yetki Prensibi:<\/strong> Terraform'un Azure'a eri\u015fimi i\u00e7in kulland\u0131\u011f\u0131 Service Principal'a yaln\u0131zca ihtiya\u00e7 duydu\u011fu minimum izinleri verin. \u00d6rne\u011fin, sadece kaynak olu\u015fturma ve y\u00f6netme yetkisi, abonelik d\u00fczeyinde \"Katk\u0131da Bulunan\" rol\u00fcnden daha g\u00fcvenlidir.<\/li>\n<li><strong>Hassas Veri Y\u00f6netimi:<\/strong> \u015eifreler ve anahtarlar gibi hassas verileri do\u011frudan kodda veya Git deposunda tutmaktan ka\u00e7\u0131n\u0131n. GitHub Secrets, Azure Key Vault veya HashiCorp Vault gibi ara\u00e7lar\u0131 kullanarak bu verileri g\u00fcvenli bir \u015fekilde y\u00f6netin. Terraform'un <code>sensitive = true<\/code> de\u011fi\u015fken \u00f6zelli\u011fini kullan\u0131n.<\/li>\n<li><strong>A\u011f G\u00fcvenli\u011fi:<\/strong> A\u011f G\u00fcvenlik Gruplar\u0131 (NSG'ler) ve Azure G\u00fcvenlik Duvar\u0131 (Firewall) kullanarak sanal a\u011f trafi\u011fini s\u0131k\u0131 bir \u015fekilde kontrol edin. Yaln\u0131zca gerekli portlar\u0131 ve IP adreslerini a\u00e7\u0131n.<\/li>\n<li><strong>Denetim ve \u0130zleme:<\/strong> Da\u011f\u0131t\u0131lan kaynaklar\u0131 Azure Monitor ve Azure Log Analytics ile izleyerek performans ve g\u00fcvenlik anormalliklerini takip edin.<\/li>\n<li><strong>DevOps ve Mobil Uyumlu HTML:<\/strong> Olu\u015fturdu\u011funuz web uygulamalar\u0131 i\u00e7in mobil uyumlu tasar\u0131mlar kullan\u0131n. VMSS \u00fczerinde \u00e7al\u0131\u015fan web uygulamalar\u0131n\u0131z\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fc, farkl\u0131 cihazlarda (mobil, tablet, masa\u00fcst\u00fc) sorunsuz \u00e7al\u0131\u015fmal\u0131d\u0131r. Bu, CSS medya sorgular\u0131 (media queries) ile sa\u011flan\u0131r:\n<pre><code class=\"language-css\">\n    \/* \u00d6rnek Mobil Uyumlu CSS *\/\n    @media only screen and (max-width: 600px) {\n      body {\n        font-size: 14px;\n      }\n      .container {\n        width: 100%;\n        padding: 10px;\n      }\n    }\n    <\/pre>\n<p><\/code>\n    <\/li>\n<\/ul>\n<p>Bu geli\u015fmi\u015f konfig\u00fcrasyonlar ve en iyi uygulamalar, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmeleri da\u011f\u0131t\u0131mlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenli ve verimli hale getirecek, b\u00f6ylece uygulaman\u0131z\u0131n performans\u0131 ve kullan\u0131c\u0131 deneyimi \u00fczerinde olumlu bir etki yaratacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makale boyunca, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmeleri'nin (VMSS) ne oldu\u011funu, dinamik i\u015f y\u00fcklerini nas\u0131l kar\u015f\u0131lad\u0131\u011f\u0131n\u0131 ve y\u00fcksek eri\u015filebilirlik sa\u011flad\u0131\u011f\u0131n\u0131 detayl\u0131ca inceledik. Ard\u0131ndan, altyap\u0131y\u0131 kod olarak y\u00f6netme prensiplerini ve Terraform'un bu s\u00fcre\u00e7teki merkezi rol\u00fcn\u00fc ele ald\u0131k. Ad\u0131m ad\u0131m bir VMSS'nin Terraform ile nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 g\u00f6sterdik, gerekli a\u011f bile\u015fenlerinden y\u00fck dengeleyiciye kadar t\u00fcm ad\u0131mlar\u0131 kod \u00f6rnekleriyle destekledik. Altyap\u0131 kodumuzu GitHub'a ta\u015f\u0131man\u0131n faydalar\u0131n\u0131 ve versiyon kontrol\u00fcn\u00fcn \u00f6nemini vurgulad\u0131k, ayr\u0131ca GitHub Actions ile otomatik CI\/CD i\u015f ak\u0131\u015flar\u0131n\u0131n nas\u0131l kurulaca\u011f\u0131n\u0131 g\u00f6sterdik. Son olarak, \u00f6zel imajlar, geli\u015fmi\u015f \u00f6l\u00e7eklendirme politikalar\u0131 ve g\u00fcvenlik ipu\u00e7lar\u0131 gibi ileri d\u00fczey konulara de\u011findik.<\/p>\n<p>Terraform ile Azure VMSS'i da\u011f\u0131tmak ve bunu GitHub \u00fczerinde y\u00f6netmek, modern bulut altyap\u0131s\u0131 y\u00f6netiminin temel ta\u015flar\u0131ndand\u0131r. Bu yakla\u015f\u0131m, sadece altyap\u0131 da\u011f\u0131t\u0131m\u0131n\u0131 otomatikle\u015ftirmekle kalmaz, ayn\u0131 zamanda operasyonel maliyetleri d\u00fc\u015f\u00fcr\u00fcr, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131 art\u0131r\u0131r ve insan hatas\u0131 riskini minimize eder. Ekiplerin i\u015fbirli\u011fi yapmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r ve altyap\u0131n\u0131n tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti alt\u0131na al\u0131r. Gelecekte, daha karma\u015f\u0131k mimarileri y\u00f6netmek, \u00e7oklu bulut senaryolar\u0131n\u0131 ele almak ve geli\u015fmi\u015f izleme entegrasyonlar\u0131 kurmak i\u00e7in bu temel bilgilerden yola \u00e7\u0131kabilirsiniz. DevOps pratiklerinizi bir \u00fcst seviyeye ta\u015f\u0131mak ve bulut ortam\u0131n\u0131z\u0131n tam potansiyelini kullanmak i\u00e7in bu ara\u00e7lar\u0131 ve y\u00f6ntemleri benimsemek kritik \u00f6neme sahiptir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. VMSS'te disk \u015fifrelemesi nas\u0131l yap\u0131l\u0131r?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Azure VMSS'te disk \u015fifrelemesi i\u00e7in Azure Disk Encryption'\u0131 (ADE) kullanabilirsiniz. Terraform'da, <code>azurerm_virtual_machine_scale_set<\/code> kayna\u011f\u0131n\u0131n i\u00e7inde diskleri \u015fifrelemek i\u00e7in \u00f6zel uzant\u0131lar\u0131 veya y\u00f6netilen diskler i\u00e7in Key Vault ile entegrasyonu yap\u0131land\u0131rabilirsiniz. Ancak bu i\u015flem, kimlik do\u011frulama ve anahtar y\u00f6netimi nedeniyle ek yap\u0131land\u0131rmalar gerektirir. En kolay yolu, VMSS \u00f6rnekleriniz i\u00e7in disk \u015fifrelemesi yapabilen \u00f6nceden \u015fifrelenmi\u015f bir \u00f6zel imaj kullanmakt\u0131r.<\/p>\n<p><strong>2. Terraform durumu (state) g\u00fcvenli bir \u015fekilde nas\u0131l y\u00f6netilir?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Terraform durum dosyas\u0131 (<code>.tfstate<\/code>) hassas bilgiler i\u00e7erebilece\u011fi i\u00e7in yerel olarak saklanmamal\u0131 veya versiyon kontrol\u00fcne (GitHub'a) y\u00fcklenmemelidir. En iyi uygulama, Azure Blob Storage gibi uzak bir depolama hizmetini kullanmakt\u0131r. Bu, durumu merkezile\u015ftirir, ekipler aras\u0131nda payla\u015f\u0131labilir hale getirir ve e\u015fzamanl\u0131 de\u011fi\u015fiklikleri \u00f6nlemek i\u00e7in kilitleme mekanizmalar\u0131 sa\u011flar. <code>terraform init<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131rken uzak depolama ayarlar\u0131n\u0131 belirtmeniz gerekir.<\/p>\n<p><strong>3. \u00d6zel bir Linux da\u011f\u0131t\u0131m\u0131 veya Windows Server kullanabilir miyim?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Evet, kesinlikle kullanabilirsiniz. Terraform'daki <code>azurerm_linux_virtual_machine_scale_set<\/code> yerine <code>azurerm_windows_virtual_machine_scale_set<\/code> kayna\u011f\u0131n\u0131 kullanarak Windows Server tabanl\u0131 bir VMSS olu\u015fturabilirsiniz. Ayr\u0131ca, <code>source_image_reference<\/code> blo\u011funda istedi\u011finiz Linux da\u011f\u0131t\u0131m\u0131n\u0131n (\u00f6rne\u011fin, Debian, CentOS) yay\u0131mlay\u0131c\u0131, teklif, SKU ve s\u00fcr\u00fcm bilgilerini belirterek veya \u00f6zel bir Azure Compute Gallery (Shared Image Gallery) imaj\u0131 kullanarak istedi\u011finiz i\u015fletim sistemini da\u011f\u0131tabilirsiniz.<\/p>\n<p><strong>4. GitHub Actions ile birden fazla ortam\u0131 (dev, staging, prod) nas\u0131l y\u00f6netirim?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Birden fazla ortam\u0131 y\u00f6netmek i\u00e7in genellikle iki ana yakla\u015f\u0131m kullan\u0131l\u0131r:<\/p>\n<ol>\n<li><strong>Ayr\u0131 Dizeler\/Dallar:<\/strong> Her ortam i\u00e7in ayr\u0131 Terraform yap\u0131land\u0131rma dizinleri veya GitHub dallar\u0131 olu\u015fturabilirsiniz (\u00f6rn. <code>environments\/dev<\/code>, <code>environments\/prod<\/code>). GitHub Actions i\u015f ak\u0131\u015flar\u0131n\u0131z, hangi dalda veya dizinde de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131na g\u00f6re ilgili ortam\u0131 hedefleyebilir.<\/li>\n<li><strong>Terraform \u00c7al\u0131\u015fma Alanlar\u0131 (Workspaces):<\/strong> Terraform'un kendi i\u00e7inde \u00e7al\u0131\u015fma alanlar\u0131 olu\u015fturarak ayn\u0131 Terraform kodunu farkl\u0131 durum dosyalar\u0131yla birden fazla ortam i\u00e7in kullanabilirsiniz (<code>terraform workspace new dev<\/code>, <code>terraform workspace new prod<\/code>). Ancak, karma\u015f\u0131k ortamlar i\u00e7in ayr\u0131 dizeler genellikle daha \u015feffaf ve y\u00f6netilebilir kabul edilir.<\/li>\n<\/ol>\n<p>    Her ortam i\u00e7in farkl\u0131 GitHub Secrets ve Azure Service Principal'lar kullanarak kimlik do\u011frulamas\u0131n\u0131 ay\u0131rmak da \u00f6nemlidir.<\/p>\n<p><strong>5. Azure VMSS maliyetlerini nas\u0131l optimize edebilirim?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Maliyet optimizasyonu i\u00e7in birka\u00e7 y\u00f6ntem bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>Otomatik \u00d6l\u00e7eklendirme Kurallar\u0131:<\/strong> Etkili otomatik \u00f6l\u00e7eklendirme kurallar\u0131 tan\u0131mlayarak, yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda \u00f6rneklerin \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flay\u0131n. Gerekmedi\u011finde \u00f6rnekleri azalt\u0131n.<\/li>\n<li><strong>Sanal Makine Boyutu (SKU):<\/strong> \u0130\u015f y\u00fck\u00fcn\u00fcz i\u00e7in uygun en k\u00fc\u00e7\u00fck ve maliyet etkin sanal makine boyutunu se\u00e7in.<\/li>\n<li><strong>Azure Reserved Instances:<\/strong> Uzun s\u00fcreli (1 veya 3 y\u0131l) kullan\u0131m taahh\u00fcd\u00fc vererek sanal makine maliyetlerinde \u00f6nemli indirimler elde edebilirsiniz.<\/li>\n<li><strong>Spot Sanal Makineler:<\/strong> Kesintiye toleransl\u0131 i\u015f y\u00fckleri i\u00e7in (\u00f6rn. batch processing), Azure Spot Sanal Makineleri kullanarak \u00e7ok daha d\u00fc\u015f\u00fck maliyetlerle \u00f6rnekler \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<li><strong>Kaynaklar\u0131 Temizleme:<\/strong> Kullanmad\u0131\u011f\u0131n\u0131z test veya geli\u015ftirme ortamlar\u0131n\u0131 silmeyi unutmay\u0131n. Terraform'un <code>terraform destroy<\/code> komutu bu konuda size yard\u0131mc\u0131 olabilir.<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1405],"tags":[],"class_list":{"0":"post-31329","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-azure","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#039;a Y\u00fckleme<\/title>\n<meta name=\"description\" content=\"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub&#039;a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.\" \/>\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\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#039;a Y\u00fckleme\" \/>\n<meta property=\"og:description\" content=\"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub&#039;a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-08T15:03:06+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=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#8217;a Y\u00fckleme\",\"datePublished\":\"2025-10-08T15:03:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\"},\"wordCount\":4717,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Azure\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\",\"name\":\"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub'a Y\u00fckleme\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-08T15:03:06+00:00\",\"description\":\"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub'a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#8217;a Y\u00fckleme\"}]},{\"@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":"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub'a Y\u00fckleme","description":"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub'a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.","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\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/","og_locale":"tr_TR","og_type":"article","og_title":"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub'a Y\u00fckleme","og_description":"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub'a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-08T15:03:06+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#8217;a Y\u00fckleme","datePublished":"2025-10-08T15:03:06+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/"},"wordCount":4717,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Azure"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/","url":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/","name":"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub'a Y\u00fckleme","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-08T15:03:06+00:00","description":"Uygulamalar\u0131n\u0131z\u0131n dinamik trafik dalgalanmalar\u0131na ayak uydurmakta veya altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirmekte zorlan\u0131yor musunuz? G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 tempolu dijital d\u00fcnyas\u0131nda, bulut kaynaklar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netmek ve \u00f6l\u00e7eklendirmek kritik \u00f6neme sahiptir. Bu makale, Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmelerini (VMSS) Terraform ile otomatize etme ve altyap\u0131 kodunuzu GitHub'a g\u00fcvenle ta\u015f\u0131ma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klayarak, bu zorluklar\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacakt\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/azure-sanal-makine-olcek-kumesini-terraform-ile-dagitma-ve-githuba-yukleme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Azure Sanal Makine \u00d6l\u00e7ek K\u00fcmesini Terraform ile Da\u011f\u0131tma ve GitHub&#8217;a Y\u00fckleme"}]},{"@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\/31329","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=31329"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31329\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}