{"id":34616,"date":"2025-11-19T21:31:12","date_gmt":"2025-11-19T18:31:12","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/"},"modified":"2025-11-19T21:31:12","modified_gmt":"2025-11-19T18:31:12","slug":"cloudformation-explained-as-a-story-the-blueprint-of-cloudville","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/","title":{"rendered":"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille"},"content":{"rendered":"<p><body><\/p>\n<style>\n  \/* Genel stiller *\/\n  body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.7; color: #333; background-color: #f9f9f9; margin: 0; padding: 0; }\n  .container { max-width: 1200px; margin: 0 auto; padding: 20px; background-color: #ffffff; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.05); }\n  h2 { color: #2c3e50; border-bottom: 2px solid #e0e0e0; padding-bottom: 10px; margin-top: 35px; font-size: 2.2em; }\n  h3 { color: #34495e; margin-top: 25px; font-size: 1.7em; }\n  p { margin-bottom: 1em; }\n  ul { list-style-type: disc; margin-left: 20px; margin-bottom: 1em; }\n  ol { list-style-type: decimal; margin-left: 20px; margin-bottom: 1em; }\n  li { margin-bottom: 0.5em; }\n  pre { background-color: #2d2d2d; color: #f8f8f2; padding: 15px; border-radius: 5px; overflow-x: auto; margin-bottom: 20px; font-size: 0.9em; line-height: 1.4; }\n  code { font-family: 'Fira Code', 'Cascadia Code', Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; }\n  .expert-tip { background-color: #e8f5e9; border-left: 5px solid #4caf50; padding: 15px 20px; margin: 25px 0; font-style: italic; color: #388e3c; border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); }\n  table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }\n  th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }\n  th { background-color: #f2f2f2; font-weight: bold; }\n  .faq-section h3 { margin-top: 40px; border-bottom: 1px dashed #ddd; padding-bottom: 10px; }\n  .faq-section p { margin-bottom: 0.5em; }\n  .faq-question { font-weight: bold; color: #2c3e50; }<\/p>\n<p>  \/* Mobil uyumluluk i\u00e7in media query *\/\n  @media (max-width: 768px) {\n    .container { padding: 15px; }\n    h2 { font-size: 1.9em; padding-bottom: 8px; margin-top: 30px; }\n    h3 { font-size: 1.5em; margin-top: 20px; }\n    pre { font-size: 0.85em; padding: 10px; }\n    .expert-tip { padding: 12px 15px; margin: 20px 0; }\n  }\n  @media (max-width: 480px) {\n    body { font-size: 0.95em; }\n    .container { padding: 10px; }\n    h2 { font-size: 1.6em; }\n    h3 { font-size: 1.3em; }\n    ul, ol { margin-left: 15px; }\n    pre { font-size: 0.8em; }\n    th, td { padding: 8px; }\n  }\n<\/style>\n<div class=\"container\">\n<p>Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir &#8220;mimari plan&#8221; olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code &#8211; IaC) arac\u0131d\u0131r.<\/p>\n<p>Hayal edin, bir \u015fehir kuruyorsunuz: CloudVille. Bu \u015fehirde binalar (sunucular, veri tabanlar\u0131), yollar (a\u011f yap\u0131land\u0131rmalar\u0131), elektrik hatlar\u0131 (g\u00fcvenlik gruplar\u0131) gibi say\u0131s\u0131z yap\u0131 var. Geleneksel y\u00f6ntemlerle bu yap\u0131lar\u0131 tek tek, elle in\u015fa etmeye \u00e7al\u0131\u015fsan\u0131z, ne kadar zaman ve emek harcars\u0131n\u0131z? \u00dcstelik her binan\u0131n veya yolun in\u015faat\u0131n\u0131 denetlerken hatalar yapma riskiniz de cabas\u0131. CloudVille&#8217;in her yeni semtini veya binas\u0131n\u0131 in\u015fa ederken ayn\u0131 s\u00fcre\u00e7leri tekrar tekrar uygulamak zorunda kalmak, s\u00fcrd\u00fcr\u00fclemez bir durum olurdu.<\/p>\n<p>\u0130\u015fte bu karma\u015f\u0131k senaryoda AWS CloudFormation, CloudVille&#8217;in ba\u015f mimar\u0131 gibi davran\u0131r. Size, \u015fehrin t\u00fcm altyap\u0131s\u0131n\u0131 ayr\u0131nt\u0131l\u0131 bir \u015fekilde tan\u0131mlayabilece\u011finiz, kapsaml\u0131 bir &#8220;mimari plan&#8221; sunar. Bu plana biz &#8220;\u015fablon&#8221; diyoruz. Bu \u015fablonlar sayesinde, sadece birka\u00e7 sat\u0131r kodla devasa altyap\u0131lar kurabilir, g\u00fcncelleyebilir ve saniyeler i\u00e7inde yok edebilirsiniz. Bu durum, manuel olarak g\u00fcnler s\u00fcrecek i\u015fleri otomatize etmenin yan\u0131 s\u0131ra, insan hatas\u0131n\u0131 minimuma indirerek tutarl\u0131 ve g\u00fcvenilir bir altyap\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar.<\/p>\n<p>CloudFormation&#8217;\u0131n sa\u011flad\u0131\u011f\u0131 en b\u00fcy\u00fck avantajlardan biri, &#8220;Kod Olarak Altyap\u0131&#8221; (Infrastructure as Code &#8211; IaC) ilkesini benimsemesidir. Bu, altyap\u0131n\u0131z\u0131n yap\u0131land\u0131rmas\u0131n\u0131 kod dosyalar\u0131nda tutarak, versiyon kontrol sistemleri (Git gibi) ile takip edilebilir, g\u00f6zden ge\u00e7irilebilir ve otomatikle\u015ftirilebilir hale getirmeniz anlam\u0131na gelir. B\u00f6ylece geli\u015ftiriciler ve operasyon ekipleri ayn\u0131 &#8220;tek do\u011fruluk kayna\u011f\u0131&#8221; \u00fczerinde \u00e7al\u0131\u015fabilir, bu da i\u015fbirli\u011fini art\u0131r\u0131r ve &#8220;yap\u0131land\u0131rma kaymas\u0131&#8221; (configuration drift) gibi sorunlar\u0131 engeller. \u00d6rne\u011fin, bir test ortam\u0131n\u0131 kopyalamak istedi\u011finizde, plan\u0131 al\u0131p &#8220;kopyala-yap\u0131\u015ft\u0131r&#8221; demeniz yeterli. Art\u0131k manuel ayar yapman\u0131za gerek kalmaz.<\/p>\n<p>CloudFormation ile altyap\u0131n\u0131z\u0131 y\u00f6netmek, bir bak\u0131ma lego bloklar\u0131yla oynamaya benzer. Her bir AWS kayna\u011f\u0131 (EC2 instance, S3 bucket, RDS database vb.) bir lego blo\u011fudur ve siz bu bloklar\u0131 \u015fablonunuzda tan\u0131mlayarak istedi\u011finiz yap\u0131y\u0131 in\u015fa edersiniz. CloudFormation, bu plan\u0131 okuyarak sizin i\u00e7in do\u011fru bloklar\u0131 do\u011fru yerlere yerle\u015ftirir. \u0130\u015fin g\u00fczelli\u011fi, bu s\u00fcrecin tamamen otomatize edilmi\u015f olmas\u0131 ve herhangi bir kaynak i\u00e7in neyin nas\u0131l yap\u0131land\u0131r\u0131lmas\u0131 gerekti\u011fini sizin ad\u0131n\u0131za AWS&#8217;ye bildirmesidir. Bu, sadece da\u011f\u0131t\u0131m kolayl\u0131\u011f\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda kaynaklar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc y\u00f6netimini de basitle\u015ftirir. G\u00fcvenli bir \u015fekilde kaynaklar\u0131 olu\u015fturabilir, g\u00fcncelleyebilir ve silebilirsiniz, t\u00fcm bu i\u015flemler merkezi bir mekanizma \u00fczerinden y\u00f6netilir.<\/p>\n<h3>CloudFormation \u015eablonlar\u0131 Nas\u0131l Bir Mimari Plan Gibidir? YAML ve JSON&#8217;\u0131n Rol\u00fc Nedir?<\/h3>\n<p>CloudVille&#8217;in mimar\u0131 olarak, projelerinizin her biri i\u00e7in detayl\u0131 planlar haz\u0131rlaman\u0131z gerekir. CloudFormation&#8217;da bu planlar &#8220;\u015fablonlar&#8221; olarak adland\u0131r\u0131l\u0131r ve YAML (YAML Ain&#8217;t Markup Language) veya JSON (JavaScript Object Notation) formatlar\u0131nda yaz\u0131l\u0131rlar. Bu formatlar, hem insanlar taraf\u0131ndan okunmas\u0131 hem de makineler taraf\u0131ndan i\u015flenmesi kolay, hiyerar\u015fik veri yap\u0131lar\u0131 sunar. \u0130ki format da ayn\u0131 i\u015flevi g\u00f6r\u00fcrken, YAML genellikle daha az s\u00f6zdizimsel karma\u015f\u0131kl\u0131k i\u00e7erdi\u011fi i\u00e7in tercih edilir.<\/p>\n<p>Bir CloudFormation \u015fablonu, temel olarak be\u015f ana b\u00f6l\u00fcmden olu\u015fur. Ancak bir projede t\u00fcm bu b\u00f6l\u00fcmlerin olmas\u0131 zorunlu de\u011fildir, sadece ihtiyac\u0131n\u0131z olanlar\u0131 kullan\u0131rs\u0131n\u0131z. \u015eimdi bu ana b\u00f6l\u00fcmlere bir g\u00f6z atal\u0131m:<\/p>\n<ul>\n<li><strong>AWSTemplateFormatVersion:<\/strong> \u015eablonun kulland\u0131\u011f\u0131 CloudFormation \u015fablon format\u0131 versiyonunu belirtir. Genellikle &#8216;2010-09-09&#8217; olarak sabitlenmi\u015ftir. Bu, CloudFormation&#8217;a \u015fablonu do\u011fru \u015fekilde i\u015flemesi i\u00e7in bir ipucu verir.<\/li>\n<li><strong>Description:<\/strong> \u015eablonun ne i\u015fe yarad\u0131\u011f\u0131n\u0131 a\u00e7\u0131klayan iste\u011fe ba\u011fl\u0131 bir metin. Bu a\u00e7\u0131klama, \u015fablonu daha sonra ba\u015fka birine aktard\u0131\u011f\u0131n\u0131zda veya kendi notlar\u0131n\u0131z i\u00e7in \u00e7ok faydal\u0131d\u0131r.<\/li>\n<li><strong>Metadata:<\/strong> \u015eablonla ilgili ek bilgiler veya ara\u00e7lar i\u00e7in kullan\u0131lan iste\u011fe ba\u011fl\u0131 bir b\u00f6l\u00fcm. Genellikle g\u00f6rselle\u015ftirme veya d\u00fczenleme ara\u00e7lar\u0131 taraf\u0131ndan kullan\u0131l\u0131r.<\/li>\n<li><strong>Parameters:<\/strong> \u015eablonunuzu da\u011f\u0131t\u0131rken d\u0131\u015far\u0131dan alabilece\u011finiz de\u011ferleri tan\u0131mlar. \u00d6rne\u011fin, bir sunucunun tipi (t2.micro, t2.large) veya veri taban\u0131 ad\u0131 gibi de\u011fi\u015fkenleri buraya koyarak \u015fablonunuzu daha esnek hale getirebilirsiniz. Bu sayede ayn\u0131 \u015fablonu farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in ufak de\u011fi\u015fikliklerle kullanabilirsiniz.<\/li>\n<li><strong>Mappings:<\/strong> Ko\u015fullu parametre de\u011ferleri i\u00e7in bir anahtar\/de\u011fer \u00e7iftleri tablosu tan\u0131mlar. \u00d6rne\u011fin, bir b\u00f6lgeye (region) g\u00f6re farkl\u0131 AMI (Amazon Machine Image) ID&#8217;leri se\u00e7mek i\u00e7in kullan\u0131labilir. Bu, \u015fablonlar\u0131n farkl\u0131 AWS b\u00f6lgelerinde tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flaman\u0131n harika bir yoludur.<\/li>\n<li><strong>Conditions:<\/strong> Kaynaklar\u0131n belirli ko\u015fullara ba\u011fl\u0131 olarak olu\u015fturulup olu\u015fturulmayaca\u011f\u0131n\u0131 belirler. \u00d6rne\u011fin, bir &#8220;Ortam&#8221; parametresinin &#8220;Prod&#8221; olmas\u0131 durumunda bir kaynak olu\u015fturulmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, daha dinamik ve ak\u0131ll\u0131 \u015fablonlar olu\u015fturman\u0131za olanak tan\u0131r.<\/li>\n<li><strong>Resources:<\/strong> \u015eablonunuzda olu\u015fturmak istedi\u011finiz AWS kaynaklar\u0131n\u0131 (EC2, S3, RDS vb.) ve bunlar\u0131n \u00f6zelliklerini tan\u0131mlad\u0131\u011f\u0131n\u0131z ana b\u00f6l\u00fcmd\u00fcr. Her bir kayna\u011f\u0131n tipi (\u00f6rn: AWS::EC2::Instance) ve o kayna\u011fa \u00f6zg\u00fc \u00f6zellikler (\u00f6rn: InstanceType, ImageId) burada belirtilir. Buras\u0131, CloudVille&#8217;in as\u0131l binalar\u0131n\u0131n ve altyap\u0131s\u0131n\u0131n tan\u0131mland\u0131\u011f\u0131 yerdir.<\/li>\n<li><strong>Outputs:<\/strong> Olu\u015fturulan kaynaklardan d\u0131\u015far\u0131ya aktar\u0131lacak de\u011ferleri tan\u0131mlar. \u00d6rne\u011fin, bir EC2 sunucusunun genel IP adresi veya bir y\u00fck dengeleyicinin DNS ad\u0131 gibi bilgileri ba\u015fka bir CloudFormation stack&#8217;i veya bir ba\u015fka uygulama taraf\u0131ndan kullan\u0131lmak \u00fczere buradan eri\u015filebilir hale getirebilirsiniz. Bu, stack&#8217;ler aras\u0131nda ileti\u015fimi ve entegrasyonu sa\u011flar.<\/li>\n<\/ul>\n<p>Basit bir S3 kovas\u0131 olu\u015fturmak i\u00e7in haz\u0131rlanan bir CloudFormation \u015fablonu, bu yap\u0131n\u0131n nas\u0131l i\u015fledi\u011fine dair harika bir \u00f6rnektir:<\/p>\n<pre><code class=\"language-yaml\">\nAWSTemplateFormatVersion: '2010-09-09'\nDescription: Benim ilk CloudFormation \u015fablonum - Bir S3 Kovas\u0131 olu\u015fturur.\nResources:\n  MyS3Bucket:\n    Type: AWS::S3::Bucket\n    Properties:\n      BucketName: benim-ilk-cf-kovam-12345\n      Tags:\n        - Key: Environment\n          Value: Development\n        - Key: Project\n          Value: CloudVille\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fablon, <code>Resources<\/code> b\u00f6l\u00fcm\u00fcnde <code>MyS3Bucket<\/code> ad\u0131nda bir AWS::S3::Bucket kayna\u011f\u0131 tan\u0131mlar. Bu kovaya \u00f6zel bir isim (<code>BucketName<\/code>) ve iki adet etiket (<code>Tags<\/code>) atanm\u0131\u015ft\u0131r. CloudFormation bu \u015fablonu okudu\u011funda, AWS ortam\u0131n\u0131zda tam da bu \u00f6zelliklere sahip bir S3 kovas\u0131 olu\u015fturur. Bu, manuel konsol t\u0131klamalar\u0131yla bir S3 kovas\u0131 olu\u015fturmaktan \u00e7ok daha h\u0131zl\u0131, daha az hataya a\u00e7\u0131k ve tekrar edilebilir bir s\u00fcre\u00e7tir.<\/p>\n<h2>CloudVille'i Ad\u0131m Ad\u0131m \u0130n\u015fa Etmek: CloudFormation Stack'leri Nas\u0131l Y\u00f6netilir?<\/h2>\n<p>\u015eablonunuz art\u0131k CloudVille'in bir par\u00e7as\u0131 i\u00e7in mimari plan\u0131n\u0131z. Peki, bu plan\u0131 nas\u0131l hayata ge\u00e7ireceksiniz? \u0130\u015fte burada \"stack\" kavram\u0131 devreye giriyor. Bir CloudFormation stack'i, \u015fablonunuzda tan\u0131mlanan t\u00fcm AWS kaynaklar\u0131n\u0131n bir toplulu\u011fudur. \u015eablonunuzu CloudFormation hizmetine y\u00fckledi\u011finizde, bu \u015fablon bir \"stack\" olarak da\u011f\u0131t\u0131l\u0131r ve t\u00fcm kaynaklar sizin ad\u0131n\u0131za olu\u015fturulur.<\/p>\n<p>Bir stack olu\u015fturma s\u00fcreci genellikle a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 i\u00e7erir:<\/p>\n<ol>\n<li><strong>\u015eablonu Haz\u0131rlama:<\/strong> Yukar\u0131daki \u00f6rnekte oldu\u011fu gibi bir YAML veya JSON \u015fablonu yazars\u0131n\u0131z. Bu \u015fablon, istedi\u011finiz kaynaklar\u0131 ve \u00f6zelliklerini i\u00e7ermelidir.<\/li>\n<li><strong>Stack Olu\u015fturma:<\/strong>\n<ul>\n<li><strong>AWS Konsolu \u00dczerinden:<\/strong> AWS CloudFormation servisine gidip \"Create stack\" (Stack olu\u015ftur) d\u00fc\u011fmesine t\u0131klars\u0131n\u0131z. \u015eablon dosyan\u0131z\u0131 y\u00fcklersiniz, stack'inize bir isim verirsiniz, varsa parametre de\u011ferlerini girersiniz ve son olarak stack'i olu\u015fturursunuz.<\/li>\n<li><strong>AWS CLI (Command Line Interface) \u00dczerinden:<\/strong> Daha otomatize ve komut sat\u0131r\u0131 odakl\u0131 bir yakla\u015f\u0131m i\u00e7in AWS CLI kullanabilirsiniz. Bu y\u00f6ntem, CI\/CD boru hatlar\u0131 i\u00e7in olduk\u00e7a yayg\u0131nd\u0131r.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">\naws cloudformation create-stack \\\n--stack-name MyWebServerStack \\\n--template-body file:\/\/my-web-server.yaml \\\n--parameters ParameterKey=KeyName,ParameterValue=MyKeyPair ParameterKey=InstanceType,ParameterValue=t2.small \\\n--region us-east-1\n<\/pre>\n<p><\/code><\/p>\n<p>Stack olu\u015fturuldu\u011funda, CloudFormation her bir kayna\u011f\u0131 belirtilen \u00f6zelliklerle AWS'de provision etmeye ba\u015flar. Bu s\u00fcre\u00e7te stack'in durumu <code>CREATE_IN_PROGRESS<\/code>'ten <code>CREATE_COMPLETE<\/code>'e d\u00f6n\u00fc\u015f\u00fcr. E\u011fer bir hata olursa, CloudFormation otomatik olarak t\u00fcm olu\u015fturulan kaynaklar\u0131 geri al\u0131r (rollback yapar), bu da k\u0131smen da\u011f\u0131t\u0131lm\u0131\u015f, tutars\u0131z bir ortam riskini ortadan kald\u0131r\u0131r.<\/p>\n<p>Bir \u00f6rnek senaryo d\u00fc\u015f\u00fcnelim: CloudVille'de basit bir web uygulamas\u0131 (statik i\u00e7erik bar\u0131nd\u0131ran bir web sitesi) da\u011f\u0131tmak istiyorsunuz. Bunun i\u00e7in bir EC2 sunucusu, bu sunucuya eri\u015fimi kontrol edecek bir G\u00fcvenlik Grubu (Security Group) ve belki de web sitesi dosyalar\u0131n\u0131 depolamak i\u00e7in bir S3 kovas\u0131 gerekecek. \u0130\u015fte bu kaynaklar\u0131 CloudFormation ile nas\u0131l bir araya getirebilirsiniz:<\/p>\n<pre><code class=\"language-yaml\">\nAWSTemplateFormatVersion: '2010-09-09'\nDescription: Basit bir EC2 sunucusu ve g\u00fcvenlik grubu ile statik bir web sitesi da\u011f\u0131t\u0131r.\nParameters:\n  KeyName:\n    Description: SSH ba\u011flant\u0131s\u0131 i\u00e7in anahtar \u00e7iftinin ad\u0131.\n    Type: AWS::EC2::KeyPair::KeyName\n  InstanceType:\n    Description: EC2 \u00f6rnek tipi (t2.micro, t2.small vb.).\n    Type: String\n    Default: t2.micro\n    AllowedValues:\n      - t2.micro\n      - t2.small\n      - t3.micro\n      - t3.small\n  LatestAmiId:\n    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'\n    Default: '\/aws\/service\/ami-amazon-linux-latest\/amzn2-ami-hvm-x86_64-gp2' # En son Amazon Linux 2 AMI\nResources:\n  WebServerSecurityGroup:\n    Type: AWS::EC2::SecurityGroup\n    Properties:\n      GroupDescription: HTTP (80) ve SSH (22) trafi\u011fine izin ver.\n      SecurityGroupIngress:\n        - IpProtocol: tcp\n          FromPort: 22\n          ToPort: 22\n          CidrIp: 0.0.0.0\/0 # Sadece belirli bir IP aral\u0131\u011f\u0131ndan SSH eri\u015fimine izin vermek g\u00fcvenlik i\u00e7in daha iyidir.\n        - IpProtocol: tcp\n          FromPort: 80\n          ToPort: 80\n          CidrIp: 0.0.0.0\/0 # T\u00fcm IP'lerden HTTP eri\u015fimine izin ver\n      Tags:\n        - Key: Name\n          Value: WebServerSG\n  WebServerInstance:\n    Type: AWS::EC2::Instance\n    Properties:\n      ImageId: !Ref LatestAmiId # Parameter b\u00f6l\u00fcm\u00fcnden gelen AMI ID\n      InstanceType: !Ref InstanceType # Parameter b\u00f6l\u00fcm\u00fcnden gelen Instance Type\n      KeyName: !Ref KeyName # SSH eri\u015fimi i\u00e7in anahtar ad\u0131\n      SecurityGroupIds:\n        - !GetAtt WebServerSecurityGroup.GroupId # G\u00fcvenlik grubunun ID'sini al\n      UserData: # Sunucu ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015facak komutlar\n        Fn::Base64: |\n          #!\/bin\/bash\n          yum update -y\n          yum install -y httpd # Apache web sunucusunu kur\n          systemctl start httpd # Apache'yi ba\u015flat\n          systemctl enable httpd # Sistem ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik ba\u015flamas\u0131n\u0131 sa\u011fla\n          echo \"<h1>Merhaba CloudVille! Web Sitemiz \u00c7al\u0131\u015f\u0131yor!<\/h1><p>CloudFormation ile da\u011f\u0131t\u0131ld\u0131.<\/p>\" > \/var\/www\/html\/index.html # Basit bir HTML sayfas\u0131 olu\u015ftur\n      Tags:\n        - Key: Name\n          Value: MyCloudVilleWebServer\nOutputs:\n  InstancePublicIp:\n    Description: EC2 \u00f6rne\u011finin genel IP adresi.\n    Value: !GetAtt WebServerInstance.PublicIp\n  WebsiteURL:\n    Description: Web sunucusunun URL'si.\n    Value: !Sub http:\/\/${WebServerInstance.PublicDnsName}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fablonu da\u011f\u0131tt\u0131\u011f\u0131n\u0131zda:<\/p>\n<ul>\n<li>CloudFormation, <code>WebServerSecurityGroup<\/code> ad\u0131nda bir g\u00fcvenlik grubu olu\u015fturur ve 22 (SSH) ile 80 (HTTP) portlar\u0131na t\u00fcm internetten eri\u015fime izin verir.<\/li>\n<li>Ard\u0131ndan <code>WebServerInstance<\/code> ad\u0131nda bir EC2 sunucusu ba\u015flat\u0131r. Bu sunucu, belirtilen anahtar \u00e7iftini kullanarak SSH eri\u015fimine izin verir, do\u011fru g\u00fcvenlik grubuna atan\u0131r ve <code>UserData<\/code> k\u0131sm\u0131ndaki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak Apache web sunucusunu kurar ve basit bir HTML sayfas\u0131 yay\u0131nlar.<\/li>\n<li>Son olarak, <code>Outputs<\/code> b\u00f6l\u00fcm\u00fc, olu\u015fturulan EC2 sunucusunun genel IP adresini ve DNS ad\u0131n\u0131 size geri d\u00f6nd\u00fcr\u00fcr, b\u00f6ylece web sitenize kolayca eri\u015febilirsiniz.<\/li>\n<\/ul>\n<p>Bu \u00f6rnek, CloudFormation'\u0131n sadece kaynak olu\u015fturmakla kalmay\u0131p, bu kaynaklar\u0131n ba\u015flang\u0131\u00e7 yap\u0131land\u0131rmalar\u0131n\u0131 da otomatikle\u015ftirebildi\u011fini g\u00f6sterir. Bu, CloudVille'i in\u015fa ederken her tu\u011flan\u0131n yerini ve rengini tek tek belirlemek yerine, t\u00fcm bir binan\u0131n \u00e7izimini verip in\u015faat ekibinin gerisini halletmesine benzer.<\/p>\n<h3>CloudVille'in S\u00fcrekli Geli\u015fimi: Stack G\u00fcncellemeleri ve De\u011fi\u015fiklik Setleri Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>CloudVille'i bir kez in\u015fa ettikten sonra, ihtiya\u00e7lar de\u011fi\u015febilir. Yeni binalar eklemeniz, mevcutlar\u0131n kapasitesini art\u0131rman\u0131z veya baz\u0131lar\u0131n\u0131 tamamen y\u0131kman\u0131z gerekebilir. CloudFormation, bu de\u011fi\u015fiklikleri y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc mekanizmalar sunar. \u0130\u015fte burada stack g\u00fcncellemeleri ve de\u011fi\u015fiklik setleri (Change Sets) devreye girer.<\/p>\n<p>Bir stack'i g\u00fcncellemek, mevcut bir \u015fablonu veya \u015fablondaki parametreleri de\u011fi\u015ftirerek CloudFormation'\u0131n mevcut stack'inize yeni kaynaklar eklemesini, mevcutlar\u0131 de\u011fi\u015ftirmesini veya silmesini sa\u011flamakt\u0131r. Bu, altyap\u0131n\u0131z\u0131n zaman i\u00e7inde evrim ge\u00e7irmesine olanak tan\u0131r. \u00d6rne\u011fin, web sunucunuzun tipini <code>t2.micro<\/code>'dan <code>t2.medium<\/code>'a y\u00fckseltmek veya web uygulaman\u0131za yeni bir S3 kovas\u0131 eklemek isteyebilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\naws cloudformation update-stack \\\n--stack-name MyWebServerStack \\\n--template-body file:\/\/updated-web-server.yaml \\\n--parameters ParameterKey=KeyName,ParameterValue=MyKeyPair ParameterKey=InstanceType,ParameterValue=t2.medium \\\n--region us-east-1\n<\/pre>\n<p><\/code><\/p>\n<p>Ancak, do\u011frudan bir g\u00fcncelleme yapmak bazen riskli olabilir, \u00e7\u00fcnk\u00fc tam olarak hangi de\u011fi\u015fikliklerin yap\u0131laca\u011f\u0131n\u0131 g\u00f6remeyebilirsiniz. Yanl\u0131\u015fl\u0131kla kritik bir kayna\u011f\u0131 silmek veya beklenmedik bir kesinti ya\u015famak istemezsiniz. \u0130\u015fte bu noktada CloudFormation'\u0131n \"De\u011fi\u015fiklik Setleri\" \u00f6zelli\u011fi kurtar\u0131c\u0131 rol oynar. Bir de\u011fi\u015fiklik seti, uygulaman\u0131z planlanan de\u011fi\u015fiklikleri ger\u00e7ekte uygulamadan \u00f6nce, mevcut stack ile yeni \u015fablon aras\u0131ndaki farklar\u0131 \u00f6nizlemenizi sa\u011flayan bir mekanizmad\u0131r. Bu, bir mimar\u0131n yeni bir plan\u0131 uygulamadan \u00f6nce sanal bir model \u00fczerinde deneme yapmas\u0131na benzer.<\/p>\n<p>Bir de\u011fi\u015fiklik seti olu\u015fturdu\u011funuzda, CloudFormation size hangi kaynaklar\u0131n olu\u015fturulaca\u011f\u0131n\u0131, de\u011fi\u015ftirilece\u011fini veya silinece\u011fini detayl\u0131 bir \u015fekilde g\u00f6sterir. Ayr\u0131ca, her bir de\u011fi\u015fiklik i\u00e7in, \u00f6rne\u011fin bir EC2 \u00f6rne\u011finin hangi \u00f6zelli\u011finin de\u011fi\u015ftirilece\u011fi (\u00f6rn: InstanceType) gibi spesifik bilgileri de sunar. Bu \u00f6nizleme sayesinde, potansiyel riskleri ve etkileri \u00f6nceden g\u00f6rebilir, gerekirse \u015fablonunuzda d\u00fczeltmeler yapabilirsiniz. De\u011fi\u015fiklik setini inceledikten ve onaylad\u0131ktan sonra, onu y\u00fcr\u00fct\u00fcr (execute) ve de\u011fi\u015fiklikleriniz CloudFormation taraf\u0131ndan uygulan\u0131r. Bu, hatalar\u0131 minimize eden ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerine g\u00fcven katan kritik bir g\u00fcvenlik a\u011f\u0131d\u0131r.<\/p>\n<p>Ayr\u0131ca, bazen kaynaklar\u0131n\u0131z\u0131n \"yap\u0131land\u0131rma kaymas\u0131\" (configuration drift) ya\u015fayabilir. Bu, manuel m\u00fcdahaleler nedeniyle CloudFormation \u015fablonunuzda tan\u0131mlanan ideal durum ile AWS'deki ger\u00e7ek kaynak durumu aras\u0131nda bir fark olu\u015fmas\u0131d\u0131r. CloudFormation'\u0131n \"drift detection\" (kayma tespiti) \u00f6zelli\u011fi, stack'inizdeki kaynaklar\u0131n \u015fablonunuzdaki tan\u0131mla uyu\u015fup uyu\u015fmad\u0131\u011f\u0131n\u0131 kontrol etmenizi sa\u011flar. E\u011fer bir kayma tespit edilirse, hangi kaynaklar\u0131n de\u011fi\u015fti\u011fini ve nas\u0131l de\u011fi\u015fti\u011fini size bildirir, b\u00f6ylece manuel de\u011fi\u015fiklikleri kolayca tan\u0131mlayabilir ve \u015fablonunuzu g\u00fcncelleyerek bu kaymay\u0131 d\u00fczeltebilirsiniz.<\/p>\n<p>\u00d6zetle, stack g\u00fcncellemeleri ve de\u011fi\u015fiklik setleri, CloudVille'in dinamik ihtiya\u00e7lar\u0131na yan\u0131t vermek i\u00e7in vazge\u00e7ilmez ara\u00e7lard\u0131r. Bu \u00f6zellikler sayesinde, altyap\u0131n\u0131z\u0131n s\u00fcrekli geli\u015fmesini sa\u011flarken, ayn\u0131 zamanda istikrar\u0131 ve g\u00fcvenilirli\u011fi de koruyabilirsiniz. Bu durum, s\u00fcrekli de\u011fi\u015fen bir \u015fehir plan\u0131n\u0131, her zaman en g\u00fcncel ve g\u00fcvenli haliyle tutmaya benzer.<\/p>\n<h2>CloudVille'in Ak\u0131ll\u0131 Tasar\u0131m\u0131: \u0130leri D\u00fczey CloudFormation Teknikleri Nelerdir?<\/h2>\n<p>CloudFormation ile temel bir altyap\u0131 olu\u015fturmak basitken, karma\u015f\u0131k, kurumsal d\u00fczeyde \u00e7\u00f6z\u00fcmler tasarlamak daha ileri teknikler gerektirir. CloudVille b\u00fcy\u00fcd\u00fck\u00e7e, binalar\u0131 daha d\u00fczenli ve y\u00f6netilebilir hale getirmek i\u00e7in daha geli\u015fmi\u015f mimari yakla\u015f\u0131mlara ihtiya\u00e7 duyars\u0131n\u0131z. \u0130\u015fte CloudFormation'da size bu konuda yard\u0131mc\u0131 olacak baz\u0131 ileri d\u00fczey teknikler:<\/p>\n<h3>\u0130\u00e7 \u0130\u00e7e Stack'ler (Nested Stacks) ve Mod\u00fcler Yakla\u015f\u0131m<\/h3>\n<p>B\u00fcy\u00fck ve karma\u015f\u0131k CloudFormation \u015fablonlar\u0131, t\u0131pk\u0131 tek bir devasa bina plan\u0131 gibi, y\u00f6netimi ve okunmas\u0131 zor olabilir. \u0130\u00e7 i\u00e7e stack'ler, bu sorunu \u00e7\u00f6zmek i\u00e7in \u015fablonlar\u0131n\u0131z\u0131 daha k\u00fc\u00e7\u00fck, yeniden kullan\u0131labilir ve mod\u00fcler birimlere ay\u0131rman\u0131za olanak tan\u0131r. Her bir i\u00e7 stack, ba\u011f\u0131ms\u0131z olarak y\u00f6netilebilen bir dizi ilgili kaynak grubunu temsil eder.<\/p>\n<p>\u00d6rne\u011fin, CloudVille'in a\u011f altyap\u0131s\u0131 (VPC, alt a\u011flar, y\u00f6nlendirme tablolar\u0131) i\u00e7in ayr\u0131 bir stack, veri taban\u0131 katman\u0131 i\u00e7in ba\u015fka bir stack ve uygulama katman\u0131 i\u00e7in bir di\u011fer stack olu\u015fturabilirsiniz. Ana \u015fablonunuz (root stack), bu i\u00e7 i\u00e7e stack'leri bir araya getiren bir orkestrat\u00f6r g\u00f6revi g\u00f6r\u00fcr. Bu yakla\u015f\u0131m, \u015fablonlar\u0131n daha okunabilir olmas\u0131n\u0131 sa\u011flaman\u0131n yan\u0131 s\u0131ra, farkl\u0131 ekiplerin kendi stack'leri \u00fczerinde ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fmas\u0131na ve ortak bile\u015fenleri (\u00f6rne\u011fin, standart bir VPC \u015fablonu) tekrar tekrar kullanmas\u0131na olanak tan\u0131r. B\u00f6ylece, veri taban\u0131 ekibi sadece kendi veri taban\u0131 stack'i \u00fczerinde yo\u011funla\u015f\u0131rken, a\u011f ekibi ayn\u0131 anda a\u011f stack'inde de\u011fi\u015fiklikler yapabilir.<\/p>\n<pre><code class=\"language-yaml\">\n# Ana (Root) Stack \u00d6rne\u011fi\nAWSTemplateFormatVersion: '2010-09-09'\nDescription: Ana stack, a\u011f ve uygulama stack'lerini da\u011f\u0131t\u0131r.\nResources:\n  NetworkStack:\n    Type: AWS::CloudFormation::Stack\n    Properties:\n      TemplateURL: https:\/\/s3.amazonaws.com\/your-bucket\/network-template.yaml # A\u011f \u015fablonunun S3 yolu\n      Parameters:\n        VpcCidr: 10.0.0.0\/16\n  ApplicationStack:\n    Type: AWS::CloudFormation::Stack\n    Properties:\n      TemplateURL: https:\/\/s3.amazonaws.com\/your-bucket\/application-template.yaml # Uygulama \u015fablonunun S3 yolu\n      Parameters:\n        VpcId: !GetAtt NetworkStack.Outputs.VpcId # A\u011f stack'inden VPC ID'sini al\u0131r\n        SubnetId: !GetAtt NetworkStack.Outputs.PublicSubnetId\n<\/pre>\n<p><\/code><\/p>\n<p class=\"expert-tip\">Uzman \u0130pucu: Karma\u015f\u0131k altyap\u0131lar\u0131 y\u00f6netirken i\u00e7 i\u00e7e ge\u00e7mi\u015f stack'ler kullanarak \u015fablonlar\u0131n\u0131z\u0131 daha y\u00f6netilebilir ve yeniden kullan\u0131labilir hale getirebilirsiniz. Her bir mikroservis veya altyap\u0131 katman\u0131 i\u00e7in ayr\u0131 bir stack olu\u015fturmak, ba\u011f\u0131ms\u0131z geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini destekler ve b\u00f6ylece ekipler aras\u0131nda daha iyi bir i\u015f b\u00f6l\u00fcm\u00fc sa\u011flar.<\/p>\n<h3>\u00d6zel Kaynaklar (Custom Resources) ile CloudFormation'\u0131 Geni\u015fletme<\/h3>\n<p>CloudFormation, AWS hizmetlerinin b\u00fcy\u00fck bir \u00e7o\u011funlu\u011funu do\u011frudan desteklese de, bazen AWS d\u0131\u015f\u0131 bir hizmeti veya CloudFormation'\u0131n desteklemedi\u011fi belirli bir AWS \u00f6zelli\u011fini da\u011f\u0131tman\u0131z gerekebilir. \u0130\u015fte bu durumlarda \"\u00d6zel Kaynaklar\" (Custom Resources) devreye girer. \u00d6zel kaynaklar, CloudFormation'a kendi \u00f6zel mant\u0131\u011f\u0131n\u0131z\u0131 entegre etmenize olanak tan\u0131r.<\/p>\n<p>Bir \u00f6zel kaynak tan\u0131mlad\u0131\u011f\u0131n\u0131zda, asl\u0131nda bir AWS Lambda fonksiyonunu veya bir SNS (Simple Notification Service) konusunu tetiklersiniz. CloudFormation, stack ya\u015fam d\u00f6ng\u00fcs\u00fc olaylar\u0131nda (olu\u015fturma, g\u00fcncelleme, silme) bu \u00f6zel kayna\u011f\u0131 \u00e7a\u011f\u0131r\u0131r ve sizin tan\u0131mlad\u0131\u011f\u0131n\u0131z Lambda fonksiyonu gerekli \u00f6zel mant\u0131\u011f\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir \u00fc\u00e7\u00fcnc\u00fc taraf izleme arac\u0131nda bir entegrasyon olu\u015fturmak, bir \u00f6zel DNS kayd\u0131 y\u00f6netmek veya belirli bir API \u00e7a\u011fr\u0131s\u0131 yapmak i\u00e7in \u00f6zel kaynaklar\u0131 kullanabilirsiniz. Bu, CloudFormation'\u0131n yeteneklerini neredeyse s\u0131n\u0131rs\u0131z hale getirir.<\/p>\n<h3>StackSets: \u00c7oklu AWS Hesaplar\u0131na ve B\u00f6lgelere Da\u011f\u0131t\u0131m<\/h3>\n<p>E\u011fer CloudVille'iniz sadece tek bir AWS hesab\u0131nda veya tek bir b\u00f6lgede de\u011fil, birden fazla hesapta ve birden fazla AWS b\u00f6lgesinde yay\u0131lm\u0131\u015fsa, her bir yere ayr\u0131 ayr\u0131 stack da\u011f\u0131tmak yorucu ve hataya a\u00e7\u0131k olabilir. StackSets, bu senaryo i\u00e7in tasarlanm\u0131\u015ft\u0131r. Tek bir CloudFormation \u015fablonunu kullanarak, ayn\u0131 stack'i birden fazla AWS hesab\u0131na ve\/veya b\u00f6lgeye otomatik olarak da\u011f\u0131tman\u0131z\u0131, g\u00fcncellemenizi veya silmenizi sa\u011flar.<\/p>\n<p>Bu, \u00f6zellikle kurumsal ortamlarda, ayn\u0131 temel altyap\u0131n\u0131n (\u00f6rne\u011fin, IAM rolleri, g\u00fcvenlik gruplar\u0131, loglama konfig\u00fcrasyonlar\u0131) t\u00fcm geli\u015ftirme, test ve \u00fcretim hesaplar\u0131nda tutarl\u0131 bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131 gerekti\u011finde inan\u0131lmaz derecede kullan\u0131\u015fl\u0131d\u0131r. StackSets, global \u00f6l\u00e7ekte tutarl\u0131l\u0131k ve otomasyon sa\u011flar.<\/p>\n<h3>IAM Rolleri ve G\u00fcvenlik En \u0130yi Uygulamalar\u0131<\/h3>\n<p>CloudFormation'\u0131n kaynaklar\u0131 olu\u015fturmak ve y\u00f6netmek i\u00e7in AWS hizmetleriyle etkile\u015fime girmesi gerekir. Bu etkile\u015fimler i\u00e7in CloudFormation'a belirli izinler vermeniz gerekir. Bunu bir IAM Rol\u00fc (Identity and Access Management Role) atayarak yapars\u0131n\u0131z. Bu rol, CloudFormation'\u0131n stack'inizde tan\u0131mlanan kaynaklar\u0131 (\u00f6rne\u011fin EC2 ba\u015flatma, S3 kovas\u0131 olu\u015fturma) olu\u015fturmak, g\u00fcncellemek veya silmek i\u00e7in ihtiya\u00e7 duydu\u011fu minimum yetkileri i\u00e7ermelidir (Least Privilege prensibi).<\/p>\n<p>G\u00fcvenlik en iyi uygulamalar\u0131, CloudFormation'a asla gere\u011finden fazla yetki vermemenizi gerektirir. \u00d6rne\u011fin, bir \u015fablon sadece S3 kovalar\u0131 olu\u015fturuyorsa, ona EC2 sunucular\u0131 ba\u015flatma yetkisi vermemelisiniz. Bu, CloudVille'de her bir in\u015faat ekibine sadece kendi g\u00f6rev alan\u0131yla ilgili ara\u00e7lar\u0131 ve izinleri vermeye benzer, b\u00f6ylece yanl\u0131\u015fl\u0131kla ba\u015fka bir ekibin i\u015fine kar\u0131\u015fma riski azal\u0131r.<\/p>\n<p>Ayr\u0131ca, <code>DeletionPolicy<\/code> \u00f6zniteli\u011fi, bir kaynak silindi\u011finde ne olaca\u011f\u0131n\u0131 kontrol etmenizi sa\u011flar:<\/p>\n<ul>\n<li><code>Retain<\/code>: Kaynak stack silinse bile kal\u0131r.<\/li>\n<li><code>Snapshot<\/code>: Kaynak bir anl\u0131k g\u00f6r\u00fcnt\u00fc (snapshot) al\u0131r ve ard\u0131ndan silinir (\u00e7o\u011funlukla veri tabanlar\u0131 i\u00e7in).<\/li>\n<li><code>Delete<\/code>: Kaynak stack ile birlikte silinir (varsay\u0131lan davran\u0131\u015f).<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey teknikler, CloudFormation'\u0131 sadece bir \"kaynak olu\u015fturma arac\u0131\" olmaktan \u00e7\u0131kar\u0131p, karma\u015f\u0131k, \u00f6l\u00e7eklenebilir ve g\u00fcvenli bulut altyap\u0131lar\u0131n\u0131n merkezi bir y\u00f6netim platformuna d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. CloudVille'i ak\u0131ll\u0131ca ve verimli bir \u015fekilde tasarlaman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>CloudFormation Best Practices ve Mobil Uyumluluk \u0130\u00e7in Tasar\u0131m \u0130pu\u00e7lar\u0131 Nelerdir?<\/h3>\n<p>CloudFormation \u015fablonlar\u0131n\u0131z\u0131 sadece \u00e7al\u0131\u015f\u0131r durumda b\u0131rakmak yerine, en iyi uygulamalar\u0131 takip ederek onlar\u0131 daha s\u00fcrd\u00fcr\u00fclebilir, g\u00fcvenilir ve i\u015fbirli\u011fine a\u00e7\u0131k hale getirebilirsiniz. Ayn\u0131 zamanda, bu teknik makalenin mobil cihazlarda da rahatl\u0131kla okunabilmesi i\u00e7in genel HTML\/CSS tasar\u0131m\u0131 ipu\u00e7lar\u0131na da de\u011finece\u011fiz.<\/p>\n<h4>CloudFormation \u0130\u00e7in En \u0130yi Uygulamalar<\/h4>\n<ol>\n<li><strong>Versiyon Kontrol\u00fc Kullan\u0131n:<\/strong> \u015eablonlar\u0131n\u0131z\u0131 Git gibi bir versiyon kontrol sisteminde saklay\u0131n. Bu, de\u011fi\u015fiklikleri takip etmenizi, geri alman\u0131z\u0131, farkl\u0131 s\u00fcr\u00fcmler \u00fczerinde \u00e7al\u0131\u015fman\u0131z\u0131 ve ekip \u00fcyeleri aras\u0131nda i\u015fbirli\u011fi yapman\u0131z\u0131 sa\u011flar. \u015eablonlar\u0131n\u0131z art\u0131k kod oldu\u011fu i\u00e7in, yaz\u0131l\u0131m geli\u015ftirme prensipleri buraya da uygulanmal\u0131d\u0131r.<\/li>\n<li><strong>Mod\u00fcler \u015eablonlar Olu\u015fturun (\u0130\u00e7 \u0130\u00e7e Stack'ler):<\/strong> B\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131lar i\u00e7in tek bir dev \u015fablon yerine, i\u00e7 i\u00e7e stack'ler kullanarak altyap\u0131n\u0131z\u0131 mant\u0131ksal birimlere ay\u0131r\u0131n. Her stack'in belirli bir sorumlulu\u011fu olsun (\u00f6rne\u011fin, a\u011f, veri taban\u0131, uygulama katman\u0131). Bu, \u015fablonlar\u0131 daha okunabilir, y\u00f6netilebilir ve yeniden kullan\u0131labilir hale getirir.<\/li>\n<li><strong>Parametreleri Ak\u0131ll\u0131ca Kullan\u0131n:<\/strong> \u015eablonlar\u0131n\u0131z\u0131 yeniden kullan\u0131labilir k\u0131lmak i\u00e7in parametrelerden faydalan\u0131n. Ancak \u00e7ok fazla parametre kullanmak, stack da\u011f\u0131t\u0131m\u0131n\u0131 karma\u015f\u0131kla\u015ft\u0131rabilir. Se\u00e7enekleri s\u0131n\u0131rlamak i\u00e7in <code>AllowedValues<\/code> ve <code>ConstraintDescription<\/code> gibi \u00f6zellikleri kullan\u0131n.<\/li>\n<li><strong><code>Mappings<\/code> Kullanarak Ko\u015fullu De\u011ferleri Y\u00f6netin:<\/strong> B\u00f6lgelere veya ortamlara g\u00f6re de\u011fi\u015fen de\u011ferler (\u00f6rne\u011fin AMI ID'leri) i\u00e7in <code>Mappings<\/code> kullan\u0131n. Bu, \u015fablonunuzu daha dinamik ve b\u00f6lgeye \u00f6zel hale getirirken, \u015fablon mant\u0131\u011f\u0131n\u0131 daha temiz tutar.<\/li>\n<li><strong><code>Outputs<\/code> ile Kaynaklar\u0131 Payla\u015f\u0131n:<\/strong> Olu\u015fturulan kaynaklar\u0131n de\u011ferlerini (\u00f6rne\u011fin, VPC ID, Load Balancer DNS ad\u0131) <code>Outputs<\/code> arac\u0131l\u0131\u011f\u0131yla d\u0131\u015fa aktar\u0131n. Bu, di\u011fer stack'lerin veya uygulamalar\u0131n bu de\u011ferlere programatik olarak eri\u015fmesini sa\u011flar ve stack'ler aras\u0131 entegrasyonu kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>\u015eablonlar\u0131 Test Edin:<\/strong> Da\u011f\u0131t\u0131m yapmadan \u00f6nce \u015fablonlar\u0131n\u0131z\u0131 test edin. <code>cfn-lint<\/code> gibi ara\u00e7larla s\u00f6zdizimi ve en iyi uygulama hatalar\u0131n\u0131 kontrol edin. <code>cfn-nag<\/code> gibi g\u00fcvenlik denetim ara\u00e7lar\u0131yla g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 taray\u0131n.<\/li>\n<li><strong>A\u00e7\u0131klay\u0131c\u0131 \u0130simlendirme Kullan\u0131n:<\/strong> Stack'lerinize ve kaynaklar\u0131n\u0131za anlaml\u0131, a\u00e7\u0131klay\u0131c\u0131 isimler verin. Bu, \u00f6zellikle \u00e7ok say\u0131da kaynak ve stack ile u\u011fra\u015f\u0131rken karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r.<\/li>\n<li><strong>De\u011fi\u015fiklik Setlerini Kullan\u0131n:<\/strong> Stack g\u00fcncellemelerini uygulamadan \u00f6nce her zaman de\u011fi\u015fiklik setlerini kullanarak potansiyel etkileri \u00f6nizleyin. Bu, beklenmeyen kesintileri veya kaynak silmelerini \u00f6nlemeye yard\u0131mc\u0131 olur.<\/li>\n<li><strong>G\u00fcvenli\u011fi \u0130hmal Etmeyin:<\/strong> CloudFormation stack'lerinin kulland\u0131\u011f\u0131 IAM rollerine en az ayr\u0131cal\u0131k ilkesini uygulay\u0131n. Yaln\u0131zca ihtiya\u00e7 duyulan izinleri verin.<\/li>\n<\/ol>\n<h4>Mobil Uyumlu HTML\/CSS Tasar\u0131m\u0131 \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h4>\n<p>Bu makalenin kendisi gibi teknik i\u00e7eriklerin mobil cihazlarda da okunabilir olmas\u0131, okuyucu deneyimi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. \u0130\u015fte uygulanan ve uygulayabilece\u011finiz baz\u0131 mobil uyumluluk ipu\u00e7lar\u0131:<\/p>\n<ol>\n<li><strong>Duyarl\u0131 Tasar\u0131m (Responsive Design):<\/strong> <code>Media Queries<\/code> kullanarak farkl\u0131 ekran boyutlar\u0131na g\u00f6re stil kurallar\u0131 tan\u0131mlay\u0131n. Bu, i\u00e7eri\u011fin otomatik olarak cihaz\u0131n ekran geni\u015fli\u011fine uyum sa\u011flamas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlarda yaz\u0131 boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltmek, s\u00fctunlar\u0131 alt alta s\u0131ralamak gibi.<\/li>\n<li><strong>Meta Viewport Etiketi:<\/strong> HTML <code><head><\/code> b\u00f6l\u00fcm\u00fcne <code><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><\/code> etiketini ekleyin. Bu, taray\u0131c\u0131n\u0131n sayfan\u0131n geni\u015fli\u011fini cihaz\u0131n geni\u015fli\u011fi olarak ele almas\u0131n\u0131 ve uygun \u00f6l\u00e7eklendirme yapmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Esnek G\u00f6r\u00fcnt\u00fcler ve Medya:<\/strong> Resimlerin ve di\u011fer medya \u00f6\u011felerinin geni\u015fli\u011fini <code>%<\/code> birimleri veya <code>max-width: 100%; height: auto;<\/code> gibi CSS kurallar\u0131 ile esnek hale getirin.<\/li>\n<li><strong>Okunabilir Yaz\u0131 Tipleri ve Boyutlar\u0131:<\/strong> Mobil cihazlarda yaz\u0131 tiplerinin okunabilir oldu\u011fundan emin olun. Genellikle <code>16px<\/code> veya <code>1em<\/code> temel yaz\u0131 tipi boyutu iyi bir ba\u015flang\u0131\u00e7t\u0131r. Sat\u0131r y\u00fcksekli\u011fini (<code>line-height<\/code>) art\u0131rmak (genellikle 1.5-1.7), metin bloklar\u0131n\u0131n daha rahat okunmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Yeterli Dokunma Alan\u0131:<\/strong> Mobil cihazlarda d\u00fc\u011fmeler ve ba\u011flant\u0131lar gibi etkile\u015fimli \u00f6\u011felerin yeterince b\u00fcy\u00fck oldu\u011fundan ve parmakla dokunulabilecek kadar aral\u0131kl\u0131 oldu\u011fundan emin olun.<\/li>\n<li><strong>Kod Bloklar\u0131 \u0130\u00e7in Kayd\u0131rma:<\/strong> <code>pre<\/code> ve <code>code<\/code> etiketleri i\u00e7inde uzun kod bloklar\u0131 kullan\u0131yorsan\u0131z, <code>overflow-x: auto;<\/code> kullanarak kodun ekrandan ta\u015fmas\u0131n\u0131 engelleyebilir ve yatay kayd\u0131rma \u00e7ubu\u011fu ile t\u00fcm kodu g\u00f6rmeyi sa\u011flayabilirsiniz.<\/li>\n<\/ol>\n<p>Yukar\u0131daki stil kod blo\u011fumuzda mobil uyumluluk i\u00e7in temel media query \u00f6rnekleri bulabilirsiniz. \u00d6zellikle <code>pre code<\/code> elementine uygulanan <code>font-size: 0.8em;<\/code> gibi ayarlamalar, k\u00fc\u00e7\u00fck ekranlarda kod bloklar\u0131n\u0131n daha d\u00fczenli g\u00f6r\u00fcnmesine yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-css\">\n\/* Genel stiller *\/\nbody { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n.container { max-width: 1200px; margin: 0 auto; padding: 20px; }\nh2, h3 { color: #2c3e50; }\npre { background-color: #f4f4f4; border: 1px solid #ddd; padding: 15px; margin-bottom: 20px; overflow-x: auto; }\n.expert-tip { background-color: #e8f5e9; border-left: 5px solid #4caf50; padding: 10px 15px; margin: 20px 0; font-style: italic; color: #388e3c; }\n\n\/* Mobil uyumluluk i\u00e7in media query *\/\n@media (max-width: 768px) {\n  .container { padding: 10px; }\n  h2 { font-size: 1.8em; }\n  h3 { font-size: 1.4em; }\n  \/* Kod bloklar\u0131n\u0131n daha iyi g\u00f6r\u00fcnmesi i\u00e7in font boyutunu k\u00fc\u00e7\u00fclt *\/\n  pre code { font-size: 0.8em; }\n}\n@media (max-width: 480px) {\n  body { font-size: 0.9em; }\n  \/* Ekstra k\u00fc\u00e7\u00fck ekranlar i\u00e7in daha fazla ayarlama *\/\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu en iyi uygulamalar\u0131 hem CloudFormation \u015fablonlar\u0131n\u0131zda hem de teknik makalelerinizin sunumunda kullanarak, daha kaliteli, daha g\u00fcvenli ve daha eri\u015filebilir sonu\u00e7lar elde edebilirsiniz. CloudVille'in in\u015fas\u0131nda, sadece g\u00fc\u00e7l\u00fc temeller atmak de\u011fil, ayn\u0131 zamanda \u015fehrin t\u00fcm vatanda\u015flar\u0131 i\u00e7in ya\u015fanabilir ve eri\u015filebilir olmas\u0131n\u0131 sa\u011flamak da \u00f6nemlidir.<\/p>\n<h2>CloudVille'in Gelece\u011fi: CloudFormation'\u0131n Rol\u00fc ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>CloudFormation, bulut altyap\u0131s\u0131 y\u00f6netimi d\u00fcnyas\u0131nda devrim niteli\u011finde bir ara\u00e7t\u0131r ve CloudVille'in gelece\u011finde de merkezi bir rol oynamaya devam edecektir. Kod olarak altyap\u0131 (IaC) yakla\u015f\u0131m\u0131n\u0131n benimsenmesiyle birlikte, manuel i\u015flemlerin yerini otomasyon, tutarl\u0131l\u0131k ve \u00f6l\u00e7eklenebilirlik alm\u0131\u015ft\u0131r. CloudFormation sayesinde ekipler, karma\u015f\u0131k bulut ortamlar\u0131n\u0131 g\u00fcvenle tasarlayabilir, da\u011f\u0131tabilir ve y\u00f6netebilir, b\u00f6ylece yenilik\u00e7ili\u011fe daha fazla zaman ay\u0131rabilirler.<\/p>\n<p>Bu makalede CloudFormation'\u0131n temel kavramlar\u0131ndan ba\u015flayarak, \u015fablon yap\u0131s\u0131, stack y\u00f6netimi, g\u00fcncelleme mekanizmalar\u0131 ve ileri d\u00fczey tekniklere kadar geni\u015f bir yelpazeyi ele ald\u0131k. CloudFormation'\u0131n sadece kaynak olu\u015fturmakla kalmay\u0131p, bu kaynaklar\u0131n t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc ba\u015ftan sona y\u00f6netebilme yetene\u011fi, onu modern DevOps uygulamalar\u0131 i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getiriyor. CloudVille'in s\u00fcrekli b\u00fcy\u00fcmesi ve geli\u015fmesi i\u00e7in CloudFormation, her zaman g\u00fcvenilir bir \"mimari plan\" olarak hizmet vermeye devam edecektir.<\/p>\n<div class=\"faq-section\">\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p class=\"faq-question\">1. CloudFormation ile Terraform aras\u0131ndaki temel fark nedir?<\/p>\n<p><strong>Cevap:<\/strong> CloudFormation, AWS'ye \u00f6zg\u00fc bir IaC (Infrastructure as Code) arac\u0131d\u0131r ve yaln\u0131zca AWS kaynaklar\u0131n\u0131 y\u00f6netir. AWS hizmetleriyle derinlemesine entegrasyonu ve kolay \u00f6\u011frenim e\u011frisi vard\u0131r. Terraform ise HashiCorp taraf\u0131ndan geli\u015ftirilen, bulut sa\u011flay\u0131c\u0131s\u0131ndan ba\u011f\u0131ms\u0131z (agnostik) bir IaC arac\u0131d\u0131r. AWS, Azure, Google Cloud, VMware gibi bir\u00e7ok farkl\u0131 bulut ve SaaS sa\u011flay\u0131c\u0131s\u0131n\u0131n kaynaklar\u0131n\u0131 tek bir yerden y\u00f6netebilir. CloudFormation daha AWS odakl\u0131 ve entegre iken, Terraform daha \u00e7oklu bulut (multi-cloud) senaryolar\u0131 i\u00e7in esneklik sunar.<\/p>\n<p class=\"faq-question\">2. CloudFormation kullanmak maliyetli midir?<\/p>\n<p><strong>Cevap:<\/strong> Hay\u0131r, CloudFormation hizmetinin kendisi \u00fccretsizdir. Yaln\u0131zca \u015fablonunuzda tan\u0131mlad\u0131\u011f\u0131n\u0131z AWS kaynaklar\u0131n\u0131n (\u00f6rne\u011fin, bir EC2 \u00f6rne\u011fi veya S3 kovas\u0131) olu\u015fturulmas\u0131 ve kullan\u0131lmas\u0131 durumunda ilgili AWS hizmetlerinin standart \u00fccretlerini \u00f6dersiniz. CloudFormation, altyap\u0131 y\u00f6netimini otomatikle\u015ftirdi\u011fi ve hatalar\u0131 azaltt\u0131\u011f\u0131 i\u00e7in dolayl\u0131 olarak maliyet tasarrufu sa\u011flaman\u0131za yard\u0131mc\u0131 olabilir.<\/p>\n<p class=\"faq-question\">3. Mevcut AWS kaynaklar\u0131m\u0131 CloudFormation ile nas\u0131l y\u00f6netebilirim?<\/p>\n<p><strong>Cevap:<\/strong> Mevcut AWS kaynaklar\u0131n\u0131 CloudFormation ile y\u00f6netmek i\u00e7in \"resource import\" (kaynak i\u00e7e aktarma) \u00f6zelli\u011fini kullanabilirsiniz. Bu \u00f6zellik sayesinde, daha \u00f6nce manuel olarak veya ba\u015fka bir y\u00f6ntemle olu\u015fturulmu\u015f kaynaklar\u0131 mevcut bir CloudFormation stack'ine veya yeni bir stack'e aktarabilirsiniz. B\u00f6ylece, manuel olarak olu\u015fturulmu\u015f kaynaklar\u0131 da IaC prensipleriyle y\u00f6netmeye ba\u015flayabilirsiniz. Bu, CloudVille'e sonradan eklenen binalar\u0131, genel mimari plana dahil etmeye benzer.<\/p>\n<p class=\"faq-question\">4. Bir stack da\u011f\u0131t\u0131m\u0131 ba\u015far\u0131s\u0131z olursa ne yapmal\u0131y\u0131m?<\/p>\n<p><strong>Cevap:<\/strong> Bir CloudFormation stack da\u011f\u0131t\u0131m\u0131 ba\u015far\u0131s\u0131z olursa, CloudFormation varsay\u0131lan olarak t\u00fcm kaynaklar\u0131 geri al\u0131r (rollback). Bu, tutars\u0131z bir durumdan ka\u00e7\u0131nmak i\u00e7in harika bir \u00f6zelliktir. Hatan\u0131n nedenini bulmak i\u00e7in CloudFormation konsolundaki \"Events\" (Olaylar) sekmesini kontrol etmelisiniz. Bu sekmede, hangi kayna\u011f\u0131n hangi a\u015famada ba\u015far\u0131s\u0131z oldu\u011fu ve hata mesaj\u0131 genellikle belirtilir. CloudWatch Logs entegrasyonu varsa daha detayl\u0131 hata g\u00fcnl\u00fcklerine de bakabilirsiniz. \u015eablonunuzu d\u00fczelttikten sonra tekrar da\u011f\u0131t\u0131m yapabilirsiniz.<\/p>\n<p class=\"faq-question\">5. CloudFormation \u015fablonlar\u0131m\u0131n g\u00fcvenli\u011fini nas\u0131l sa\u011flar\u0131m?<\/p>\n<p><strong>Cevap:<\/strong> \u015eablonlar\u0131n\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in birka\u00e7 ad\u0131m atabilirsiniz:<\/p>\n<ul>\n<li><strong>Versiyon Kontrol\u00fc:<\/strong> \u015eablonlar\u0131n\u0131z\u0131 Git gibi g\u00fcvenli bir repoda saklay\u0131n.<\/li>\n<li><strong>Kod \u0130ncelemesi:<\/strong> \u015eablonlar\u0131 da\u011f\u0131t\u0131mdan \u00f6nce ekip \u00fcyeleri taraf\u0131ndan g\u00f6zden ge\u00e7irilmesini sa\u011flay\u0131n.<\/li>\n<li><strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> CloudFormation'\u0131n kaynaklar\u0131 da\u011f\u0131tmak i\u00e7in kulland\u0131\u011f\u0131 IAM rol\u00fcne sadece ihtiya\u00e7 duydu\u011fu minimum izinleri verin.<\/li>\n<li><strong>G\u00fcvenlik Ara\u00e7lar\u0131:<\/strong> <code>cfn-nag<\/code> gibi ara\u00e7larla \u015fablonlar\u0131n\u0131zda g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 taray\u0131n.<\/li>\n<li><strong>Hassas Veri Y\u00f6netimi:<\/strong> \u015eifreler veya API anahtarlar\u0131 gibi hassas bilgileri do\u011frudan \u015fablonda saklamak yerine, AWS Secrets Manager veya AWS Systems Manager Parameter Store gibi hizmetleri kullanarak g\u00fcvenli bir \u015fekilde y\u00f6netin ve \u015fablonda bunlara referans verin.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor.&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":[1341],"tags":[],"class_list":{"0":"post-34616","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cloud","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>CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille<\/title>\n<meta name=\"description\" content=\"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir &quot;mimari plan&quot; olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code - IaC) arac\u0131d\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\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille\" \/>\n<meta property=\"og:description\" content=\"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir &quot;mimari plan&quot; olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code - IaC) arac\u0131d\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-19T18:31:12+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=\"26 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille\",\"datePublished\":\"2025-11-19T18:31:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\"},\"wordCount\":4536,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Cloud\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\",\"name\":\"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-19T18:31:12+00:00\",\"description\":\"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir \\\"mimari plan\\\" olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code - IaC) arac\u0131d\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille\"}]},{\"@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":"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille","description":"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir \"mimari plan\" olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code - IaC) arac\u0131d\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\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/","og_locale":"tr_TR","og_type":"article","og_title":"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille","og_description":"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir \"mimari plan\" olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code - IaC) arac\u0131d\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-19T18:31:12+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille","datePublished":"2025-11-19T18:31:12+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/"},"wordCount":4536,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Cloud"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/","url":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/","name":"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-19T18:31:12+00:00","description":"Modern bulut altyap\u0131s\u0131 y\u00f6netimi, manuel s\u00fcre\u00e7lerin karma\u015f\u0131kl\u0131\u011f\u0131, hata pay\u0131 ve \u00f6l\u00e7eklenebilirlik zorluklar\u0131 nedeniyle giderek daha \u00e7etrefilli hale geliyor. Peki, bu kaosu ortadan kald\u0131r\u0131p, t\u00fcm bulut kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 ve otomatik bir \u015fekilde y\u00f6netebilece\u011finiz sihirli bir \"mimari plan\" olsayd\u0131 harika olmaz m\u0131yd\u0131? \u0130\u015fte tam da bu noktada AWS CloudFormation devreye giriyor; bulut kaynaklar\u0131n\u0131z\u0131 kodla tan\u0131mlaman\u0131za, da\u011f\u0131tman\u0131za ve g\u00fcncellemenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir Hizmet Olarak Altyap\u0131 (Infrastructure as Code - IaC) arac\u0131d\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/cloudformation-explained-as-a-story-the-blueprint-of-cloudville\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CloudFormation Explained as a Story \u2014 The Blueprint of CloudVille"}]},{"@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\/34616","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=34616"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34616\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}