{"id":44822,"date":"2026-09-21T21:08:09","date_gmt":"2026-09-21T18:08:09","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/"},"modified":"2026-09-21T21:08:41","modified_gmt":"2026-09-21T18:08:41","slug":"aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/","title":{"rendered":"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler"},"content":{"rendered":"<h2>AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i i\u015f d\u00fcnyas\u0131nda, veriye dayal\u0131 kararlar almak her zamankinden daha kritik hale geldi. Ancak, h\u0131zla b\u00fcy\u00fcyen ve \u00e7e\u015fitlenen veri setlerini y\u00f6netmek, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir veri platformu olu\u015fturmak, \u00e7o\u011fu kurulu\u015f i\u00e7in ciddi bir meydan okumad\u0131r. Peki, bu karma\u015f\u0131k veri ekosistemini nas\u0131l daha verimli, g\u00fcvenli ve otomatik bir \u015fekilde kurabiliriz? Bu makalede, AWS ve Snowflake gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 Terraform ile birle\u015ftirerek bir &#8220;Landing Zone&#8221; (ini\u015f b\u00f6lgesi) olu\u015fturman\u0131n inceliklerini, \u00f6zellikle de CI\/CD s\u00fcre\u00e7lerindeki deneyimlerimizden edindi\u011fimiz dersleri detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. Amac\u0131m\u0131z, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir veri platformu in\u015fa etme yolculu\u011funuzda size rehberlik etmek ve kar\u015f\u0131la\u015fabilece\u011finiz potansiyel tuzaklara kar\u015f\u0131 sizi uyarmakt\u0131r.<\/p>\n<h2>Veri Platformu Kurulumunda Kar\u015f\u0131la\u015f\u0131lan Zorluklar Nelerdir?<\/h2>\n<p>Modern veri platformlar\u0131, sadece veriyi depolayan basit sistemler olmaktan \u00e7ok daha fazlas\u0131d\u0131r. \u00c7e\u015fitli kaynaklardan gelen verilerin toplanmas\u0131, i\u015flenmesi, d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi ve analiz i\u00e7in haz\u0131r hale getirilmesi gibi karma\u015f\u0131k s\u00fcre\u00e7leri kapsar. Bu s\u00fcre\u00e7lerin her a\u015famas\u0131nda g\u00fcvenlik, \u00f6l\u00e7eklenebilirlik, maliyet verimlili\u011fi ve y\u00f6netim kolayl\u0131\u011f\u0131 gibi fakt\u00f6rler g\u00f6z \u00f6n\u00fcnde bulundurulmal\u0131d\u0131r. \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli ve h\u0131zl\u0131 b\u00fcy\u00fcyen \u015firketler i\u00e7in, bu gereksinimleri manuel y\u00f6ntemlerle kar\u015f\u0131lamak neredeyse imkans\u0131z hale gelir. Geleneksel yakla\u015f\u0131mlar, insan hatas\u0131na a\u00e7\u0131k, yava\u015f ve tutars\u0131z sonu\u00e7lar do\u011furabilir. \u00d6rne\u011fin, farkl\u0131 ekiplerin ayn\u0131 altyap\u0131 bile\u015fenlerini farkl\u0131 \u015fekillerde yap\u0131land\u0131rmas\u0131, g\u00fcvenlik a\u00e7\u0131klar\u0131na veya performans sorunlar\u0131na yol a\u00e7abilir. Ayr\u0131ca, yeni bir ortam kurmak veya mevcut bir ortam\u0131 geni\u015fletmek haftalar, hatta aylar s\u00fcrebilir, bu da i\u015f \u00e7evikli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131s\u0131tlar.<\/p>\n<p>Bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in, altyap\u0131n\u0131n kod olarak (Infrastructure as Code &#8211; IaC) y\u00f6netilmesi ve s\u00fcrekli entegrasyon\/s\u00fcrekli teslimat (CI\/CD) prensiplerinin benimsenmesi ka\u00e7\u0131n\u0131lmaz hale gelmi\u015ftir. Bir &#8220;Landing Zone&#8221;, bu prensiplerin temelini olu\u015fturur; AWS gibi bulut sa\u011flay\u0131c\u0131lar\u0131 \u00fczerinde g\u00fcvenli, y\u00f6netilebilir ve otomatik bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar. Bu zone, genellikle \u00e7oklu hesap stratejileri, merkezi kimlik y\u00f6netimi, a\u011f yap\u0131land\u0131rmalar\u0131 ve g\u00fcvenlik politikalar\u0131 gibi temel bile\u015fenleri i\u00e7erir. Snowflake gibi modern bir veri ambar\u0131 \u00e7\u00f6z\u00fcm\u00fc ise, esnekli\u011fi ve performans\u0131 sayesinde bu landing zone&#8217;un kalbinde yer al\u0131r. Ancak t\u00fcm bu bile\u015fenleri bir araya getirmek, yaln\u0131zca do\u011fru ara\u00e7lar\u0131 se\u00e7mekle bitmez; bu ara\u00e7lar\u0131 etkin bir \u015fekilde entegre etmek ve s\u00fcrekli olarak optimize etmek de b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Bu ba\u011flamda, Terraform, hem AWS hem de Snowflake kaynaklar\u0131n\u0131 tek bir kod taban\u0131ndan y\u00f6netme yetene\u011fiyle \u00f6ne \u00e7\u0131karak, bu karma\u015f\u0131kl\u0131\u011f\u0131 basitle\u015ftirmemize olanak tan\u0131r. Sonraki b\u00f6l\u00fcmlerde, bu entegrasyonun temel kavramlar\u0131na ve pratik ad\u0131mlar\u0131na daha yak\u0131ndan bakaca\u011f\u0131z.<\/p>\n<h2>AWS, Snowflake ve Terraform Temellerine H\u0131zl\u0131 Bir Bak\u0131\u015f<\/h2>\n<p>Veri platformunuzu in\u015fa etmeden \u00f6nce, kullanaca\u011f\u0131m\u0131z ana teknolojilerin temel prensiplerini anlamak \u00f6nemlidir. AWS, Snowflake ve Terraform, her biri kendi alan\u0131nda lider olan bu ara\u00e7lar, modern veri mimarilerinin vazge\u00e7ilmez bile\u015fenleridir. Bu b\u00f6l\u00fcmde, her birinin ne i\u015fe yarad\u0131\u011f\u0131n\u0131 ve neden bu kadar kritik olduklar\u0131n\u0131 \u00f6zetleyece\u011fiz.<\/p>\n<h3>AWS Landing Zone Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>AWS Landing Zone, bir kurulu\u015fun AWS bulut ortam\u0131nda g\u00fcvenli, \u00e7ok hesapl\u0131 ve \u00f6l\u00e7eklenebilir bir temel olu\u015fturmas\u0131n\u0131 sa\u011flayan, iyi tan\u0131mlanm\u0131\u015f bir yap\u0131land\u0131rma setidir. Basit\u00e7e ifade etmek gerekirse, bu, bulut yolculu\u011funuza ba\u015flarken size sa\u011flam bir zemin sunan, \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f bir &#8220;ini\u015f pisti&#8221; gibidir. Bir landing zone, genellikle a\u015fa\u011f\u0131daki temel bile\u015fenleri i\u00e7erir:<\/p>\n<ul>\n<li><strong>\u00c7oklu Hesap Stratejisi:<\/strong> G\u00fcvenlik, maliyet y\u00f6netimi ve operasyonel izolasyon i\u00e7in farkl\u0131 i\u015f y\u00fcklerini ayr\u0131 AWS hesaplar\u0131na ay\u0131rma. \u00d6rne\u011fin, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 i\u00e7in ayr\u0131 hesaplar olu\u015fturulur.<\/li>\n<li><strong>Merkezi Kimlik ve Eri\u015fim Y\u00f6netimi (IAM):<\/strong> AWS Single Sign-On (SSO) veya AWS Organizations ile kullan\u0131c\u0131 ve grup eri\u015fimlerini merkezi olarak y\u00f6netme.<\/li>\n<li><strong>A\u011f Yap\u0131land\u0131rmas\u0131:<\/strong> Sanal \u00d6zel Bulutlar (VPC&#8217;ler), alt a\u011flar (subnets), g\u00fcvenlik gruplar\u0131 ve a\u011f eri\u015fim kontrol listeleri (NACL&#8217;ler) ile g\u00fcvenli ve izole a\u011f ortamlar\u0131 olu\u015fturma.<\/li>\n<li><strong>G\u00fcvenlik ve Uyumluluk Politikalar\u0131:<\/strong> AWS Config, CloudTrail ve GuardDuty gibi hizmetlerle g\u00fcvenlik denetimi, izleme ve uyumluluk gereksinimlerini kar\u015f\u0131lama.<\/li>\n<li><strong>Loglama ve \u0130zleme:<\/strong> Merkezi log toplama ve izleme \u00e7\u00f6z\u00fcmleri ile t\u00fcm AWS kaynaklar\u0131n\u0131n etkinli\u011fini takip etme.<\/li>\n<\/ul>\n<p>Bir landing zone&#8217;un \u00f6nemi, \u00f6zellikle b\u00fcy\u00fck kurulu\u015flar i\u00e7in yads\u0131namaz. G\u00fcvenli\u011fi art\u0131r\u0131r, maliyetleri daha etkin y\u00f6netmenizi sa\u011flar, operasyonel verimlili\u011fi art\u0131r\u0131r ve uyumluluk gereksinimlerini kar\u015f\u0131lamay\u0131 kolayla\u015ft\u0131r\u0131r. Ayr\u0131ca, yeni projelerin ve ekiplerin bulut ortam\u0131na daha h\u0131zl\u0131 ve g\u00fcvenli bir \u015fekilde dahil olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Snowflake&#8217;in Veri Ambar\u0131 (Data Warehouse) Rol\u00fc ve Avantajlar\u0131 Nelerdir?<\/h3>\n<p>Snowflake, modern bulut tabanl\u0131 bir veri ambar\u0131 hizmetidir. Geleneksel veri ambar\u0131 \u00e7\u00f6z\u00fcmlerinin aksine, Snowflake, depolama ve i\u015flem (compute) katmanlar\u0131n\u0131 birbirinden ay\u0131rarak e\u015fsiz bir esneklik ve \u00f6l\u00e7eklenebilirlik sunar. Bu mimari, kullan\u0131c\u0131lar\u0131n i\u015flem kaynaklar\u0131n\u0131 ihtiya\u00e7 duyduklar\u0131 anda dinamik olarak art\u0131r\u0131p azaltmas\u0131na olanak tan\u0131rken, depolama maliyetlerini de optimize eder.<\/p>\n<p>Snowflake&#8217;in temel avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>S\u0131f\u0131r Y\u00f6netim:<\/strong> Altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131r\u0131r. Kullan\u0131c\u0131lar veritaban\u0131 ayarlamalar\u0131, yedeklemeler veya g\u00fcncellemelerle u\u011fra\u015fmak zorunda kalmazlar.<\/li>\n<li><strong>Performans ve \u00d6l\u00e7eklenebilirlik:<\/strong> Saniyeler i\u00e7inde i\u015flem g\u00fcc\u00fcn\u00fc art\u0131r\u0131p azaltabilme yetene\u011fi sayesinde, ayn\u0131 anda binlerce sorguyu y\u00fcksek performansla i\u015fleyebilir.<\/li>\n<li><strong>Esneklik:<\/strong> Yap\u0131land\u0131r\u0131lm\u0131\u015f, yar\u0131 yap\u0131land\u0131r\u0131lm\u0131\u015f (JSON, XML, Avro) ve hatta yap\u0131land\u0131r\u0131lmam\u0131\u015f verileri tek bir platformda depolayabilir ve sorgulayabilir.<\/li>\n<li><strong>Veri Payla\u015f\u0131m\u0131:<\/strong> G\u00fcvenli ve kolay veri payla\u015f\u0131m mekanizmalar\u0131 sayesinde, \u015firket i\u00e7i veya d\u0131\u015f\u0131 payda\u015flarla veri al\u0131\u015fveri\u015fini basitle\u015ftirir.<\/li>\n<li><strong>Maliyet Verimlili\u011fi:<\/strong> Yaln\u0131zca kullan\u0131lan kaynaklar i\u00e7in \u00f6deme yapma (pay-as-you-go) modeli sayesinde maliyetleri optimize eder.<\/li>\n<\/ul>\n<p>Bir veri landing zone&#8217;unda Snowflake, ham verilerin depoland\u0131\u011f\u0131 S3 kovalar\u0131ndan veriyi \u00e7ekerek, analiz i\u00e7in haz\u0131r hale getiren merkezi bir veri i\u015fleme ve depolama platformu olarak g\u00f6rev yapar.<\/p>\n<h3>Terraform ile Altyap\u0131y\u0131 Kod Olarak Y\u00f6netmek (IaC) Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Infrastructure as Code (IaC), altyap\u0131n\u0131z\u0131 (sunucular, veritabanlar\u0131, a\u011f yap\u0131land\u0131rmalar\u0131 vb.) kod kullanarak tan\u0131mlama ve y\u00f6netme prati\u011fidir. Terraform, HashiCorp taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k kaynakl\u0131 bir IaC arac\u0131d\u0131r. Deklaratif (bildirimsel) bir yakla\u015f\u0131mla \u00e7al\u0131\u015f\u0131r; yani, istedi\u011finiz son durumu tan\u0131mlars\u0131n\u0131z ve Terraform bu duruma ula\u015fmak i\u00e7in gerekli ad\u0131mlar\u0131 otomatik olarak atar.<\/p>\n<p>Terraform&#8217;un temel \u00f6zellikleri ve faydalar\u0131:<\/p>\n<ul>\n<li><strong>\u00c7oklu Bulut Deste\u011fi:<\/strong> AWS, Azure, Google Cloud, Oracle Cloud ve hatta Snowflake gibi bir\u00e7ok farkl\u0131 sa\u011flay\u0131c\u0131y\u0131 destekler.<\/li>\n<li><strong>Deklaratif Yap\u0131land\u0131rma:<\/strong> Altyap\u0131n\u0131n &#8220;nas\u0131l&#8221; kuruldu\u011funu de\u011fil, &#8220;ne&#8221; olmas\u0131 gerekti\u011fini tan\u0131mlars\u0131n\u0131z. Bu, kodun daha okunabilir ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Durum Y\u00f6netimi (State Management):<\/strong> Terraform, da\u011f\u0131tt\u0131\u011f\u0131 altyap\u0131n\u0131n mevcut durumunu bir &#8220;state&#8221; dosyas\u0131nda izler. Bu, de\u011fi\u015fiklikleri tutarl\u0131 bir \u015fekilde uygulamas\u0131n\u0131 ve mevcut kaynaklarla senkronize kalmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Mod\u00fclerlik:<\/strong> Altyap\u0131 bile\u015fenlerini yeniden kullan\u0131labilir mod\u00fcller halinde paketleyebilir, b\u00f6ylece karma\u015f\u0131k yap\u0131land\u0131rmalar\u0131 basitle\u015ftirebilir ve tutarl\u0131l\u0131\u011f\u0131 art\u0131rabilirsiniz.<\/li>\n<li><strong>Planlama Yetene\u011fi:<\/strong> De\u011fi\u015fiklikleri uygulamadan \u00f6nce, Terraform size ne gibi de\u011fi\u015fiklikler yapaca\u011f\u0131n\u0131 g\u00f6steren bir &#8220;plan&#8221; sunar. Bu, beklenmeyen hatalar\u0131 \u00f6nlemeye yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<p>Terraform, AWS ve Snowflake kaynaklar\u0131n\u0131 tek bir tutarl\u0131 kod taban\u0131nda tan\u0131mlayarak, veri landing zone&#8217;umuzun otomatik, tekrarlanabilir ve hatas\u0131z bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar. Bu sayede, manuel yap\u0131land\u0131rma hatalar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7ilir ve altyap\u0131 de\u011fi\u015fiklikleri daha h\u0131zl\u0131 ve g\u00fcvenli bir \u015fekilde y\u00f6netilebilir.<\/p>\n<h2>AWS ve Snowflake Landing Zone&#8217;u Terraform ile Ad\u0131m Ad\u0131m \u0130n\u015fa Etmek<\/h2>\n<p>Bu b\u00f6l\u00fcmde, AWS ve Snowflake \u00fczerinde bir veri landing zone&#8217;u olu\u015fturmak i\u00e7in Terraform&#8217;u nas\u0131l kullanaca\u011f\u0131m\u0131za dair pratik ad\u0131mlara odaklanaca\u011f\u0131z. Amac\u0131m\u0131z, ham verilerin g\u00fcvenli bir \u015fekilde depolanabilece\u011fi, i\u015flenebilece\u011fi ve analiz edilebilece\u011fi entegre bir ortam olu\u015fturmakt\u0131r.<\/p>\n<h3>AWS Ortam\u0131n\u0131 Terraform ile Haz\u0131rlamak: Temel Bile\u015fenler<\/h3>\n<p>Veri landing zone&#8217;umuzun temelini AWS \u00fczerinde ataca\u011f\u0131z. Bu, g\u00fcvenli bir a\u011f altyap\u0131s\u0131, veri depolama i\u00e7in S3 kovalar\u0131 ve Snowflake&#8217;in AWS kaynaklar\u0131na eri\u015fimi i\u00e7in gerekli IAM (Kimlik ve Eri\u015fim Y\u00f6netimi) rollerini i\u00e7erir. A\u015fa\u011f\u0131daki ad\u0131mlar, bu temel bile\u015fenleri Terraform ile nas\u0131l yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 g\u00f6stermektedir.<\/p>\n<p>\u00d6ncelikle, AWS sa\u011flay\u0131c\u0131s\u0131n\u0131 yap\u0131land\u0131rmam\u0131z gerekiyor. Bir <code>main.tf<\/code> dosyas\u0131 olu\u015fturarak ba\u015flayabiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nprovider \"aws\" {\n  region = \"eu-central-1\" # Veri merkezinin bulundu\u011fu b\u00f6lgeyi belirtin\n}\n\nterraform {\n  backend \"s3\" {\n    bucket         = \"my-landing-zone-tfstate-bucket\" # Terraform state dosyas\u0131n\u0131n saklanaca\u011f\u0131 S3 kovas\u0131\n    key            = \"terraform.tfstate\"\n    region         = \"eu-central-1\"\n    encrypt        = true\n    dynamodb_table = \"my-landing-zone-tfstate-lock\" # Durum kilitleme i\u00e7in DynamoDB tablosu\n  }\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Yukar\u0131daki blok, Terraform&#8217;un AWS ile nas\u0131l ileti\u015fim kuraca\u011f\u0131n\u0131 ve durum dosyas\u0131n\u0131 (state file) S3&#8217;te nas\u0131l y\u00f6netece\u011fini tan\u0131mlar. S3 backend kullan\u0131m\u0131, ekip \u00e7al\u0131\u015fmas\u0131 i\u00e7in kritik olan uzaktan durum y\u00f6netimi ve durum kilitleme (DynamoDB ile) sa\u011flar.<\/p>\n<p>\u015eimdi, landing zone i\u00e7in bir S3 kovas\u0131 olu\u015ftural\u0131m. Bu kova, ham verilerin ilk olarak inece\u011fi yer olacak:<\/p>\n<div class=\"code-container\">\n<pre><code>\nresource \"aws_s3_bucket\" \"data_landing_bucket\" {\n  bucket = \"my-company-data-landing-zone-${var.environment}\" # Ortama \u00f6zel bir isim kullan\u0131n\n\n  tags = {\n    Name        = \"Data Landing Zone Bucket\"\n    Environment = var.environment\n  }\n}\n\nresource \"aws_s3_bucket_acl\" \"data_landing_bucket_acl\" {\n  bucket = aws_s3_bucket.data_landing_bucket.id\n  acl    = \"private\"\n}\n\nresource \"aws_s3_bucket_server_side_encryption_configuration\" \"data_landing_bucket_sse\" {\n  bucket = aws_s3_bucket.data_landing_bucket.id\n\n  rule {\n    apply_server_side_encryption_by_default {\n      sse_algorithm = \"AES256\"\n    }\n  }\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu kod blo\u011fu, veriler i\u00e7in bir S3 kovas\u0131 olu\u015fturur, eri\u015fim kontrol listesini (ACL) \u00f6zel olarak ayarlar ve verilerin depolan\u0131rken otomatik olarak \u015fifrelenmesini (AES256) sa\u011flar. <code>var.environment<\/code> gibi de\u011fi\u015fkenler kullanarak, farkl\u0131 ortamlar (dev, test, prod) i\u00e7in kolayca farkl\u0131 kovalar olu\u015fturabiliriz.<\/p>\n<p>Son olarak, Snowflake&#8217;in bu S3 kovas\u0131na g\u00fcvenli bir \u015fekilde eri\u015febilmesi i\u00e7in bir IAM rol\u00fc ve politikas\u0131 olu\u015fturmal\u0131y\u0131z:<\/p>\n<div class=\"code-container\">\n<pre><code>\nresource \"aws_iam_role\" \"snowflake_s3_access_role\" {\n  name = \"snowflake-s3-access-role-${var.environment}\"\n\n  assume_role_policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Effect = \"Allow\"\n        Principal = {\n          Federated = \"arn:aws:iam::${var.aws_account_id}:saml-provider\/${var.snowflake_saml_provider}\" # Snowflake'in AWS hesab\u0131 ve SAML sa\u011flay\u0131c\u0131s\u0131\n        }\n        Action = \"sts:AssumeRole\"\n        Condition = {\n          StringEquals = {\n            \"SAML:aud\" = \"https:\/\/sts.amazonaws.com\"\n          }\n        }\n      },\n    ]\n  })\n\n  tags = {\n    Name        = \"Snowflake S3 Access Role\"\n    Environment = var.environment\n  }\n}\n\nresource \"aws_iam_policy\" \"snowflake_s3_read_write_policy\" {\n  name        = \"snowflake-s3-read-write-policy-${var.environment}\"\n  description = \"Allows Snowflake to read and write to the data landing S3 bucket.\"\n\n  policy = jsonencode({\n    Version = \"2012-10-17\"\n    Statement = [\n      {\n        Effect = \"Allow\"\n        Action = [\n          \"s3:PutObject\",\n          \"s3:GetObject\",\n          \"s3:GetObjectVersion\",\n          \"s3:DeleteObject\",\n          \"s3:ListBucket\"\n        ]\n        Resource = [\n          aws_s3_bucket.data_landing_bucket.arn,\n          \"${aws_s3_bucket.data_landing_bucket.arn}\/*\",\n        ]\n      },\n    ]\n  })\n}\n\nresource \"aws_iam_role_policy_attachment\" \"snowflake_s3_attach\" {\n  role       = aws_iam_role.snowflake_s3_access_role.name\n  policy_arn = aws_iam_policy.snowflake_s3_read_write_policy.arn\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu IAM rol\u00fc, Snowflake&#8217;in belirli bir AWS hesab\u0131ndan (<code>var.aws_account_id<\/code>) ve SAML sa\u011flay\u0131c\u0131s\u0131ndan (<code>var.snowflake_saml_provider<\/code>) kimlik do\u011frulamas\u0131 yaparak bu role b\u00fcr\u00fcnmesine izin verir. Politika ise, Snowflake&#8217;in veri kovan\u0131na (<code>data_landing_bucket<\/code>) okuma ve yazma eri\u015fimi sa\u011flar. Bu, Snowflake&#8217;in S3&#8217;teki verileri al\u0131p i\u015flemesi i\u00e7in temel bir ad\u0131md\u0131r.<\/p>\n<h3>Snowflake Entegrasyonu: AWS S3 ve IAM Rolleri ile G\u00fcvenli Ba\u011flant\u0131<\/h3>\n<p>AWS altyap\u0131m\u0131z\u0131 haz\u0131rlad\u0131ktan sonra, s\u0131ra Snowflake taraf\u0131ndaki entegrasyona geliyor. Terraform, Snowflake kaynaklar\u0131n\u0131 da y\u00f6netebilir, bu da veri ambar\u0131m\u0131z\u0131n yap\u0131land\u0131rmas\u0131n\u0131 kod olarak tutmam\u0131z\u0131 sa\u011flar. Bu b\u00f6l\u00fcmde, Snowflake&#8217;te bir veritaban\u0131, \u015fema ve S3 kovam\u0131za i\u015faret eden harici bir a\u015fama (external stage) olu\u015fturaca\u011f\u0131z.<\/p>\n<p>\u00d6ncelikle, Snowflake sa\u011flay\u0131c\u0131s\u0131n\u0131 yap\u0131land\u0131rmam\u0131z gerekir:<\/p>\n<div class=\"code-container\">\n<pre><code>\nprovider \"snowflake\" {\n  account  = var.snowflake_account_name\n  username = var.snowflake_user\n  password = var.snowflake_password\n  role     = \"SYSADMIN\" # veya uygun bir rol\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu blok, Terraform&#8217;un Snowflake ile nas\u0131l kimlik do\u011frulamas\u0131 yapaca\u011f\u0131n\u0131 belirtir. G\u00fcvenlik nedeniyle, <code>username<\/code> ve <code>password<\/code> gibi hassas bilgileri do\u011frudan kodda tutmak yerine, ortam de\u011fi\u015fkenleri veya Terraform Cloud gibi g\u00fcvenli bir mekanizma arac\u0131l\u0131\u011f\u0131yla sa\u011flamak en iyi uygulamad\u0131r.<\/p>\n<p>\u015eimdi, Snowflake&#8217;te bir veritaban\u0131 ve \u015fema olu\u015ftural\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>\nresource \"snowflake_database\" \"data_landing_db\" {\n  name    = \"DATA_LANDING_DB_${upper(var.environment)}\"\n  comment = \"Veri Landing Zone i\u00e7in ana veritaban\u0131.\"\n}\n\nresource \"snowflake_schema\" \"raw_data_schema\" {\n  database = snowflake_database.data_landing_db.name\n  name     = \"RAW_DATA\"\n  comment  = \"Ham verilerin depoland\u0131\u011f\u0131 \u015fema.\"\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu kod, veri landing zone&#8217;umuz i\u00e7in \u00f6zel bir veritaban\u0131 ve ham verileri i\u00e7erecek bir \u015fema olu\u015fturur.<\/p>\n<p>En kritik entegrasyon ad\u0131m\u0131, Snowflake&#8217;in AWS S3 kovam\u0131za eri\u015fmesini sa\u011flayacak bir depolama entegrasyonu (storage integration) ve harici bir a\u015fama (external stage) olu\u015fturmakt\u0131r. Depolama entegrasyonu, AWS IAM rol\u00fcm\u00fcz ile Snowflake aras\u0131nda g\u00fcvenli bir k\u00f6pr\u00fc kurar.<\/p>\n<div class=\"code-container\">\n<pre><code>\nresource \"snowflake_storage_integration\" \"s3_integration\" {\n  name                       = \"S3_INTEGRATION_${upper(var.environment)}\"\n  type                       = \"EXTERNAL_STAGE\"\n  storage_provider           = \"S3\"\n  enabled                    = true\n  storage_aws_role_arn       = aws_iam_role.snowflake_s3_access_role.arn\n  storage_allowed_locations  = [\"s3:\/\/${aws_s3_bucket.data_landing_bucket.id}\/\"]\n  comment                    = \"AWS S3 kovalar\u0131na eri\u015fim sa\u011flayan depolama entegrasyonu.\"\n}\n\nresource \"snowflake_stage\" \"raw_data_stage\" {\n  name        = \"RAW_DATA_STAGE\"\n  database    = snowflake_database.data_landing_db.name\n  schema      = snowflake_schema.raw_data_schema.name\n  url         = \"s3:\/\/${aws_s3_bucket.data_landing_bucket.id}\/\"\n  storage_integration = snowflake_storage_integration.s3_integration.name\n  file_format = \"TYPE = CSV FIELD_DELIMITER = ',' SKIP_HEADER = 1\" # Varsay\u0131lan dosya format\u0131\n  comment     = \"Ham verilerin S3'ten y\u00fcklenece\u011fi harici a\u015fama.\"\n}\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Burada, <code>snowflake_storage_integration<\/code> kayna\u011f\u0131, daha \u00f6nce olu\u015fturdu\u011fumuz AWS IAM rol\u00fcn\u00fc kullanarak Snowflake&#8217;in S3&#8217;e eri\u015fim yetkisini tan\u0131mlar. <code>storage_allowed_locations<\/code> parametresi, Snowflake&#8217;in hangi S3 kovalar\u0131na eri\u015febilece\u011fini k\u0131s\u0131tlar. Ard\u0131ndan, <code>snowflake_stage<\/code> kayna\u011f\u0131, bu depolama entegrasyonunu kullanarak S3&#8217;teki verileri Snowflake&#8217;e y\u00fcklemek i\u00e7in bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. <code>file_format<\/code> parametresi, varsay\u0131lan dosya bi\u00e7imini (\u00f6rne\u011fin CSV) ve ayarlar\u0131n\u0131 belirtir, bu da veri y\u00fckleme s\u00fcre\u00e7lerini basitle\u015ftirir.<\/p>\n<p>Bu entegrasyonlar tamamland\u0131\u011f\u0131nda, veri m\u00fchendisleri ve analistler, AWS S3&#8217;e b\u0131rak\u0131lan ham verilere Snowflake \u00fczerinden g\u00fcvenli ve kolay bir \u015fekilde eri\u015febilir, sorgulayabilir ve i\u015fleyebilirler. T\u00fcm bu yap\u0131land\u0131rman\u0131n Terraform ile kod olarak y\u00f6netilmesi, de\u011fi\u015fikliklerin izlenebilirli\u011fini, tekrarlanabilirli\u011fini ve hata oran\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<h3>CI\/CD S\u00fcre\u00e7lerini Otomatikle\u015ftirmek: Neden Kritik ve Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>Terraform ile altyap\u0131m\u0131z\u0131 kod olarak tan\u0131mlamak harika bir ba\u015flang\u0131\u00e7t\u0131r, ancak bu kodun g\u00fcvenli, tutarl\u0131 ve verimli bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flamak i\u00e7in CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Teslimat) s\u00fcre\u00e7lerine ihtiyac\u0131m\u0131z vard\u0131r. CI\/CD, altyap\u0131 de\u011fi\u015fikliklerinin otomatik olarak test edilmesini, onaylanmas\u0131n\u0131 ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayarak manuel hatalar\u0131 minimize eder ve da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<p><strong>Neden CI\/CD Kritik?<\/strong><\/p>\n<ul>\n<li><strong>Tutarl\u0131l\u0131k:<\/strong> Her da\u011f\u0131t\u0131m\u0131n ayn\u0131 ad\u0131mlar\u0131 takip etmesini sa\u011flayarak farkl\u0131 ortamlar (dev, test, prod) aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 garanti eder.<\/li>\n<li><strong>H\u0131z:<\/strong> Manuel ad\u0131mlar\u0131 ortadan kald\u0131rarak altyap\u0131 de\u011fi\u015fikliklerinin dakikalar i\u00e7inde da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Hata Azaltma:<\/strong> Otomatik testler ve do\u011frulama ad\u0131mlar\u0131 sayesinde insan hatalar\u0131n\u0131 ve yap\u0131land\u0131rma yanl\u0131\u015fl\u0131klar\u0131n\u0131 en aza indirir.<\/li>\n<li><strong>\u0130zlenebilirlik ve Denetlenebilirlik:<\/strong> Her de\u011fi\u015fikli\u011fin kim taraf\u0131ndan, ne zaman ve hangi ama\u00e7la yap\u0131ld\u0131\u011f\u0131n\u0131 kaydeder, bu da denetim ve uyumluluk i\u00e7in \u00f6nemlidir.<\/li>\n<li><strong>Geri Alma Kolayl\u0131\u011f\u0131:<\/strong> Hatal\u0131 bir da\u011f\u0131t\u0131m durumunda, \u00f6nceki kararl\u0131 s\u00fcr\u00fcme h\u0131zl\u0131ca geri d\u00f6nme yetene\u011fi sunar.<\/li>\n<\/ul>\n<p><strong>CI\/CD S\u00fcre\u00e7leri Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>Tipik bir Terraform CI\/CD i\u015f ak\u0131\u015f\u0131 a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 i\u00e7erir:<\/p>\n<ol>\n<li><strong>Kod De\u011fi\u015fikli\u011fi:<\/strong> Bir geli\u015ftirici, Terraform kodunda bir de\u011fi\u015fiklik yapar ve bu de\u011fi\u015fikli\u011fi Git deposuna (\u00f6rne\u011fin GitHub, GitLab, AWS CodeCommit) g\u00f6nderir.<\/li>\n<li><strong>S\u00fcrekli Entegrasyon (CI):<\/strong>\n<ul>\n<li><strong>Kod Do\u011frulama:<\/strong> Git deposuna yap\u0131lan her push veya pull request (\u00e7ekme iste\u011fi) tetiklendi\u011finde, CI pipeline&#8217;\u0131 ba\u015flar. \u0130lk ad\u0131m, Terraform kodunun s\u00f6zdizimsel olarak ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131 kontrol etmektir (<code>terraform validate<\/code>).<\/li>\n<li><strong>Formatlama Kontrol\u00fc:<\/strong> Kodun belirlenen stil k\u0131lavuzlar\u0131na uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol eder (<code>terraform fmt -check<\/code>).<\/li>\n<li><strong>Statik Analiz:<\/strong> G\u00fcvenlik a\u00e7\u0131klar\u0131, performans sorunlar\u0131 veya uyumluluk ihlalleri i\u00e7in kodu analiz eder (<code>tflint<\/code>, <code>checkov<\/code> gibi ara\u00e7larla).<\/li>\n<li><strong>Plan Olu\u015fturma:<\/strong> En kritik ad\u0131m, <code>terraform plan<\/code> komutunu \u00e7al\u0131\u015ft\u0131rmakt\u0131r. Bu komut, Terraform&#8217;un mevcut altyap\u0131 durumu ile yeni kod aras\u0131ndaki farklar\u0131 analiz eder ve yap\u0131lacak de\u011fi\u015fiklikleri g\u00f6sterir. Bu plan, genellikle bir pull request yorumu olarak yay\u0131nlan\u0131r, b\u00f6ylece ekip \u00fcyeleri de\u011fi\u015fiklikleri inceleyebilir ve onaylayabilir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Manuel Onay (\u0130ste\u011fe Ba\u011fl\u0131):<\/strong> \u00d6zellikle \u00fcretim ortamlar\u0131 i\u00e7in, <code>terraform apply<\/code> i\u015flemini tetiklemeden \u00f6nce bir insan onay\u0131 ad\u0131m\u0131 eklenebilir. Bu, kritik de\u011fi\u015fikliklerin g\u00f6zden ka\u00e7mamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>S\u00fcrekli Teslimat\/Da\u011f\u0131t\u0131m (CD):<\/strong>\n<ul>\n<li><strong>Uygulama (Apply):<\/strong> Onayland\u0131ktan sonra, CD pipeline&#8217;\u0131 <code>terraform apply -auto-approve<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak planlanan de\u011fi\u015fiklikleri AWS ve Snowflake \u00fczerinde uygular.<\/li>\n<li><strong>Durum G\u00fcncellemesi:<\/strong> Terraform, state dosyas\u0131n\u0131 g\u00fcnceller ve altyap\u0131n\u0131n yeni durumunu kaydeder.<\/li>\n<li><strong>Bildirim:<\/strong> Da\u011f\u0131t\u0131m\u0131n ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131na dair ilgili kanallara (Slack, e-posta) bildirim g\u00f6nderilir.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u00d6rnek bir GitHub Actions i\u015f ak\u0131\u015f\u0131 (workflow) a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcnebilir:<\/p>\n<div class=\"code-container\">\n<pre><code>\nname: Terraform CI\/CD for Landing Zone\n\non:\n  pull_request:\n    branches:\n      - main\n  push:\n    branches:\n      - main\n\njobs:\n  terraform:\n    name: 'Terraform Plan & Apply'\n    runs-on: ubuntu-latest\n    env:\n      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}\n      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n      SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}\n      SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}\n      SNOWFLAKE_ACCOUNT_NAME: ${{ secrets.SNOWFLAKE_ACCOUNT_NAME }}\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: Terraform Init\n        run: terraform init\n\n      - name: Terraform Validate\n        run: terraform validate\n\n      - name: Terraform Plan\n        id: plan\n        run: terraform plan -no-color -out=tfplan\n        continue-on-error: true # Plan hata verse bile devam et\n\n      - name: Update Pull Request Status\n        if: github.event_name == 'pull_request'\n        uses: actions\/github-script@v6\n        with:\n          script: |\n            const output = <code>#### Terraform Plan \\<\/code>${{ steps.plan.outcome }}\\<code>\\<\/code>\\<code>\\<\/code>terraform\n            ${process.env.PLAN_OUTPUT}\n            \\<code>\\<\/code>\\<code><\/code>;\n            github.rest.issues.createComment({\n              issue_number: context.issue.number,\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              body: output\n            })\n        env:\n          PLAN_OUTPUT: ${{ steps.plan.outputs.stdout }}\n\n      - name: Terraform Apply\n        if: github.ref == 'refs\/heads\/main' && github.event_name == 'push' && steps.plan.outcome == 'success'\n        run: terraform apply -auto-approve tfplan\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu \u00f6rnek, bir pull request a\u00e7\u0131ld\u0131\u011f\u0131nda <code>terraform plan<\/code> \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 ve sonucun PR yorumu olarak g\u00f6sterilmesini sa\u011flar. <code>main<\/code> dal\u0131na yap\u0131lan bir push durumunda ise, plan ba\u015far\u0131l\u0131ysa <code>terraform apply<\/code> otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Hassas bilgiler (API anahtarlar\u0131, \u015fifreler) GitHub Secrets gibi g\u00fcvenli mekanizmalar arac\u0131l\u0131\u011f\u0131yla sa\u011flanmal\u0131d\u0131r.<\/p>\n<p>CI\/CD s\u00fcre\u00e7lerini do\u011fru bir \u015fekilde uygulamak, veri platformunuzun h\u0131zl\u0131, g\u00fcvenli ve s\u00fcrd\u00fcr\u00fclebilir bir \u015fekilde geli\u015fmesini sa\u011flar. Ba\u015flang\u0131\u00e7ta biraz \u00e7aba gerektirse de, uzun vadede operasyonel y\u00fck\u00fc azalt\u0131r ve ekiplerin daha de\u011ferli i\u015flere odaklanmas\u0131na olanak tan\u0131r.<\/p>\n<h2>CI\/CD \u0130ncelemesinden \u00d6\u011frenilen Dersler ve En \u0130yi Uygulamalar<\/h2>\n<p>Bir AWS ve Snowflake landing zone&#8217;unu Terraform ile kurarken ve CI\/CD s\u00fcre\u00e7lerini devreye al\u0131rken bir\u00e7ok de\u011ferli ders \u00e7\u0131kard\u0131k. Bu b\u00f6l\u00fcmde, bu deneyimlerden edindi\u011fimiz en iyi uygulamalar\u0131 ve ipu\u00e7lar\u0131n\u0131 payla\u015farak sizin de benzer hatalara d\u00fc\u015fmenizi engellemeyi ama\u00e7l\u0131yoruz.<\/p>\n<h3>Devlet Y\u00f6netimi (State Management) ve Kilitleme (Locking) Stratejileri<\/h3>\n<p>Terraform&#8217;un en kritik bile\u015fenlerinden biri, da\u011f\u0131tt\u0131\u011f\u0131 altyap\u0131n\u0131n mevcut durumunu (state) takip eden durum dosyas\u0131d\u0131r (state file). Bu dosya, Terraform&#8217;un kaynaklar\u0131 do\u011fru bir \u015fekilde y\u00f6netmesini ve de\u011fi\u015fiklikleri uygulamas\u0131n\u0131 sa\u011flar. Ancak, ekip ortamlar\u0131nda veya CI\/CD boru hatlar\u0131nda bu durum dosyas\u0131n\u0131n y\u00f6netimi karma\u015f\u0131k hale gelebilir.<\/p>\n<ul>\n<li><strong>Uzaktan Durum (Remote State) Kullan\u0131m\u0131:<\/strong> Yerel durum dosyalar\u0131n\u0131 kullanmaktan ka\u00e7\u0131n\u0131n. Bunun yerine, AWS S3 gibi g\u00fcvenli, s\u00fcr\u00fcm kontroll\u00fc ve yedekli bir uzaktan depolama alan\u0131 kullan\u0131n. Bu, durum dosyas\u0131n\u0131n kaybolmas\u0131n\u0131 veya bozulmas\u0131n\u0131 \u00f6nler ve ekip \u00fcyelerinin tutarl\u0131 bir duruma eri\u015fmesini sa\u011flar. Daha \u00f6nce verdi\u011fimiz \u00f6rnekte S3 backend kullan\u0131m\u0131n\u0131 g\u00f6stermi\u015ftik.<\/li>\n<li><strong>Durum Kilitleme (State Locking):<\/strong> Ayn\u0131 anda birden fazla ki\u015finin veya CI\/CD s\u00fcrecinin durum dosyas\u0131n\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015fmas\u0131n\u0131 \u00f6nlemek i\u00e7in durum kilitleme mekanizmalar\u0131n\u0131 etkinle\u015ftirin. AWS i\u00e7in DynamoDB, Terraform&#8217;un durum kilitleme i\u00e7in yayg\u0131n olarak kulland\u0131\u011f\u0131 bir hizmettir. Bu, durum dosyas\u0131n\u0131n bozulmas\u0131n\u0131 veya yanl\u0131\u015f de\u011fi\u015fikliklerin uygulanmas\u0131n\u0131 engeller. <code>terraform init<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131rken DynamoDB tablosunu belirtmek, bu \u00f6zelli\u011fi etkinle\u015ftirir.<\/li>\n<li><strong>Hassas Verileri Durum Dosyas\u0131ndan Uzak Tutma:<\/strong> Durum dosyas\u0131, da\u011f\u0131t\u0131lan kaynaklar\u0131n yap\u0131land\u0131rmas\u0131n\u0131 i\u00e7erir. Ancak, veritaban\u0131 \u015fifreleri veya API anahtarlar\u0131 gibi hassas bilgileri asla durum dosyas\u0131nda a\u00e7\u0131k metin olarak saklamay\u0131n. Bunlar\u0131 AWS Secrets Manager, HashiCorp Vault veya sops gibi ara\u00e7larla y\u00f6netin ve Terraform&#8217;a \u00e7al\u0131\u015fma zaman\u0131nda g\u00fcvenli bir \u015fekilde enjekte edin.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ve Y\u00f6netilebilir Durum Dosyalar\u0131:<\/strong> Tek bir monolitik durum dosyas\u0131 yerine, mod\u00fcller veya ayr\u0131 k\u00f6k mod\u00fcller kullanarak durum dosyas\u0131n\u0131 daha k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131r\u0131n. Bu, de\u011fi\u015fikliklerin kapsam\u0131n\u0131 daralt\u0131r, hata durumunda geri alma i\u015flemlerini kolayla\u015ft\u0131r\u0131r ve paralel geli\u015ftirmeyi m\u00fcmk\u00fcn k\u0131lar.<\/li>\n<\/ul>\n<h3>Mod\u00fcler Yap\u0131lar ve Yeniden Kullan\u0131labilirlik (Reusability) Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Karma\u015f\u0131k altyap\u0131lar\u0131n y\u00f6netiminde mod\u00fclerlik, kod tekrar\u0131n\u0131 azaltmak, tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak ve y\u00f6netimi kolayla\u015ft\u0131rmak i\u00e7in anahtar rol oynar. Terraform mod\u00fclleri, belirli bir i\u015flevi yerine getiren (\u00f6rne\u011fin, bir VPC veya bir Snowflake veritaban\u0131 olu\u015fturma) yeniden kullan\u0131labilir yap\u0131land\u0131rma bloklar\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Mod\u00fcl Tasar\u0131m Prensipleri:<\/strong> Mod\u00fcllerinizi tek bir sorumluluk prensibine g\u00f6re tasarlay\u0131n. Bir mod\u00fcl, belirli bir AWS hizmetini (\u00f6rne\u011fin, S3 kovas\u0131), bir Snowflake nesnesini (\u00f6rne\u011fin, veritaban\u0131 ve \u015femalar) veya mant\u0131ksal bir bile\u015feni (\u00f6rne\u011fin, bir g\u00fcvenlik grubu ve ili\u015fkili kurallar\u0131) y\u00f6netmelidir.<\/li>\n<li><strong>Giri\u015f (Input) ve \u00c7\u0131k\u0131\u015f (Output) Tan\u0131mlar\u0131:<\/strong> Mod\u00fcllerinizin net giri\u015f (<code>variable<\/code>) ve \u00e7\u0131k\u0131\u015f (<code>output<\/code>) de\u011ferleri olmal\u0131d\u0131r. Giri\u015fler, mod\u00fcl\u00fcn davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirmek i\u00e7in kullan\u0131l\u0131rken, \u00e7\u0131k\u0131\u015flar di\u011fer mod\u00fcller veya k\u00f6k mod\u00fcl taraf\u0131ndan kullan\u0131lacak bilgileri sa\u011flar.<\/li>\n<li><strong>Mod\u00fcl Kaynaklar\u0131:<\/strong> Mod\u00fclleri yerel dosya sisteminizden, Git depolar\u0131ndan (GitHub, GitLab), Terraform Registry&#8217;den veya S3 kovalar\u0131ndan y\u00fckleyebilirsiniz. Kurulu\u015funuz i\u00e7inde payla\u015f\u0131lan mod\u00fcller i\u00e7in \u00f6zel bir Git deposu veya Terraform Cloud\/Enterprise kullanmak en iyi yakla\u015f\u0131md\u0131r.<\/li>\n<li><strong>\u00d6rnek Mod\u00fcl Yap\u0131s\u0131:<\/strong>\n<div class=\"code-container\">\n<pre><code>\nmodules\/\n\u251c\u2500\u2500 s3-bucket\/\n\u2502   \u251c\u2500\u2500 main.tf\n\u2502   \u251c\u2500\u2500 variables.tf\n\u2502   \u2514\u2500\u2500 outputs.tf\n\u2514\u2500\u2500 snowflake-database\/\n    \u251c\u2500\u2500 main.tf\n    \u251c\u2500\u2500 variables.tf\n    \u2514\u2500\u2500 outputs.tf\n              <\/code><\/pre>\n<\/p><\/div>\n<p>Bu yap\u0131da, <code>s3-bucket<\/code> mod\u00fcl\u00fc bir S3 kovas\u0131 olu\u015ftururken, <code>snowflake-database<\/code> mod\u00fcl\u00fc Snowflake&#8217;te bir veritaban\u0131 ve \u015femalar olu\u015fturur. Ana yap\u0131land\u0131rma dosyan\u0131z (<code>main.tf<\/code>) bu mod\u00fclleri \u00e7a\u011f\u0131r\u0131r:<\/p>\n<div class=\"code-container\">\n<pre><code>\nmodule \"data_landing_s3\" {\n  source      = \".\/modules\/s3-bucket\"\n  bucket_name = \"my-company-raw-data-${var.environment}\"\n  environment = var.environment\n}\n\nmodule \"snowflake_landing_db\" {\n  source      = \".\/modules\/snowflake-database\"\n  db_name     = \"LANDING_DB_${upper(var.environment)}\"\n  environment = var.environment\n}\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<\/ul>\n<h3>G\u00fcvenlik ve Uyumluluk (Compliance) \u0130\u00e7in Otomatik Kontroller<\/h3>\n<p>Altyap\u0131y\u0131 kod olarak y\u00f6netirken g\u00fcvenlik ve uyumluluk, manuel incelemelerle de\u011fil, otomatik kontrollerle sa\u011flanmal\u0131d\u0131r. CI\/CD boru hatt\u0131n\u0131za entegre edilen ara\u00e7lar, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 veya uyumluluk ihlallerini da\u011f\u0131t\u0131m \u00f6ncesinde tespit etmenize yard\u0131mc\u0131 olur.<\/p>\n<ul>\n<li><strong>Statik Kod Analizi:<\/strong>\n<ul>\n<li><strong><code>terraform validate<\/code>:<\/strong> Kodun s\u00f6zdizimsel olarak do\u011fru olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<li><strong><code>tflint<\/code>:<\/strong> Terraform kodundaki hatalar\u0131, uyar\u0131lar\u0131 ve stil sorunlar\u0131n\u0131 tespit eder.<\/li>\n<li><strong><code>checkov<\/code> \/ <code>terrascan<\/code>:<\/strong> G\u00fcvenlik politikalar\u0131n\u0131 ve uyumluluk standartlar\u0131n\u0131 (CIS, PCI-DSS vb.) ihlal eden yap\u0131land\u0131rmalar\u0131 bulur. \u00d6rne\u011fin, genel eri\u015fime a\u00e7\u0131k bir S3 kovas\u0131 veya \u015fifrelenmemi\u015f bir veritaban\u0131 gibi durumlar\u0131 yakalar.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Politika Olarak Kod (Policy as Code &#8211; PaC):<\/strong> Sentinel (Terraform Cloud\/Enterprise i\u00e7in) veya OPA Gatekeeper gibi ara\u00e7lar kullanarak, altyap\u0131 de\u011fi\u015fikliklerinin belirli g\u00fcvenlik veya uyumluluk politikalar\u0131na uygunlu\u011funu zorunlu k\u0131labilirsiniz. \u00d6rne\u011fin, t\u00fcm S3 kovalar\u0131n\u0131n sunucu taraf\u0131 \u015fifreleme ile olu\u015fturulmas\u0131n\u0131 veya t\u00fcm IAM rollerinin belirli bir adland\u0131rma kural\u0131na uymas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<li><strong>S\u0131r Y\u00f6netimi (Secret Management):<\/strong> Hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) asla do\u011frudan Terraform kodunda veya durum dosyas\u0131nda saklamay\u0131n. Bunun yerine, AWS Secrets Manager, HashiCorp Vault veya Azure Key Vault gibi s\u0131r y\u00f6netim \u00e7\u00f6z\u00fcmlerini kullan\u0131n. Terraform, bu s\u0131rlar\u0131 \u00e7al\u0131\u015fma zaman\u0131nda g\u00fcvenli bir \u015fekilde \u00e7ekebilir.<\/li>\n<li><strong>Eri\u015fim Kontrol\u00fc:<\/strong> CI\/CD s\u00fcre\u00e7lerinin ve Terraform&#8217;un AWS ve Snowflake gibi bulut sa\u011flay\u0131c\u0131lar\u0131na eri\u015fimi i\u00e7in en az ayr\u0131cal\u0131k (least privilege) prensibini uygulay\u0131n. Yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 kaynaklara ve eylemlere eri\u015fim izni verin. IAM rolleri ve politikalar\u0131 bu konuda kritik \u00f6neme sahiptir.<\/li>\n<\/ul>\n<h3>Maliyet Optimizasyonu ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Bulut tabanl\u0131 bir veri platformu kurarken maliyetleri kontrol alt\u0131nda tutmak ve performans\u0131 optimize etmek s\u00fcrekli bir \u00e7abad\u0131r. Terraform ve CI\/CD s\u00fcre\u00e7leriniz, bu hedeflere ula\u015fman\u0131za yard\u0131mc\u0131 olabilir.<\/p>\n<ul>\n<li><strong>Kaynak Etiketleme (Tagging):<\/strong> T\u00fcm AWS ve Snowflake kaynaklar\u0131n\u0131z\u0131 tutarl\u0131 bir \u015fekilde etiketleyin (\u00f6rne\u011fin, <code>Environment<\/code>, <code>Project<\/code>, <code>Owner<\/code>). Bu etiketler, maliyet analizi, kaynak takibi ve otomasyon i\u00e7in hayati \u00f6neme sahiptir. Terraform, etiketleri kaynak tan\u0131mlar\u0131n\u0131za kolayca eklemenizi sa\u011flar.<\/li>\n<li><strong>Do\u011fru Boyutland\u0131rma (Right-Sizing):<\/strong> Kaynaklar\u0131 a\u015f\u0131r\u0131 sa\u011flamaktan ka\u00e7\u0131n\u0131n. AWS EC2 \u00f6rnekleri, RDS veritabanlar\u0131 veya Snowflake veri ambarlar\u0131 i\u00e7in ba\u015flang\u0131\u00e7ta k\u00fc\u00e7\u00fck boyutlarla ba\u015flay\u0131n ve performans\u0131 izleyerek gerekti\u011finde \u00f6l\u00e7eklendirin. Terraform, bu boyutland\u0131rma parametrelerini kolayca de\u011fi\u015ftirmenize olanak tan\u0131r.<\/li>\n<li><strong>Otomatik Durdurma ve Yeniden Ba\u015flatma:<\/strong> \u00d6zellikle Snowflake veri ambarlar\u0131 i\u00e7in otomatik durdurma (auto-suspend) ve otomatik yeniden ba\u015flatma (auto-resume) \u00f6zelliklerini etkinle\u015ftirin. Bu, kullan\u0131lmad\u0131\u011f\u0131 zamanlarda i\u015flem maliyetlerinden tasarruf etmenizi sa\u011flar.\n<div class=\"code-container\">\n<pre><code>\nresource \"snowflake_warehouse\" \"my_warehouse\" {\n  name           = \"MY_ANALYTICS_WH\"\n  warehouse_size = \"XSMALL\"\n  auto_suspend   = 60 # 60 saniye sonra otomatik durdur\n  auto_resume    = true\n}\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<li><strong>Veri Ya\u015fam D\u00f6ng\u00fcs\u00fc Y\u00f6netimi:<\/strong> S3 kovalar\u0131nda depolanan eski veya az kullan\u0131lan veriler i\u00e7in ya\u015fam d\u00f6ng\u00fcs\u00fc kurallar\u0131 (lifecycle rules) tan\u0131mlay\u0131n. Bu, verileri daha ucuz depolama s\u0131n\u0131flar\u0131na (\u00f6rne\u011fin, Glacier) ta\u015f\u0131yarak veya belirli bir s\u00fcre sonra silerek maliyetleri d\u00fc\u015f\u00fcr\u00fcr.<\/li>\n<li><strong>\u0130zleme ve Uyar\u0131 (Monitoring &#038; Alerting):<\/strong> AWS CloudWatch, Datadog veya di\u011fer izleme ara\u00e7lar\u0131n\u0131 kullanarak kaynak kullan\u0131m\u0131n\u0131, performans metriklerini ve maliyet e\u011filimlerini s\u00fcrekli izleyin. Anormal durumlar veya maliyet art\u0131\u015flar\u0131 i\u00e7in uyar\u0131lar ayarlay\u0131n.<\/li>\n<\/ul>\n<p>Bu dersler ve en iyi uygulamalar, veri platformunuzun sadece i\u015flevsel olmas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda g\u00fcvenli, \u00f6l\u00e7eklenebilir, y\u00f6netilebilir ve maliyet etkin olmas\u0131n\u0131 da sa\u011flayacakt\u0131r. CI\/CD s\u00fcre\u00e7lerinizin s\u00fcrekli iyile\u015ftirilmesi, bu hedeflere ula\u015fman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2>Gelece\u011fe Haz\u0131r Bir Veri Platformu \u0130\u00e7in Anahtarlar<\/h2>\n<p>Bu makale boyunca, AWS ve Snowflake kullanarak Terraform ile bir veri landing zone&#8217;u in\u015fa etmenin karma\u015f\u0131k ama \u00f6d\u00fcllendirici yolculu\u011funu detayl\u0131 bir \u015fekilde inceledik. Modern veri platformlar\u0131n\u0131n kar\u015f\u0131la\u015ft\u0131\u011f\u0131 zorluklardan ba\u015flayarak, temel teknolojilerin prensiplerine, ad\u0131m ad\u0131m pratik uygulamalara ve CI\/CD s\u00fcre\u00e7lerinden \u00e7\u0131kar\u0131lan de\u011ferli derslere kadar geni\u015f bir yelpazeyi ele ald\u0131k. G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, ba\u015far\u0131l\u0131 bir veri platformunun anahtar\u0131 sadece do\u011fru ara\u00e7lar\u0131 se\u00e7mek de\u011fil, ayn\u0131 zamanda bu ara\u00e7lar\u0131 otomasyon, g\u00fcvenlik ve mod\u00fclerlik prensipleriyle entegre etmektir.<\/p>\n<p>Terraform ile altyap\u0131y\u0131 kod olarak y\u00f6netmek, AWS ve Snowflake kaynaklar\u0131n\u0131z\u0131 tutarl\u0131, tekrarlanabilir ve hatas\u0131z bir \u015fekilde da\u011f\u0131tman\u0131z\u0131 sa\u011flar. CI\/CD boru hatlar\u0131 ise bu kodun s\u00fcrekli olarak do\u011frulanmas\u0131n\u0131, test edilmesini ve g\u00fcvenli bir \u015fekilde \u00fcretim ortam\u0131na ta\u015f\u0131nmas\u0131n\u0131 garanti eder. Uzaktan durum y\u00f6netimi, mod\u00fcler yap\u0131land\u0131rmalar, otomatik g\u00fcvenlik kontrolleri ve maliyet optimizasyon stratejileri gibi en iyi uygulamalar\u0131 benimsemek, veri platformunuzun uzun vadede s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve ba\u015far\u0131s\u0131n\u0131 temin edecektir. Unutmay\u0131n ki teknoloji s\u00fcrekli geli\u015fiyor ve bu alandaki en iyi uygulamalar da zamanla evriliyor. Bu nedenle, \u00f6\u011frenmeye ve sistemlerinizi s\u00fcrekli olarak iyile\u015ftirmeye a\u00e7\u0131k olmak, gelece\u011fe haz\u0131r bir veri platformu olu\u015fturman\u0131n temelidir.<\/p>\n<p>Umar\u0131z bu makale, kendi AWS ve Snowflake tabanl\u0131 veri landing zone&#8217;unuzu kurma yolculu\u011funuzda size yol g\u00f6sterici olmu\u015ftur. Veri d\u00fcnyas\u0131ndaki ba\u015far\u0131, do\u011fru ara\u00e7lar\u0131 do\u011fru stratejilerle birle\u015ftirmekten ge\u00e7er ve bu sayede i\u015finize ger\u00e7ek de\u011fer katabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>AWS Landing Zone nedir?<\/strong><\/p>\n<p>AWS Landing Zone, bir kurulu\u015fun AWS bulut ortam\u0131nda g\u00fcvenli, \u00e7ok hesapl\u0131 ve \u00f6l\u00e7eklenebilir bir temel olu\u015fturmas\u0131n\u0131 sa\u011flayan, \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f bir yap\u0131land\u0131rma setidir. Genellikle merkezi kimlik y\u00f6netimi, a\u011f yap\u0131land\u0131rmalar\u0131 ve g\u00fcvenlik politikalar\u0131 gibi temel bile\u015fenleri i\u00e7erir.<\/p>\n<\/li>\n<li>\n            <strong>Snowflake neden tercih edilmeli?<\/strong><\/p>\n<p>Snowflake, bulut tabanl\u0131, s\u0131f\u0131r y\u00f6netim gerektiren, depolama ve i\u015flem katmanlar\u0131n\u0131 birbirinden ay\u0131ran modern bir veri ambar\u0131d\u0131r. Y\u00fcksek performans, esneklik, \u00f6l\u00e7eklenebilirlik, veri payla\u015f\u0131m kolayl\u0131\u011f\u0131 ve maliyet verimlili\u011fi gibi avantajlar\u0131 nedeniyle modern veri platformlar\u0131 i\u00e7in ideal bir se\u00e7imdir.<\/p>\n<\/li>\n<li>\n            <strong>Terraform ile IaC kullanman\u0131n temel faydalar\u0131 nelerdir?<\/strong><\/p>\n<p>Terraform ile Infrastructure as Code (IaC) kullanmak, altyap\u0131y\u0131 kod olarak tan\u0131mlayarak otomasyon, tutarl\u0131l\u0131k, tekrarlanabilirlik, versiyon kontrol\u00fc ve hata oran\u0131n\u0131n azalmas\u0131 gibi \u00f6nemli faydalar sa\u011flar. Ayr\u0131ca, \u00e7oklu bulut deste\u011fi sayesinde farkl\u0131 sa\u011flay\u0131c\u0131lar \u00fczerinde altyap\u0131 y\u00f6netimi kolayla\u015f\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>CI\/CD, Terraform ile nas\u0131l entegre edilir?<\/strong><\/p>\n<p>CI\/CD, Terraform kodunun otomatik olarak do\u011frulanmas\u0131n\u0131 (<code>terraform validate<\/code>), planlanmas\u0131n\u0131 (<code>terraform plan<\/code>) ve da\u011f\u0131t\u0131lmas\u0131n\u0131 (<code>terraform apply<\/code>) sa\u011flayan bir otomasyon s\u00fcrecidir. GitHub Actions, GitLab CI veya AWS CodePipeline gibi ara\u00e7lar kullan\u0131larak, kod de\u011fi\u015fiklikleri bir Git deposuna g\u00f6nderildi\u011finde bu s\u00fcre\u00e7ler tetiklenebilir.<\/p>\n<\/li>\n<li>\n            <strong>Terraform state y\u00f6netimi neden \u00f6nemlidir?<\/strong><\/p>\n<p>Terraform state y\u00f6netimi, da\u011f\u0131t\u0131lan altyap\u0131n\u0131n mevcut durumunu takip eden kritik bir s\u00fcre\u00e7tir. Do\u011fru state y\u00f6netimi (uzaktan state, state kilitleme), ekip ortamlar\u0131nda tutarl\u0131l\u0131\u011f\u0131 sa\u011flar, veri kayb\u0131n\u0131 \u00f6nler ve ayn\u0131 anda yap\u0131lan de\u011fi\u015fikliklerin \u00e7ak\u0131\u015fmas\u0131n\u0131 engeller. Hassas verilerin state dosyas\u0131nda saklanmamas\u0131 da g\u00fcvenlik a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p>#AWS #Snowflake #Terraform #IaC #CICD #VeriPlatformu #BulutBili\u015fim #Otomasyon #G\u00fcvenlik<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/simulated-terraform-ci-cd-pipeline\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/simulated-terraform-ci-cd-pipeline<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i i\u015f d\u00fcnyas\u0131nda, veriye dayal\u0131 kararlar almak her zamankinden daha kritik hale geldi.","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":[1406],"tags":[],"class_list":{"0":"post-44822","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","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>AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i i\u015f d\u00fcnyas\u0131nda, veriye dayal\u0131 kararlar almak her zamankinden daha kritik hale geldi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-21T18:08:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-21T18:08:41+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=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler\",\"datePublished\":\"2026-09-21T18:08:09+00:00\",\"dateModified\":\"2026-09-21T18:08:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\"},\"wordCount\":4635,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AWS\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\",\"name\":\"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-09-21T18:08:09+00:00\",\"dateModified\":\"2026-09-21T18:08:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler\"}]},{\"@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":"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/","og_locale":"tr_TR","og_type":"article","og_title":"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler","og_description":"G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i i\u015f d\u00fcnyas\u0131nda, veriye dayal\u0131 kararlar almak her zamankinden daha kritik hale geldi.","og_url":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-09-21T18:08:09+00:00","article_modified_time":"2026-09-21T18:08:41+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler","datePublished":"2026-09-21T18:08:09+00:00","dateModified":"2026-09-21T18:08:41+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/"},"wordCount":4635,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AWS"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/","url":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/","name":"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-09-21T18:08:09+00:00","dateModified":"2026-09-21T18:08:41+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ve-snowflake-ile-terraform-destekli-landing-zone-kurulumu-ci-cd-incelemesinden-ogrenilenler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWS ve Snowflake ile Terraform Destekli Landing Zone Kurulumu: CI\/CD \u0130ncelemesinden \u00d6\u011frenilenler"}]},{"@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\/44822","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=44822"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44822\/revisions"}],"predecessor-version":[{"id":44823,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44822\/revisions\/44823"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}