{"id":32291,"date":"2025-10-20T01:01:16","date_gmt":"2025-10-19T22:01:16","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/"},"modified":"2025-10-20T01:01:16","modified_gmt":"2025-10-19T22:01:16","slug":"aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/","title":{"rendered":"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun"},"content":{"rendered":"<p><body><\/p>\n<p>AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.<\/p>\n<p>G\u00fcn\u00fcm\u00fczde dijital varl\u0131k sahibi olmak, bireylerden b\u00fcy\u00fck kurulu\u015flara kadar herkes i\u00e7in vazge\u00e7ilmez hale geldi. Peki, web sitenizi kurmak ve y\u00f6netmek neden bu kadar karma\u015f\u0131k olmak zorunda? Geleneksel web hosting yakla\u015f\u0131mlar\u0131 genellikle sunucu y\u00f6netimi, g\u00fcvenlik yamalar\u0131 ve \u00f6l\u00e7eklenebilirlik gibi ba\u015f a\u011fr\u0131lar\u0131 getirir. Ani trafik art\u0131\u015flar\u0131 sunucular\u0131 \u00e7\u00f6kertir, g\u00fcvenlik a\u00e7\u0131klar\u0131 veri ihlallerine yol a\u00e7abilir ve t\u00fcm bunlar y\u00fcksek maliyetlerle sonu\u00e7lanabilir. \u0130\u015fte tam bu noktada, statik web siteleri ve <strong>AWS CDK (Cloud Development Kit)<\/strong> ile altyap\u0131y\u0131 kod olarak (Infrastructure as Code &#8211; IaC) y\u00f6netme yakla\u015f\u0131m\u0131 devreye giriyor. Statik web siteleri, dinamik sunucu taraf\u0131 i\u015flemlerine ihtiya\u00e7 duymayan, HTML, CSS ve JavaScript dosyalar\u0131ndan olu\u015fan basit sitelerdir. H\u0131zl\u0131 y\u00fcklenirler, sald\u0131r\u0131lara kar\u015f\u0131 daha diren\u00e7lidirler ve neredeyse s\u0131n\u0131rs\u0131z \u00f6l\u00e7eklenebilirlik sunarlar. \u00dcstelik bak\u0131m maliyetleri de olduk\u00e7a d\u00fc\u015f\u00fckt\u00fcr. \u00d6zellikle ki\u015fisel portf\u00f6yler, bloglar, basit kurumsal siteler veya \u00fcr\u00fcn tan\u0131t\u0131m sayfalar\u0131 i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<p>Peki, statik bir web sitesi olu\u015fturmak neden AWS CDK ile daha iyi? AWS CDK, bulut altyap\u0131n\u0131z\u0131 tan\u0131d\u0131k programlama dillerini (Python, TypeScript, Java vb.) kullanarak tan\u0131mlaman\u0131za olanak tan\u0131yan bir \u00e7er\u00e7evedir. Bu, altyap\u0131n\u0131z\u0131 versiyon kontrol sistemlerinde y\u00f6netebilece\u011finiz, test edebilir hale getirebilece\u011finiz ve otomasyon s\u00fcre\u00e7lerine entegre edebilece\u011finiz anlam\u0131na gelir. Geleneksel olarak bulut kaynaklar\u0131n\u0131 manuel olarak veya karma\u015f\u0131k YAML\/JSON \u015fablonlar\u0131yla (CloudFormation) y\u00f6netmek zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k olabilirken, CDK bu s\u00fcreci modern yaz\u0131l\u0131m geli\u015ftirme pratikleriyle birle\u015ftirerek kolayla\u015ft\u0131r\u0131r. Python ile kod yazmaya al\u0131\u015fk\u0131n bir geli\u015ftiriciyseniz, bulut altyap\u0131n\u0131z\u0131 da Python ile tan\u0131mlamak size b\u00fcy\u00fck bir esneklik ve verimlilik sa\u011flayacakt\u0131r. Bu makalede, AWS CDK ve Python&#8217;\u0131 kullanarak temel bir statik web sitesi altyap\u0131s\u0131n\u0131 AWS \u00fczerinde nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Amac\u0131m\u0131z, sadece bir web sitesi kurmak de\u011fil, ayn\u0131 zamanda gelece\u011fin bulut geli\u015ftirme paradigmalar\u0131n\u0131 anlamak ve uygulamak i\u00e7in sa\u011flam bir temel atmakt\u0131r.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: Altyap\u0131y\u0131 kod olarak y\u00f6netmek (IaC), sadece otomasyon sa\u011flamakla kalmaz, ayn\u0131 zamanda altyap\u0131n\u0131z\u0131n s\u00fcrekli olarak ayn\u0131, tutarl\u0131 ve belgelenmi\u015f bir durumda olmas\u0131n\u0131 garanti eder. Bu, hata ay\u0131klama ve i\u015fbirli\u011fi s\u00fcre\u00e7lerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.\n  <\/div>\n<h2>Temel AWS Mimarisi ve Geli\u015ftirme Ortam\u0131: Statik Bir Web Sitesi \u0130\u00e7in Neler Gerekli?<\/h2>\n<p>Statik bir web sitesini AWS \u00fczerinde bar\u0131nd\u0131rmak i\u00e7in genellikle birka\u00e7 temel AWS servisini bir araya getiririz. Bu servislerin her birinin belirli bir rol\u00fc vard\u0131r ve birlikte sorunsuz bir deneyim sunarlar. \u0130lk olarak, web sitemizin dosyalar\u0131n\u0131 (HTML, CSS, JS, g\u00f6rseller) depolamak i\u00e7in <strong>Amazon S3 (Simple Storage Service)<\/strong> kullan\u0131l\u0131r. S3, y\u00fcksek dayan\u0131kl\u0131l\u0131k, \u00f6l\u00e7eklenebilirlik ve g\u00fcvenlik sunan nesne depolama servisidir. Web sitelerini do\u011frudan S3 \u00fczerinden yay\u0131nlayabilsek de, performans ve g\u00fcvenlik a\u00e7\u0131s\u0131ndan bir ad\u0131m \u00f6tesine gitmek \u00f6nemlidir.<\/p>\n<p>\u0130\u015fte bu noktada <strong>Amazon CloudFront<\/strong> devreye girer. CloudFront, global bir i\u00e7erik da\u011f\u0131t\u0131m a\u011f\u0131 (CDN) servisidir. Sitenizin i\u00e7eri\u011fini d\u00fcnya genelindeki Edge Location&#8217;lara (u\u00e7 konumlara) \u00f6nbelle\u011fe alarak kullan\u0131c\u0131lar\u0131n\u0131za co\u011frafi olarak en yak\u0131n noktadan sunar. Bu, web sitenizin y\u00fcklenme h\u0131z\u0131n\u0131 art\u0131r\u0131r ve gecikmeyi azalt\u0131r. Ayr\u0131ca CloudFront, SSL\/TLS \u015fifrelemesi (HTTPS) deste\u011fi ve temel DDoS korumas\u0131 gibi g\u00fcvenlik katmanlar\u0131 da sa\u011flar. Statik web siteniz i\u00e7in \u00fccretsiz SSL\/TLS sertifikas\u0131 sa\u011flamak i\u00e7in <strong>AWS Certificate Manager (ACM)<\/strong> kullan\u0131l\u0131r. ACM, sertifika y\u00f6netimini basitle\u015ftirir ve CloudFront ile entegrasyonu olduk\u00e7a kolayd\u0131r. Son olarak, e\u011fer sitenize \u00f6zel bir alan ad\u0131 (\u00f6rne\u011fin, <code>benimsitem.com<\/code>) atamak isterseniz, <strong>AWS Route 53<\/strong> (bulut tabanl\u0131 DNS servisi) bu y\u00f6nlendirmeyi sa\u011flar.<\/p>\n<h3>Geli\u015ftirme Ortam\u0131n\u0131z\u0131 Nas\u0131l Kurars\u0131n\u0131z?<\/h3>\n<p>AWS CDK ile \u00e7al\u0131\u015fmaya ba\u015flamadan \u00f6nce geli\u015ftirme ortam\u0131n\u0131z\u0131 haz\u0131rlaman\u0131z gerekir. \u0130\u015fte ad\u0131m ad\u0131m yapman\u0131z gerekenler:<\/p>\n<ol>\n<li><strong>AWS Hesab\u0131 ve CLI Kurulumu:<\/strong> Bir AWS hesab\u0131n\u0131z yoksa, <a href=\"https:\/\/aws.amazon.com\/free\/\" target=\"_blank\">AWS Free Tier<\/a> ile \u00fccretsiz bir hesap olu\u015fturabilirsiniz. Ard\u0131ndan, <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/getting-started-install.html\" target=\"_blank\">AWS CLI&#8217;\u0131<\/a> kurun ve <code>aws configure<\/code> komutuyla kimlik bilgilerinizi yap\u0131land\u0131r\u0131n.<\/li>\n<li><strong>Python ve pip:<\/strong> Sisteminizde Python 3.7 veya \u00fczeri y\u00fckl\u00fc olmal\u0131d\u0131r. Ayr\u0131ca Python paket y\u00f6neticisi <code>pip<\/code> de kurulu olmal\u0131d\u0131r.<\/li>\n<li><strong>Sanal Ortam Olu\u015fturma:<\/strong> Python projeleriniz i\u00e7in sanal ortamlar kullanmak iyi bir pratiktir. Projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole eder.\n<pre><code>\n  python3 -m venv .venv\n  source .venv\/bin\/activate  # Linux\/macOS\n  .venv\\Scripts\\activate     # Windows\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>AWS CDK CLI Kurulumu:<\/strong> Sanal ortam\u0131n\u0131z aktifken AWS CDK CLI'\u0131 y\u00fckleyin.\n<pre><code>\n  pip install aws-cdk-lib constructs aws-cdk.aws-s3-deployment\n  npm install -g aws-cdk # CDK CLI i\u00e7in Node.js gerekli, sadece bu komut i\u00e7in\n<\/pre>\n<p><\/code><\/p>\n<p>Not: AWS CDK CLI'\u0131 global olarak y\u00fcklemek i\u00e7in Node.js ve npm gereklidir. E\u011fer sisteminizde Node.js yoksa, sadece <code>pip install aws-cdk-lib constructs<\/code> ile CDK k\u00fct\u00fcphanelerini Python projenize ekleyip, <code>npx cdk<\/code> ile komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Ancak en kolay yol Node.js kurup CDK CLI'\u0131 global olarak y\u00fcklemektir.<\/p>\n<\/li>\n<li><strong>CDK Projesi Ba\u015flatma:<\/strong> Yeni bir proje dizini olu\u015fturup i\u00e7ine girin ve CDK projesini ba\u015flat\u0131n.\n<pre><code>\n  mkdir my-static-website\n  cd my-static-website\n  cdk init app --language python\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, CDK projenizin temel iskeletini olu\u015fturacakt\u0131r: <code>app.py<\/code> (uygulaman\u0131n ana giri\u015fi), <code>my_static_website\/my_static_website_stack.py<\/code> (AWS kaynaklar\u0131n\u0131 tan\u0131mlayaca\u011f\u0131m\u0131z dosya), <code>requirements.txt<\/code> ve <code>.venv<\/code> gibi dosyalar.<\/p>\n<\/li>\n<\/ol>\n<p>Bu haz\u0131rl\u0131k ad\u0131mlar\u0131yla, statik web sitenizi AWS \u00fczerinde IaC prensipleriyle hayata ge\u00e7irmek i\u00e7in sa\u011flam bir temel olu\u015fturmu\u015f olursunuz. Art\u0131k altyap\u0131n\u0131z\u0131 kodlamaya haz\u0131r\u0131z.<\/p>\n<h2>Ad\u0131m Ad\u0131m Uygulama: AWS CDK ile Statik Web Sitesi Altyap\u0131s\u0131 Nas\u0131l Kodlan\u0131r?<\/h2>\n<p>\u015eimdi s\u0131ra, web sitenizin t\u00fcm bulut altyap\u0131s\u0131n\u0131 Python koduyla tan\u0131mlamaya geldi. CDK projemizin ana mant\u0131\u011f\u0131, <code>my_static_website\/my_static_website_stack.py<\/code> dosyas\u0131nda yer alacakt\u0131r. Bu dosya i\u00e7inde AWS kaynaklar\u0131n\u0131 (S3, CloudFront vb.) birer \"construct\" olarak tan\u0131mlayaca\u011f\u0131z. Her construct, bir veya daha fazla AWS kayna\u011f\u0131n\u0131 soyutlayan ve best practices ile yap\u0131land\u0131ran bir yap\u0131d\u0131r. \u0130lk olarak, web sitenizin i\u00e7eri\u011fini bar\u0131nd\u0131racak Amazon S3 bucket'\u0131n\u0131 olu\u015ftural\u0131m. Bu bucket'\u0131n web sitesi bar\u0131nd\u0131rma \u00f6zelli\u011finin etkinle\u015ftirilmesi gerekecek.<\/p>\n<p>Daha sonra, web sitenizin k\u00fcresel da\u011f\u0131t\u0131m\u0131n\u0131 ve HTTPS eri\u015fimini sa\u011flayacak CloudFront da\u011f\u0131t\u0131m\u0131n\u0131 yap\u0131land\u0131raca\u011f\u0131z. G\u00fcvenlik a\u00e7\u0131s\u0131ndan kritik bir ad\u0131m, S3 bucket'\u0131m\u0131za do\u011frudan eri\u015fimi engellemek ve CloudFront \u00fczerinden g\u00fcvenli eri\u015fim sa\u011flamakt\u0131r. Bunun i\u00e7in bir <strong>Origin Access Identity (OAI)<\/strong> kullanaca\u011f\u0131z. OAI, CloudFront'un S3 bucket'\u0131n\u0131zdaki i\u00e7eri\u011fe eri\u015fmesi i\u00e7in \u00f6zel bir kimlik olu\u015fturur ve S3 bucket politikalar\u0131n\u0131 bu OAI'ye g\u00f6re yap\u0131land\u0131rarak do\u011frudan eri\u015fimi k\u0131s\u0131tlar\u0131z. B\u00f6ylece, kullan\u0131c\u0131lar do\u011frudan S3 URL'si yerine her zaman CloudFront URL'sini kullanarak web sitenize eri\u015fmek zorunda kal\u0131r.<\/p>\n<p>Sertifika y\u00f6netimi i\u00e7in <strong>AWS Certificate Manager (ACM)<\/strong> kullanaca\u011f\u0131z. E\u011fer \u00f6zel bir alan ad\u0131n\u0131z varsa, CloudFront da\u011f\u0131t\u0131m\u0131n\u0131za \u00fccretsiz bir SSL\/TLS sertifikas\u0131 ba\u011flamak i\u00e7in ACM'de sertifika talebinde bulunman\u0131z gerekmektedir. Bu sertifika, HTTPS ba\u011flant\u0131s\u0131n\u0131 sa\u011flayarak ziyaret\u00e7ilerinizin g\u00fcvenli\u011fini temin eder. Son olarak, web sitenizin statik dosyalar\u0131n\u0131 S3 bucket'\u0131na da\u011f\u0131tmak i\u00e7in <code>aws-cdk.aws_s3_deployment<\/code> mod\u00fcl\u00fcn\u00fc kullanaca\u011f\u0131z. Bu mod\u00fcl, yerel dizininizdeki dosyalar\u0131 otomatik olarak S3'e senkronize eder ve her da\u011f\u0131t\u0131mda CloudFront \u00f6nbelle\u011fini temizleyerek de\u011fi\u015fikliklerin h\u0131zla yay\u0131mlanmas\u0131n\u0131 sa\u011flar. \u0130\u015fte bu mant\u0131\u011f\u0131 kod olarak nas\u0131l hayata ge\u00e7irece\u011fimize dair bir \u00f6nizleme:<\/p>\n<h3>\u00d6rnek Bir Statik Web Sitesi \u0130\u00e7eri\u011fi: <code>index.html<\/code><\/h3>\n<p>Proje dizininizde <code>website\/<\/code> ad\u0131nda bir klas\u00f6r olu\u015fturun ve i\u00e7ine <code>index.html<\/code> ve <code>error.html<\/code> gibi temel web dosyalar\u0131n\u0131z\u0131 yerle\u015ftirin. \u00d6rne\u011fin:<\/p>\n<pre><code>\n<!-- website\/index.html -->\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Merhaba CDK D\u00fcnyas\u0131!<\/title>\n    <style>\n        body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }\n        h1 { color: #333; }\n        p { color: #666; }\n    <\/style>\n<\/head>\n<body>\n    <h1>AWS CDK ve Python ile Statik Web Sitesi!<\/h1>\n    <p>Bu site, AWS CDK kullan\u0131larak otomatik olarak da\u011f\u0131t\u0131ld\u0131.<\/p>\n<\/body>\n<\/html>\n  <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi, bu i\u00e7eri\u011fi AWS \u00fczerinde bar\u0131nd\u0131racak altyap\u0131y\u0131 CDK ile kodlamaya ge\u00e7elim.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: OAI kullan\u0131m\u0131, S3 bucket'\u0131n\u0131z\u0131n herkese a\u00e7\u0131k eri\u015fime kapal\u0131 kalmas\u0131n\u0131 sa\u011flayarak \u00f6nemli bir g\u00fcvenlik katman\u0131 ekler. Bu, yetkisiz kullan\u0131c\u0131lar\u0131n do\u011frudan S3 URL'leri arac\u0131l\u0131\u011f\u0131yla hassas verilere eri\u015fimini engeller.\n  <\/div>\n<h2>Detayl\u0131 Kod \u0130ncelemesi: <code>my_static_website_stack.py<\/code> ve <code>app.py<\/code><\/h2>\n<p>CDK projenizin kalbi, altyap\u0131 kaynaklar\u0131n\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131z stack dosyas\u0131d\u0131r. Bu durumda, <code>my_static_website\/my_static_website_stack.py<\/code> dosyas\u0131n\u0131 inceleyece\u011fiz. Ayr\u0131ca CDK uygulamas\u0131n\u0131n nas\u0131l ba\u015flat\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6steren <code>app.py<\/code> dosyas\u0131na da de\u011finece\u011fiz.<\/p>\n<h3><code>my_static_website\/my_static_website_stack.py<\/code> \u0130\u00e7eri\u011fi<\/h3>\n<p>Bu dosya, AWS kaynaklar\u0131m\u0131z\u0131 tan\u0131mlayan ana Python kodunu i\u00e7erir. Gerekli k\u00fct\u00fcphaneleri i\u00e7e aktararak ve bir <code>Stack<\/code> s\u0131n\u0131f\u0131 tan\u0131mlayarak ba\u015flar\u0131z. Bu stack i\u00e7inde, S3 bucket'\u0131m\u0131z\u0131, CloudFront da\u011f\u0131t\u0131m\u0131m\u0131z\u0131, OAI'yi ve dosyalar\u0131m\u0131z\u0131 senkronize eden da\u011f\u0131t\u0131m mekanizmas\u0131n\u0131 olu\u015fturaca\u011f\u0131z.<\/p>\n<pre><code>\n  from aws_cdk import (\n      Stack,\n      aws_s3 as s3,\n      aws_cloudfront as cloudfront,\n      aws_cloudfront_origins as origins,\n      aws_s3_deployment as s3_deployment,\n      aws_certificatemanager as acm,\n      Duration,\n      CfnOutput,\n  )\n  from constructs import Construct\n\n  class MyStaticWebsiteStack(Stack):\n\n      def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:\n          super().__init__(scope, construct_id, **kwargs)\n\n          # 1. S3 Bucket Olu\u015fturma\n          website_bucket = s3.Bucket(\n              self, \"WebsiteBucket\",\n              website_hosting=True,\n              block_public_access=s3.BlockPublicAccess.BLOCK_ALL, # G\u00fcvenlik i\u00e7in genel eri\u015fimi engelle\n          )\n\n          # 2. Origin Access Identity (OAI) Olu\u015fturma\n          # CloudFront'\u0131n S3'e g\u00fcvenli bir \u015fekilde eri\u015fmesini sa\u011flar\n          oai = cloudfront.OriginAccessIdentity(\n              self, \"WebsiteOAI\",\n              comment=\"Allows CloudFront to access S3 bucket\"\n          )\n\n          # 3. S3 Bucket Politikas\u0131 Ekleme (OAI arac\u0131l\u0131\u011f\u0131yla CloudFront eri\u015fimine izin ver)\n          website_bucket.add_to_resource_policy(\n              s3.PolicyStatement(\n                  actions=[\"s3:GetObject\"],\n                  resources=[website_bucket.arn_for_objects(\"*\")],\n                  principals=[oai.grant_principal],\n              )\n          )\n\n          # 4. SSL\/TLS Sertifikas\u0131 Tan\u0131mlama (Opsiyonel: Kendi alan ad\u0131n\u0131z i\u00e7in)\n          # E\u011fer kendi alan ad\u0131n\u0131z\u0131 kullanacaksan\u0131z, us-east-1 b\u00f6lgesinde sertifika olu\u015fturulmal\u0131d\u0131r.\n          # Bu \u00f6rnekte bir ARN ile mevcut sertifika kullan\u0131lmaktad\u0131r.\n          # Ger\u00e7ek bir senaryoda bu ARN'i ACM'den alman\u0131z gerekecek.\n          # cert = acm.Certificate.from_certificate_arn(self, \"WebsiteCertificate\", \n          #     \"arn:aws:acm:us-east-1:123456789012:certificate\/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n          # )\n          # Veya sertifikan\u0131n burada olu\u015fturulmas\u0131 da m\u00fcmk\u00fcnd\u00fcr (DNS do\u011frulama gerektirir)\n\n          # 5. CloudFront Da\u011f\u0131t\u0131m\u0131 Olu\u015fturma\n          distribution = cloudfront.Distribution(\n              self, \"WebsiteDistribution\",\n              default_root_object=\"index.html\",\n              default_behavior=cloudfront.BehaviorOptions(\n                  origin=origins.S3Origin(website_bucket, origin_access_identity=oai),\n                  viewer_protocol_policy=cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n                  cached_methods=cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS,\n              ),\n              error_responses=[\n                  cloudfront.ErrorResponse(http_status=403, response_page_path=\"\/error.html\", response_http_status=200, ttl=Duration.seconds(300)),\n                  cloudfront.ErrorResponse(http_status=404, response_page_path=\"\/error.html\", response_http_status=200, ttl=Duration.seconds(300)),\n              ],\n              # certificate=cert, # E\u011fer \u00f6zel alan ad\u0131 kullan\u0131yorsan\u0131z ve cert tan\u0131mland\u0131ysa\n              # domain_names=[\"www.example.com\", \"example.com\"] # \u00d6zel alan adlar\u0131\n          )\n\n          # 6. Statik Dosyalar\u0131 S3'e Da\u011f\u0131tma\n          s3_deployment.BucketDeployment(self, \"DeployWebsite\",\n              sources=[s3_deployment.Source.asset(\".\/website\")], # Yerel 'website' klas\u00f6r\u00fcn\u00fc kullan\n              destination_bucket=website_bucket,\n              distribution=distribution, # Da\u011f\u0131t\u0131m sonras\u0131 CloudFront \u00f6nbelle\u011fini temizle\n              distribution_paths=[\"\/*\"],\n          )\n\n          # \u00c7\u0131k\u0131\u015f olarak CloudFront URL'sini g\u00f6ster\n          CfnOutput(self, \"CloudFrontUrl\",\n              value=f\"https:\/\/{distribution.distribution_domain_name}\",\n              description=\"The URL of the deployed static website\"\n          )\n\n  <\/pre>\n<p><\/code><\/p>\n<h3><code>app.py<\/code> \u0130\u00e7eri\u011fi<\/h3>\n<p><code>app.py<\/code>, CDK uygulaman\u0131z\u0131n giri\u015f noktas\u0131d\u0131r. Stack'inizi \u00f6rnekleyip da\u011f\u0131t\u0131m s\u00fcrecini ba\u015flat\u0131r.<\/p>\n<pre><code>\n  #!\/usr\/bin\/env python3\n  import os\n  import aws_cdk as cdk\n  from my_static_website.my_static_website_stack import MyStaticWebsiteStack\n\n  app = cdk.App()\n  MyStaticWebsiteStack(app, \"MyStaticWebsiteStack\",\n      # env=cdk.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')),\n  )\n  app.synth()\n  <\/pre>\n<p><\/code><\/p>\n<h3>Mobil Uyumlu HTML\/CSS \u00d6rne\u011fi<\/h3>\n<p>Modern web siteleri mobil uyumlu olmal\u0131d\u0131r. Yukar\u0131daki HTML'e ekleyebilece\u011finiz basit bir CSS \u00f6rne\u011fi:<\/p>\n<pre><code>\n<!-- website\/style.css -->\nbody {\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    background-color: #f4f7f6;\n    color: #333;\n    line-height: 1.6;\n    margin: 0;\n    padding: 0;\n}\n\n.container {\n    max-width: 960px;\n    margin: 30px auto;\n    padding: 20px;\n    background-color: #ffffff;\n    border-radius: 8px;\n    box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\nh1 {\n    color: #007bff;\n    text-align: center;\n    margin-bottom: 20px;\n}\n\np {\n    text-align: justify;\n    margin-bottom: 10px;\n}\n\n@media (max-width: 768px) {\n    .container {\n        margin: 15px;\n        padding: 15px;\n    }\n    h1 {\n        font-size: 1.8em;\n    }\n    p {\n        font-size: 0.9em;\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu CSS, <code>@media<\/code> sorgusu ile ekran geni\u015fli\u011fi 768 pikselden az oldu\u011funda <code>.container<\/code> ve metin boyutlar\u0131n\u0131 ayarlayarak mobil cihazlarda daha iyi bir g\u00f6r\u00fcn\u00fcm sa\u011flar. <code>index.html<\/code> dosyan\u0131zda bu CSS'i ba\u011flamak i\u00e7in <code><head><\/code> etiketinin i\u00e7ine <code><link rel=\"stylesheet\" href=\"style.css\"><\/code> eklemeyi unutmay\u0131n.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: Stack'inizi farkl\u0131 AWS hesaplar\u0131na veya b\u00f6lgelerine da\u011f\u0131tmak i\u00e7in <code>cdk.Environment<\/code> kullanabilirsiniz. Bu, geli\u015ftirme (dev), test (staging) ve \u00fcretim (prod) gibi ortamlar\u0131 y\u00f6netmek i\u00e7in harika bir y\u00f6ntemdir.\n  <\/div>\n<h2>Da\u011f\u0131t\u0131m, G\u00fcncelleme ve Y\u00f6netim: Altyap\u0131n\u0131z\u0131 AWS'e Nas\u0131l Ta\u015f\u0131rs\u0131n\u0131z?<\/h2>\n<p>Kodunuz haz\u0131r oldu\u011funa g\u00f6re, art\u0131k altyap\u0131n\u0131z\u0131 AWS'e da\u011f\u0131tma zaman\u0131 geldi. AWS CDK, bu s\u00fcreci birka\u00e7 basit komutla y\u00f6netmenizi sa\u011flar. \u0130lk kez bir CDK uygulamas\u0131 da\u011f\u0131t\u0131rken, AWS hesab\u0131n\u0131zda baz\u0131 \u00f6nko\u015fullar\u0131n (CDK Toolkit Stack'i gibi) olu\u015fturulmas\u0131 gerekir. Bu i\u015flem <strong>bootstrap<\/strong> olarak adland\u0131r\u0131l\u0131r.<\/p>\n<pre><code>\n  cdk bootstrap aws:\/\/<ACCOUNT-ID>\/<REGION>\n  <\/pre>\n<p><\/code><\/p>\n<p><code><ACCOUNT-ID><\/code> ve <code><REGION><\/code> yerine kendi AWS hesap kimli\u011finizi ve kullanmak istedi\u011finiz b\u00f6lgeyi (\u00f6rn: <code>us-east-1<\/code>) yazmal\u0131s\u0131n\u0131z. Bu komut, CDK'nin bulut kaynaklar\u0131n\u0131 da\u011f\u0131tmak i\u00e7in ihtiya\u00e7 duydu\u011fu temel altyap\u0131y\u0131 (\u00f6rne\u011fin, \u015fablonlar\u0131 depolamak i\u00e7in bir S3 bucket'\u0131) olu\u015fturur. Genellikle bu komutu her b\u00f6lge i\u00e7in bir kez \u00e7al\u0131\u015ft\u0131rmak yeterlidir.<\/p>\n<h3>Altyap\u0131y\u0131 Da\u011f\u0131tma<\/h3>\n<p>Bootstrap i\u015flemi tamamland\u0131ktan sonra, CDK stack'inizi AWS'e da\u011f\u0131tabilirsiniz:<\/p>\n<pre><code>\n  cdk deploy\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, CDK kodunuzu AWS CloudFormation \u015fablonlar\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr (<code>cdk synth<\/code>) ve ard\u0131ndan bu \u015fablonlar\u0131 kullanarak t\u00fcm AWS kaynaklar\u0131n\u0131 (S3 bucket, CloudFront da\u011f\u0131t\u0131m\u0131, OAI vb.) AWS hesab\u0131n\u0131zda olu\u015fturur. Da\u011f\u0131t\u0131m genellikle birka\u00e7 dakika s\u00fcrebilir, \u00f6zellikle CloudFront da\u011f\u0131t\u0131m\u0131n\u0131n global olarak yay\u0131lmas\u0131 zaman alabilir. Ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131m\u0131n ard\u0131ndan, konsolda CloudFront da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n URL'sini i\u00e7eren bir \u00e7\u0131kt\u0131 g\u00f6receksiniz. Bu URL \u00fczerinden statik web sitenize eri\u015febilirsiniz.<\/p>\n<h3>De\u011fi\u015fiklikleri Y\u00f6netme ve G\u00fcncelleme<\/h3>\n<p>Web sitenizin i\u00e7eri\u011fini veya altyap\u0131 kodunu g\u00fcncelledi\u011finizde, de\u011fi\u015fiklikleri tekrar da\u011f\u0131tmak i\u00e7in yine <code>cdk deploy<\/code> komutunu kullanman\u0131z yeterlidir. CDK, CloudFormation'\u0131 kullanarak mevcut altyap\u0131n\u0131zla yeni tan\u0131mlad\u0131\u011f\u0131n\u0131z altyap\u0131 aras\u0131ndaki farklar\u0131 alg\u0131lar ve sadece gerekli de\u011fi\u015fiklikleri yapar. Da\u011f\u0131t\u0131mdan \u00f6nce neyin de\u011fi\u015fece\u011fini g\u00f6rmek isterseniz <code>cdk diff<\/code> komutunu kullanabilirsiniz.<\/p>\n<pre><code>\n  cdk diff\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, mevcut da\u011f\u0131t\u0131lm\u0131\u015f stack ile yerel kodunuz aras\u0131ndaki farklar\u0131 g\u00f6stererek beklenmedik de\u011fi\u015fiklikleri \u00f6nlemenize yard\u0131mc\u0131 olur. Web sitenizin statik i\u00e7eri\u011fini (HTML, CSS, JS) g\u00fcncelledi\u011finizde, <code>s3_deployment.BucketDeployment<\/code> construct'\u0131 sayesinde CDK, bu dosyalar\u0131 otomatik olarak S3'e y\u00fckleyecek ve CloudFront \u00f6nbelle\u011fini temizleyerek yeni i\u00e7eri\u011fin h\u0131zl\u0131ca g\u00f6r\u00fcn\u00fcr olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>Altyap\u0131y\u0131 Temizleme<\/h3>\n<p>E\u011fer web sitenizi tamamen kald\u0131rmak isterseniz, t\u00fcm CDK taraf\u0131ndan olu\u015fturulan kaynaklar\u0131 a\u015fa\u011f\u0131daki komutla silebilirsiniz:<\/p>\n<pre><code>\n  cdk destroy\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, onay\u0131n\u0131z\u0131n ard\u0131ndan CloudFormation stack'ini ve dolay\u0131s\u0131yla ili\u015fkili t\u00fcm AWS kaynaklar\u0131n\u0131 (S3 bucket hari\u00e7 baz\u0131 durumlarda) siler. S3 bucket'\u0131 genellikle i\u00e7eri\u011fi oldu\u011fu i\u00e7in otomatik silinmez, manuel olarak bo\u015falt\u0131l\u0131p silinmesi gerekebilir.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: Otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7leri i\u00e7in CI\/CD (Continuous Integration\/Continuous Deployment) boru hatlar\u0131 kurmak, geli\u015ftirme s\u00fcrecinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r. AWS CodePipeline, GitHub Actions veya GitLab CI gibi ara\u00e7lar\u0131 kullanarak kod de\u011fi\u015fikliklerinizde otomatik da\u011f\u0131t\u0131mlar tetikleyebilirsiniz.\n  <\/div>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: Projenizi Daha da Geli\u015ftirmek \u0130\u00e7in Ne Yapabilirsiniz?<\/h2>\n<p>Statik web sitenizi AWS CDK ve Python ile da\u011f\u0131tmak, sadece bir ba\u015flang\u0131\u00e7. Projenizi daha da geli\u015ftirmek ve daha profesyonel bir hale getirmek i\u00e7in bir\u00e7ok ileri d\u00fczey ipucu ve en iyi uygulama bulunmaktad\u0131r. Bunlar, web sitenizin performans\u0131n\u0131 art\u0131rmaktan g\u00fcvenli\u011fini sa\u011flamaya ve maliyetleri optimize etmeye kadar geni\u015f bir yelpazeyi kapsar.<\/p>\n<h3>\u00d6zel Alan Ad\u0131 ve HTTPS Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Bir web sitesinin profesyonel g\u00f6r\u00fcnmesi i\u00e7in kendi \u00f6zel alan ad\u0131na sahip olmas\u0131 esast\u0131r. E\u011fer CloudFront da\u011f\u0131t\u0131m\u0131n\u0131za bir alan ad\u0131 ba\u011flamak isterseniz, <strong>AWS Route 53<\/strong>'\u00fc kullanman\u0131z gerekir. Route 53'te, alan ad\u0131n\u0131z\u0131 CloudFront da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n alan ad\u0131na y\u00f6nlendiren bir CNAME veya A kayd\u0131 (Alias record) olu\u015fturmal\u0131s\u0131n\u0131z. Ayr\u0131ca, HTTPS'i etkinle\u015ftirmek i\u00e7in <strong>AWS Certificate Manager (ACM)<\/strong>'dan \u00f6zel alan ad\u0131n\u0131z i\u00e7in bir SSL\/TLS sertifikas\u0131 talep etmeniz ve bunu CloudFront da\u011f\u0131t\u0131m\u0131n\u0131za ba\u011flaman\u0131z gerekir. Unutmay\u0131n, ACM sertifikalar\u0131 CloudFront ile kullan\u0131ld\u0131\u011f\u0131nda her zaman US East (N. Virginia) <code>us-east-1<\/code> b\u00f6lgesinde olu\u015fturulmal\u0131d\u0131r, di\u011fer b\u00f6lgelerde CloudFront ile \u00e7al\u0131\u015fmayabilir.<\/p>\n<h3>G\u00fcvenlik Katmanlar\u0131n\u0131 Art\u0131rma (AWS WAF)<\/h3>\n<p>Web sitenizin g\u00fcvenli\u011fini daha da art\u0131rmak i\u00e7in <strong>AWS WAF (Web Application Firewall)<\/strong> entegrasyonunu d\u00fc\u015f\u00fcnebilirsiniz. WAF, yayg\u0131n web sald\u0131r\u0131lar\u0131na (SQL injection, XSS vb.) kar\u015f\u0131 koruma sa\u011flayarak web sitenizin g\u00fcvenli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde g\u00fc\u00e7lendirir. CloudFront da\u011f\u0131t\u0131m\u0131n\u0131za WAF ACL'leri (Access Control Lists) ekleyerek, gelen trafi\u011fi belirli kurallara g\u00f6re filtreleyebilir ve k\u00f6t\u00fc niyetli istekleri engelleyebilirsiniz. Bu, \u00f6zellikle hassas veriler i\u00e7ermese bile, itibar\u0131n\u0131z\u0131 korumak ve hizmet d\u0131\u015f\u0131 kalma riskini azaltmak i\u00e7in \u00f6nemlidir.<\/p>\n<h3>Lambda@Edge ile Dinamik \u00d6zellikler Ekleme<\/h3>\n<p>Statik web siteleri do\u011falar\u0131 gere\u011fi dinamik de\u011fildir, ancak bu s\u0131n\u0131rlamay\u0131 <strong>Lambda@Edge<\/strong> ile a\u015fabilirsiniz. Lambda@Edge, CloudFront'\u0131n Edge Location'lar\u0131nda \u00e7al\u0131\u015fabilen sunucusuz AWS Lambda fonksiyonlar\u0131d\u0131r. Bu sayede, statik sitenize kullan\u0131c\u0131 kimlik do\u011frulamas\u0131, A\/B testi, \u00f6zel URL yeniden yazma kurallar\u0131 veya API Gateway entegrasyonlar\u0131 gibi dinamik \u00f6zellikler ekleyebilirsiniz. \u00d6rne\u011fin, basit bir ileti\u015fim formu i\u00e7in backend olarak AWS API Gateway ve Lambda kullanabilir, CloudFront \u00fczerinden bu API'ye g\u00fcvenli bir \u015fekilde ula\u015fabilirsiniz. Bu, tam te\u015fekk\u00fcll\u00fc bir sunucuya ihtiya\u00e7 duymadan sitenizin yeteneklerini geni\u015fletir.<\/p>\n<h3>Maliyet Optimizasyonu ve Monitoring<\/h3>\n<p>AWS kaynaklar\u0131 kullan\u0131rken maliyetleri optimize etmek her zaman \u00f6nemlidir. S3 i\u00e7in ya\u015fam d\u00f6ng\u00fcs\u00fc kurallar\u0131 tan\u0131mlayarak, eski veya az eri\u015filen nesnelerin daha uygun maliyetli depolama s\u0131n\u0131flar\u0131na (\u00f6rne\u011fin, S3 Standard-IA veya Glacier) ta\u015f\u0131nmas\u0131n\u0131 sa\u011flayabilirsiniz. CloudFront'\u0131n \u00f6nbellekleme stratejilerini do\u011fru yap\u0131land\u0131rmak, S3'ten veri \u00e7ekme maliyetlerini azalt\u0131r ve performans\u0131 art\u0131r\u0131r. Ayr\u0131ca, web sitenizin trafi\u011fini, eri\u015fim kal\u0131plar\u0131n\u0131 ve olas\u0131 hatalar\u0131 izlemek i\u00e7in <strong>Amazon CloudWatch<\/strong>'u kullan\u0131n. CloudWatch metrikleri ve loglar\u0131, sitenizin sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 anlamak i\u00e7in de\u011ferli bilgiler sunar.<\/p>\n<p>Bu ileri d\u00fczey teknikler, statik web sitenizi daha g\u00fc\u00e7l\u00fc, g\u00fcvenli ve verimli hale getirmenize yard\u0131mc\u0131 olacakt\u0131r. AWS CDK'nin esnekli\u011fi sayesinde, t\u00fcm bu yap\u0131land\u0131rmalar\u0131 yine kod olarak y\u00f6netebilir ve altyap\u0131n\u0131z\u0131 s\u00fcrekli geli\u015ftirebilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular: Gelece\u011fin Statik Web Deneyimi<\/h2>\n<p>Bu makalede, AWS CDK ve Python'\u0131 kullanarak ilk statik web sitenizi AWS \u00fczerinde ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde inceledik. Geleneksel hosting y\u00f6ntemlerinin getirdi\u011fi zorluklara kar\u015f\u0131 statik web sitelerinin sundu\u011fu avantajlar\u0131, yani h\u0131z, g\u00fcvenlik, \u00f6l\u00e7eklenebilirlik ve maliyet etkinli\u011fini vurgulad\u0131k. Amazon S3'\u00fc depolama, Amazon CloudFront'\u0131 global da\u011f\u0131t\u0131m ve HTTPS, AWS Certificate Manager'\u0131 SSL\/TLS sertifikalar\u0131 i\u00e7in nas\u0131l kulland\u0131\u011f\u0131m\u0131z\u0131 \u00f6\u011frendik. En \u00f6nemlisi, t\u00fcm bu altyap\u0131y\u0131 Python koduyla tan\u0131mlayarak, altyap\u0131y\u0131 kod olarak (IaC) y\u00f6netmenin g\u00fcc\u00fcn\u00fc ve getirdi\u011fi otomasyon kolayl\u0131\u011f\u0131n\u0131 deneyimledik. CDK'nin sundu\u011fu mod\u00fcler yap\u0131 ve tan\u0131d\u0131k programlama dili entegrasyonu sayesinde, bulut altyap\u0131n\u0131z\u0131 t\u0131pk\u0131 uygulama kodunuz gibi y\u00f6netebilir, versiyonlayabilir ve otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerine entegre edebilirsiniz.<\/p>\n<p>Art\u0131k, bir blog, ki\u015fisel portf\u00f6y, \u00fcr\u00fcn tan\u0131t\u0131m sayfas\u0131 veya kurumsal bir bro\u015f\u00fcr sitesi olsun, herhangi bir statik i\u00e7eri\u011fi AWS'in g\u00fc\u00e7l\u00fc ve esnek altyap\u0131s\u0131 \u00fczerinde g\u00fcvenle ve verimli bir \u015fekilde yay\u0131nlayabilirsiniz. Gelece\u011fin web geli\u015ftirme pratikleri, altyap\u0131n\u0131n kodla y\u00f6netildi\u011fi, otomatize edilmi\u015f ve \u00f6l\u00e7eklenebilir \u00e7\u00f6z\u00fcmler sunan bu t\u00fcr yakla\u015f\u0131mlar\u0131 i\u015faret ediyor. AWS CDK ile bu gelece\u011fi bug\u00fcnden in\u015fa etmeye ba\u015flam\u0131\u015f oldunuz. Unutmay\u0131n, bulut d\u00fcnyas\u0131 s\u00fcrekli geli\u015fiyor ve CDK gibi ara\u00e7lar, bu geli\u015fime ayak uydurman\u0131n en etkili yollar\u0131ndan birini sunuyor. Kendi projelerinizi bu yakla\u015f\u0131mla hayata ge\u00e7irmekten \u00e7ekinmeyin, \u00e7\u00fcnk\u00fc her sat\u0131r kod, size daha fazla kontrol ve otomasyon getiriyor.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n      <strong>AWS CDK kullanmak maliyetli midir?<\/strong><\/p>\n<p>AWS CDK'nin kendisi a\u00e7\u0131k kaynakl\u0131d\u0131r ve kullan\u0131m\u0131 i\u00e7in herhangi bir ek \u00fccret al\u0131nmaz. Ancak, CDK ile olu\u015fturdu\u011funuz AWS kaynaklar\u0131 (S3, CloudFront, ACM vb.) i\u00e7in standart AWS servis \u00fccretleri ge\u00e7erlidir. Statik bir web sitesi i\u00e7in bu servislerin maliyetleri genellikle olduk\u00e7a d\u00fc\u015f\u00fckt\u00fcr, hatta bir\u00e7ok durumda AWS Free Tier kapsam\u0131nda kalabilir.<\/p>\n<\/li>\n<li>\n      <strong>Statik web siteleri ne t\u00fcr projeler i\u00e7in uygun de\u011fildir?<\/strong><\/p>\n<p>Statik web siteleri, kullan\u0131c\u0131 giri\u015fi, veritaban\u0131 etkile\u015fimi, sunucu taraf\u0131 i\u015fleme veya dinamik i\u00e7erik olu\u015fturma gibi yo\u011fun arka u\u00e7 i\u015flemlerine ihtiya\u00e7 duyan uygulamalar i\u00e7in uygun de\u011fildir. E-ticaret siteleri, sosyal medya platformlar\u0131 veya karma\u015f\u0131k i\u00e7erik y\u00f6netim sistemleri gibi projeler i\u00e7in dinamik bir arka u\u00e7 (\u00f6rne\u011fin, AWS Lambda, EC2, ECS) gereklidir.<\/p>\n<\/li>\n<li>\n      <strong>CloudFront performans\u0131 nas\u0131l art\u0131r\u0131r?<\/strong><\/p>\n<p>CloudFront, i\u00e7eri\u011fi d\u00fcnya genelindeki Edge Location'larda \u00f6nbelle\u011fe alarak kullan\u0131c\u0131lara en yak\u0131n noktadan sunar. Bu, i\u00e7erik y\u00fckleme s\u00fcresini azalt\u0131r (gecikmeyi d\u00fc\u015f\u00fcr\u00fcr), bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 optimize eder ve kaynak sunucu (S3) \u00fczerindeki y\u00fck\u00fc hafifletir. Ayr\u0131ca, s\u0131k eri\u015filen i\u00e7eri\u011fi \u00f6nbellekte tutarak tekrarlayan isteklerde S3'e gitme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n      <strong>S3'e y\u00fcklenen dosyalar\u0131 kimler g\u00f6rebilir?<\/strong><\/p>\n<p>Bu makalede g\u00f6sterilen yakla\u015f\u0131mda, S3 bucket'\u0131na do\u011frudan genel eri\u015fim engellenmi\u015ftir (<code>block_public_access=s3.BlockPublicAccess.BLOCK_ALL<\/code>). \u0130\u00e7eri\u011fe yaln\u0131zca CloudFront'\u0131n \u00f6zel bir kimli\u011fi olan OAI arac\u0131l\u0131\u011f\u0131yla eri\u015filebilir. Bu, web sitenizin URL'si haricinde kimsenin S3 bucket'\u0131n\u0131zdaki dosyalara do\u011frudan eri\u015femeyece\u011fi anlam\u0131na gelir, bu da \u00f6nemli bir g\u00fcvenlik katman\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n      <strong>CDK ile sadece web siteleri mi da\u011f\u0131t\u0131labilir?<\/strong><\/p>\n<p>Hay\u0131r, AWS CDK ile AWS \u00fczerindeki neredeyse t\u00fcm servisleri ve kaynaklar\u0131 (EC2 instance'lar\u0131, Lambda fonksiyonlar\u0131, VPC'ler, veritabanlar\u0131, API Gateway'ler vb.) kod olarak tan\u0131mlayabilir ve da\u011f\u0131tabilirsiniz. CDK, AWS'in sundu\u011fu geni\u015f hizmet yelpazesini programatik olarak y\u00f6netmek i\u00e7in kapsaml\u0131 bir ara\u00e7t\u0131r ve herhangi bir bulut uygulamas\u0131n\u0131n altyap\u0131s\u0131n\u0131 olu\u015fturmak i\u00e7in kullan\u0131labilir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir&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":[1406],"tags":[],"class_list":{"0":"post-32291","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 CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun<\/title>\n<meta name=\"description\" content=\"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.\" \/>\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-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun\" \/>\n<meta property=\"og:description\" content=\"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-19T22:01:16+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=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun\",\"datePublished\":\"2025-10-19T22:01:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\"},\"wordCount\":3388,\"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-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\",\"name\":\"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-19T22:01:16+00:00\",\"description\":\"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun\"}]},{\"@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 CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun","description":"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.","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-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/","og_locale":"tr_TR","og_type":"article","og_title":"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun","og_description":"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-19T22:01:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun","datePublished":"2025-10-19T22:01:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/"},"wordCount":3388,"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-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/","url":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/","name":"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-19T22:01:16+00:00","description":"AWS CDK ve Python kullanarak statik bir web sitesini kolayca nas\u0131l da\u011f\u0131tabilece\u011finizi \u00f6\u011frenin. Otomatikle\u015ftirilmi\u015f, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir altyap\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ke\u015ffedin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/aws-cdk-ve-python-ile-ilk-statik-web-sitenizi-olusturun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWS CDK ve Python ile \u0130lk Statik Web Sitenizi Olu\u015fturun"}]},{"@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\/32291","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=32291"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32291\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}