{"id":31488,"date":"2025-10-10T13:01:27","date_gmt":"2025-10-10T10:01:27","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/"},"modified":"2025-10-10T13:01:27","modified_gmt":"2025-10-10T10:01:27","slug":"python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/","title":{"rendered":"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma"},"content":{"rendered":"<p><body><\/p>\n<p>\n    AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.\n<\/p>\n<p>\n    Modern bulut tabanl\u0131 uygulamalar geli\u015ftirirken esneklik ve maliyet etkinli\u011fi, en \u00f6nemli hedefler aras\u0131nda yer al\u0131r. Geli\u015ftiriciler olarak, genellikle belirli bir g\u00f6revi yerine getiren mikro servisler tasarlar\u0131z. Ancak bazen, i\u015f y\u00fck\u00fcn\u00fcn do\u011fas\u0131 gere\u011fi, bir fonksiyonun farkl\u0131 zamanlarda veya farkl\u0131 tetikleyicilerle birbirinden biraz farkl\u0131 davran\u0131\u015flar sergilemesi gerekebilir. \u0130\u015fte tam bu noktada &#8220;\u00e7ift modlu&#8221; veya &#8220;\u00e7ok modlu&#8221; bir AWS Lambda fonksiyonu devreye girer. Tek bir kod taban\u0131n\u0131 koruyarak, ortam de\u011fi\u015fkenleri (environment variables) veya gelen event y\u00fck\u00fcne (payload) g\u00f6re farkl\u0131 i\u015f mant\u0131klar\u0131n\u0131 y\u00fcr\u00fctebilen fonksiyonlar olu\u015fturmak, hem kod tekrar\u0131n\u0131 azalt\u0131r hem de y\u00f6netim y\u00fck\u00fcn\u00fc hafifletir.\n<\/p>\n<p>\n    Peki, \u00e7ift modlu bir Lambda tam olarak ne anlama geliyor? Basit\u00e7e ifade etmek gerekirse, ayn\u0131 Lambda fonksiyonu i\u00e7erisinde iki veya daha fazla farkl\u0131 operasyonel modu bar\u0131nd\u0131rmakt\u0131r. \u00d6rne\u011fin, bir modda verileri i\u015fleyip bir veritaban\u0131na kaydedebilirken, di\u011fer modda ayn\u0131 verileri farkl\u0131 bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcp bir mesaj kuyru\u011funa (SQS) g\u00f6nderebilir. Bu, \u00f6zellikle geli\u015ftirme ve operasyonel s\u00fcre\u00e7lerde b\u00fcy\u00fck avantajlar sunar. Tek bir da\u011f\u0131t\u0131m paketi, farkl\u0131 senaryolar\u0131 kapsayabilir, bu da CI\/CD s\u00fcre\u00e7lerini basitle\u015ftirir ve hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.\n<\/p>\n<p>\n    Bu yakla\u015f\u0131m\u0131n temelinde yatan g\u00fc\u00e7, sunucusuz mimarinin do\u011fas\u0131ndan gelir. AWS Lambda, kodunuzu herhangi bir sunucu y\u00f6netimi olmaks\u0131z\u0131n \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. Python, dinamik yap\u0131s\u0131 ve geni\u015f k\u00fct\u00fcphane deste\u011fi sayesinde Lambda fonksiyonlar\u0131 i\u00e7in pop\u00fcler bir se\u00e7imdir. \u00d6te yandan Terraform, altyap\u0131y\u0131 kod olarak (Infrastructure as Code &#8211; IaC) tan\u0131mlaman\u0131n ve y\u00f6netmenin lider ara\u00e7lar\u0131ndan biridir. Terraform kullanarak, Lambda fonksiyonunuzu, gerekli izinleri, ortam de\u011fi\u015fkenlerini ve di\u011fer t\u00fcm AWS kaynaklar\u0131n\u0131 otomatize edilmi\u015f bir \u015fekilde da\u011f\u0131tabilirsiniz. Bu kombinasyon, \u00e7ift modlu bir Lambda uygulamas\u0131n\u0131n t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc ba\u015ftan sona y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir temel olu\u015fturur. B\u00f6ylece, manuel yap\u0131land\u0131rma hatalar\u0131n\u0131 en aza indirirken, \u00f6l\u00e7eklenebilir ve s\u00fcrd\u00fcr\u00fclebilir bir mimari in\u015fa edebilirsiniz. Bu rehber boyunca, bu temel kavramlar\u0131 pratik \u00f6rneklerle nas\u0131l bir araya getirece\u011fimizi ad\u0131m ad\u0131m inceleyece\u011fiz.\n<\/p>\n<div class=\"info-box\">\n    Uzman \u0130pucu: \u00c7ift modlu Lambda&#8217;lar\u0131 kullanmak, farkl\u0131 API Gateway yollar\u0131 veya SQS kuyruklar\u0131 arac\u0131l\u0131\u011f\u0131yla tetiklenen ancak benzer i\u015f mant\u0131\u011f\u0131n\u0131 payla\u015fan servisler i\u00e7in m\u00fckemmel bir maliyet optimizasyonu ve kod tekrar\u0131 \u00f6nleme stratejisi sunar.\n<\/div>\n<h2>Lambda Fonksiyon Tasar\u0131m\u0131: Python ile Modlar\u0131 Ay\u0131rmak<\/h2>\n<p>\n    \u00c7ift modlu bir AWS Lambda fonksiyonu tasarlarken, Python kodunuzu modlar aras\u0131nda kolayca ge\u00e7i\u015f yapabilecek \u015fekilde yap\u0131land\u0131rmak kritik \u00f6neme sahiptir. Bu esnekli\u011fi sa\u011flaman\u0131n en yayg\u0131n ve etkili yollar\u0131ndan biri, ortam de\u011fi\u015fkenlerini (environment variables) veya gelen tetikleyici olay\u0131n\u0131n (event payload) i\u00e7eri\u011fini kullanmakt\u0131r. Bu y\u00f6ntemler, fonksiyonunuzun hangi modda \u00e7al\u0131\u015fmas\u0131 gerekti\u011fini d\u0131\u015far\u0131dan belirlemenize olanak tan\u0131r, b\u00f6ylece kodunuzu yeniden da\u011f\u0131tmak zorunda kalmadan davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirebilirsiniz.\n<\/p>\n<p>\n    \u00d6rne\u011fin, bir veri i\u015fleme fonksiyonunuz oldu\u011funu d\u00fc\u015f\u00fcn\u00fcn. Bu fonksiyonun bir modu gelen veriyi do\u011frular (validation), ba\u015fka bir modu ise do\u011frulanan veriyi zenginle\u015ftirir (enrichment). Her iki i\u015flem de ayn\u0131 temel veri yap\u0131s\u0131 \u00fczerinde \u00e7al\u0131\u015f\u0131r, ancak farkl\u0131 mant\u0131klar gerektirir. Python kodunuzda, gelen bir ortam de\u011fi\u015fkenini okuyarak veya event payload&#8217;\u0131ndaki belirli bir alan\u0131 kontrol ederek hangi i\u015flemin yap\u0131laca\u011f\u0131na karar verebilirsiniz.\n<\/p>\n<p>\n    A\u015fa\u011f\u0131daki Python kodu \u00f6rne\u011fi, <code>OPERATION_MODE<\/code> adl\u0131 bir ortam de\u011fi\u015fkenini kullanarak iki farkl\u0131 modu (<code>validation<\/code> ve <code>enrichment<\/code>) nas\u0131l y\u00f6netebilece\u011finizi g\u00f6sterir. E\u011fer <code>OPERATION_MODE<\/code> belirtilmemi\u015fse veya bilinmeyen bir de\u011ferse, varsay\u0131lan bir davran\u0131\u015f sergileyebiliriz veya hata f\u0131rlatabiliriz. Bu yap\u0131, gelecekte yeni modlar eklemenizi de kolayla\u015ft\u0131r\u0131r, \u00e7\u00fcnk\u00fc her yeni mod i\u00e7in sadece yeni bir <code>if\/elif<\/code> blo\u011fu eklemeniz yeterlidir.\n<\/p>\n<pre><code>\nimport os\nimport json\n\ndef validate_data(data):\n    # Veri do\u011frulama mant\u0131\u011f\u0131\n    if \"id\" not in data or not isinstance(data[\"id\"], str):\n        return {\"status\": \"error\", \"message\": \"ID alan\u0131 eksik veya hatal\u0131.\"}\n    if \"value\" not in data or not isinstance(data[\"value\"], int):\n        return {\"status\": \"error\", \"message\": \"Value alan\u0131 eksik veya hatal\u0131.\"}\n    print(f\"Veri ba\u015far\u0131yla do\u011fruland\u0131: {data['id']}\")\n    return {\"status\": \"success\", \"validated_data\": data}\n\ndef enrich_data(data):\n    # Veri zenginle\u015ftirme mant\u0131\u011f\u0131\n    if \"validated_data\" in data:\n        data = data[\"validated_data\"]\n    \n    # \u00d6rnek: Bir timestamp ekleme\n    import datetime\n    data[\"processed_at\"] = datetime.datetime.now().isoformat()\n    \n    # \u00d6rnek: Durum alan\u0131 ekleme\n    data[\"status\"] = \"enriched\"\n    \n    print(f\"Veri ba\u015far\u0131yla zenginle\u015ftirildi: {data['id']}\")\n    return {\"status\": \"success\", \"enriched_data\": data}\n\ndef lambda_handler(event, context):\n    operation_mode = os.environ.get(\"OPERATION_MODE\", \"default_mode\")\n    \n    print(f\"Lambda {operation_mode} modunda \u00e7al\u0131\u015f\u0131yor.\")\n    \n    try:\n        # Gelen event payload'\u0131n\u0131 JSON olarak ayr\u0131\u015ft\u0131rma (e\u011fer string ise)\n        body = event.get('body')\n        if body and isinstance(body, str):\n            payload = json.loads(body)\n        else:\n            payload = event\n            \n        data = payload.get('data', {}) # event'in 'data' anahtar\u0131n\u0131 kullan\u0131yoruz\n        \n        if not data:\n            return {\n                'statusCode': 400,\n                'body': json.dumps({'message': 'Gelen veride \"data\" alan\u0131 bulunamad\u0131.'})\n            }\n\n        if operation_mode == \"validate\":\n            result = validate_data(data)\n        elif operation_mode == \"enrich\":\n            # Enrichment modu, genellikle validate modundan sonra \u00e7al\u0131\u015f\u0131r,\n            # bu y\u00fczden <code>validated_data<\/code>'y\u0131 bekleyebiliriz veya do\u011frudan <code>data<\/code>'y\u0131 kullanabiliriz.\n            result = enrich_data({\"validated_data\": data})\n        else:\n            return {\n                'statusCode': 400,\n                'body': json.dumps({'message': f'Bilinmeyen \u00e7al\u0131\u015fma modu: {operation_mode}. Desteklenen modlar: validate, enrich.'})\n            }\n\n        return {\n            'statusCode': 200,\n            'body': json.dumps(result)\n        }\n    except json.JSONDecodeError:\n        return {\n            'statusCode': 400,\n            'body': json.dumps({'message': 'Ge\u00e7ersiz JSON format\u0131.'})\n        }\n    except Exception as e:\n        print(f\"Hata olu\u015ftu: {e}\")\n        return {\n            'statusCode': 500,\n            'body': json.dumps({'message': 'Dahili sunucu hatas\u0131.'})\n        }\n\n<\/pre>\n<p><\/code><\/p>\n<h3>Esnek \u00c7al\u0131\u015fma Modlar\u0131 \u0130\u00e7in Kod Yap\u0131s\u0131 Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>\n    Yukar\u0131daki \u00f6rnekte g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, kodun mod\u00fcler yap\u0131s\u0131, her bir \u00e7al\u0131\u015fma modunun kendi fonksiyonuna ayr\u0131lmas\u0131n\u0131 sa\u011flar (<code>validate_data<\/code>, <code>enrich_data<\/code>). Bu, kodun okunabilirli\u011fini art\u0131rmakla kalmaz, ayn\u0131 zamanda her bir modun ba\u011f\u0131ms\u0131z olarak test edilmesine olanak tan\u0131r. <code>lambda_handler<\/code> fonksiyonu ise bir y\u00f6nlendirici (router) g\u00f6revi g\u00f6r\u00fcr; gelen ortam de\u011fi\u015fkenini veya event'i analiz ederek uygun alt fonksiyonu \u00e7a\u011f\u0131r\u0131r.\n<\/p>\n<p>\n    Bu yap\u0131land\u0131rma, fonksiyonun farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) farkl\u0131 davran\u0131\u015flar sergilemesini de kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, test ortam\u0131nda <code>OPERATION_MODE=\"mock_data\"<\/code> olarak ayarlanm\u0131\u015f bir modunuz olabilir ve bu mod, ger\u00e7ek servislere ba\u011flanmak yerine sabit test verileri d\u00f6nd\u00fcrerek entegrasyon testlerini h\u0131zland\u0131rabilir. Bu da genel geli\u015ftirme verimlili\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.\n<\/p>\n<p>\n    Fonksiyonun daha da karma\u015f\u0131k hale geldi\u011fi durumlarda, farkl\u0131 modlar i\u00e7in ayr\u0131 Python mod\u00fclleri olu\u015fturmak ve bunlar\u0131 dinamik olarak i\u00e7e aktarmak da bir se\u00e7enektir. \u00d6rne\u011fin:\n<\/p>\n<pre><code>\n# importlib kullanarak dinamik mod\u00fcl y\u00fckleme\n# if operation_mode == \"complex_mode_A\":\n#    module = importlib.import_module(\"my_modules.mode_a_logic\")\n#    result = module.process(data)\n<\/pre>\n<p><\/code><\/p>\n<p>\n    Ancak, \u00e7o\u011fu \u00e7ift modlu senaryo i\u00e7in, basit <code>if\/elif<\/code> yap\u0131s\u0131 ve ortam de\u011fi\u015fkenleri yeterli ve y\u00f6netimi daha kolayd\u0131r. Se\u00e7ilen y\u00f6ntem, fonksiyonun karma\u015f\u0131kl\u0131\u011f\u0131na ve gelecekteki b\u00fcy\u00fcme beklentilerine g\u00f6re ayarlanmal\u0131d\u0131r. Her durumda ama\u00e7, kod taban\u0131n\u0131 temiz, okunabilir ve bak\u0131m\u0131 kolay tutmakt\u0131r.\n<\/p>\n<h2>Terraform ile Otomatik Da\u011f\u0131t\u0131m: Altyap\u0131y\u0131 Kodla Y\u00f6netmek<\/h2>\n<p>\n    Lambda fonksiyonunuzu Python'da tasarlad\u0131ktan sonra, s\u0131ra onu AWS bulutuna da\u011f\u0131tmaya gelir. \u0130\u015fte burada Terraform devreye girer. Terraform, altyap\u0131n\u0131z\u0131 kod olarak (Infrastructure as Code - IaC) tan\u0131mlaman\u0131za olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu sayede, Lambda fonksiyonunuzu, onunla ili\u015fkili t\u00fcm kaynaklar\u0131 (IAM rolleri, S3 bucket'lar, API Gateway entegrasyonlar\u0131 vb.) tutarl\u0131 ve tekrarlanabilir bir \u015fekilde da\u011f\u0131tabilirsiniz. \u00c7ift modlu bir Lambda i\u00e7in Terraform kullan\u0131m\u0131, \u00f6zellikle farkl\u0131 modlar aras\u0131nda ge\u00e7i\u015f yaparken veya farkl\u0131 ortamlar i\u00e7in ayr\u0131 yap\u0131land\u0131rmalar sa\u011flarken b\u00fcy\u00fck avantajlar sunar.\n<\/p>\n<p>\n    Terraform ile bir AWS Lambda fonksiyonunu da\u011f\u0131tmak i\u00e7in genellikle a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleriz:\n<\/p>\n<ol>\n<li>Lambda kodunuzu bir ZIP dosyas\u0131na s\u0131k\u0131\u015ft\u0131r\u0131n.<\/li>\n<li>Bu ZIP dosyas\u0131n\u0131 bir AWS S3 bucket'\u0131na y\u00fckleyin.<\/li>\n<li>Lambda fonksiyonunuzun \u00e7al\u0131\u015fabilmesi i\u00e7in gerekli izinlere sahip bir IAM rol\u00fc olu\u015fturun.<\/li>\n<li>Terraform kullanarak Lambda fonksiyon kayna\u011f\u0131n\u0131 tan\u0131mlay\u0131n ve S3'teki ZIP dosyas\u0131n\u0131 i\u015faret edin.<\/li>\n<li>\u0130\u015flem modunu belirleyen ortam de\u011fi\u015fkenlerini (\u00f6rne\u011fin, <code>OPERATION_MODE<\/code>) ayarlay\u0131n.<\/li>\n<\/ol>\n<p>\n    A\u015fa\u011f\u0131da, yukar\u0131daki Python kod \u00f6rne\u011fini da\u011f\u0131tmak i\u00e7in kullan\u0131labilecek temel bir Terraform yap\u0131land\u0131rmas\u0131 bulunmaktad\u0131r. Bu yap\u0131land\u0131rma, bir S3 bucket'\u0131, bir IAM rol\u00fc ve \u00e7ift modlu Lambda fonksiyonumuzu olu\u015fturur.\n<\/p>\n<pre><code>\n# main.tf\n\n# AWS Provider Yap\u0131land\u0131rmas\u0131\nprovider \"aws\" {\n  region = \"eu-central-1\" # Kendi b\u00f6lgenizi buraya yaz\u0131n\n}\n\n# S3 Bucket Tan\u0131mlamas\u0131 (Lambda kodunu depolamak i\u00e7in)\nresource \"aws_s3_bucket\" \"lambda_code_bucket\" {\n  bucket = \"my-dual-mode-lambda-code-bucket-12345\" # Benzersiz bir isim se\u00e7in\n  tags = {\n    Environment = \"Development\"\n    Project     = \"DualModeLambda\"\n  }\n}\n\n# Lambda Zip Dosyas\u0131n\u0131 Olu\u015fturma\nresource \"aws_s3_object\" \"lambda_code\" {\n  bucket = aws_s3_bucket.lambda_code_bucket.bucket\n  key    = \"dual-mode-lambda.zip\"\n  source = \".\/dual-mode-lambda.zip\" # Python kodunuzu i\u00e7eren zip dosyas\u0131n\u0131n yolu\n  etag   = filemd5(\".\/dual-mode-lambda.zip\") # Dosya de\u011fi\u015fikli\u011fini alg\u0131lamak i\u00e7in\n}\n\n# IAM Rol\u00fc Tan\u0131mlamas\u0131 (Lambda'n\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in)\nresource \"aws_iam_role\" \"lambda_exec_role\" {\n  name = \"dual_mode_lambda_exec_role\"\n\n  assume_role_policy = jsonencode({\n    Version = \"2012-10-17\",\n    Statement = [{\n      Action = \"sts:AssumeRole\",\n      Effect = \"Allow\",\n      Principal = {\n        Service = \"lambda.amazonaws.com\"\n      }\n    }]\n  })\n}\n\n# IAM Politikas\u0131 (CloudWatch loglar\u0131na yazma izni)\nresource \"aws_iam_role_policy_attachment\" \"lambda_policy_cloudwatch\" {\n  role       = aws_iam_role.lambda_exec_role.name\n  policy_arn = \"arn:aws:iam::aws:policy\/service-role\/AWSLambdaBasicExecutionRole\"\n}\n\n# AWS Lambda Fonksiyonu Tan\u0131mlamas\u0131\nresource \"aws_lambda_function\" \"dual_mode_lambda\" {\n  function_name    = \"DualModePythonLambda\"\n  s3_bucket        = aws_s3_bucket.lambda_code_bucket.bucket\n  s3_key           = aws_s3_object.lambda_code.key\n  handler          = \"lambda_function.lambda_handler\" # Python dosyan\u0131z\u0131n ad\u0131 (lambda_function.py) ve handler fonksiyonunuz\n  runtime          = \"python3.9\" # Kullanaca\u011f\u0131n\u0131z Python versiyonu\n  role             = aws_iam_role.lambda_exec_role.arn\n  timeout          = 30 # Saniye\n  memory_size      = 128 # MB\n\n  environment {\n    variables = {\n      OPERATION_MODE = \"validate\" # \u0130lk \u00e7al\u0131\u015fma modu\n    }\n  }\n\n  tags = {\n    Environment = \"Development\"\n    Project     = \"DualModeLambda\"\n  }\n}\n\n# Opsiyonel: API Gateway Entegrasyonu\nresource \"aws_api_gateway_rest_api\" \"api\" {\n  name        = \"DualModeLambdaApi\"\n  description = \"API Gateway for Dual Mode Lambda\"\n}\n\nresource \"aws_api_gateway_resource\" \"proxy\" {\n  rest_api_id = aws_api_gateway_rest_api.api.id\n  parent_id   = aws_api_gateway_rest_api.api.root_resource_id\n  path_part   = \"{proxy+}\"\n}\n\nresource \"aws_api_gateway_method\" \"proxy_method\" {\n  rest_api_id   = aws_api_gateway_rest_api.api.id\n  resource_id   = aws_api_gateway_resource.proxy.id\n  http_method   = \"ANY\"\n  authorization = \"NONE\"\n}\n\nresource \"aws_api_gateway_integration\" \"lambda_integration\" {\n  rest_api_id             = aws_api_gateway_rest_api.api.id\n  resource_id             = aws_api_gateway_resource.proxy.id\n  http_method             = aws_api_gateway_method.proxy_method.http_method\n  integration_http_method = \"POST\"\n  type                    = \"AWS_PROXY\"\n  uri                     = aws_lambda_function.dual_mode_lambda.invoke_arn\n}\n\nresource \"aws_lambda_permission\" \"apigateway_permission\" {\n  statement_id  = \"AllowAPIGatewayInvoke\"\n  action        = \"lambda:InvokeFunction\"\n  function_name = aws_lambda_function.dual_mode_lambda.function_name\n  principal     = \"apigateway.amazonaws.com\"\n  source_arn    = \"${aws_api_gateway_rest_api.api.execution_arn}\/*\/*\"\n}\n\nresource \"aws_api_gateway_deployment\" \"api_deployment\" {\n  depends_on = [\n    aws_api_gateway_integration.lambda_integration,\n    aws_api_gateway_method.proxy_method,\n  ]\n\n  rest_api_id = aws_api_gateway_rest_api.api.id\n  stage_name  = \"dev\" # Deployment stage ad\u0131\n}\n\noutput \"api_gateway_url\" {\n  description = \"The URL of the API Gateway\"\n  value       = aws_api_gateway_deployment.api_deployment.invoke_url\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>Modlar Aras\u0131 Ge\u00e7i\u015fi Terraform ile Nas\u0131l Sa\u011flar\u0131z?<\/h3>\n<p>\n    Terraform'un en b\u00fcy\u00fck avantajlar\u0131ndan biri, ortam de\u011fi\u015fkenlerini (environment variables) kolayca y\u00f6netebilmesidir. Lambda fonksiyonunuzun hangi modda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirleyen <code>OPERATION_MODE<\/code> gibi de\u011fi\u015fkenleri, <code>aws_lambda_function<\/code> kayna\u011f\u0131n\u0131n <code>environment<\/code> blo\u011fu alt\u0131nda tan\u0131mlar\u0131z.\n<\/p>\n<p>\n    Modlar aras\u0131nda ge\u00e7i\u015f yapmak i\u00e7in, Terraform yap\u0131land\u0131rma dosyan\u0131zdaki <code>OPERATION_MODE<\/code> de\u011ferini basit\u00e7e de\u011fi\u015ftirip <code>terraform apply<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir. Terraform, yaln\u0131zca de\u011fi\u015fen kaynaklar\u0131 g\u00fcncelleyecek ve Lambda fonksiyonunuzun yeni ortam de\u011fi\u015fkeniyle yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flayacakt\u0131r. Bu sayede, ayn\u0131 kod taban\u0131n\u0131 kullanarak farkl\u0131 davran\u0131\u015flar\u0131 devreye alabilir veya kald\u0131rabilirsiniz.\n<\/p>\n<pre><code>\n# OPERATION_MODE'u de\u011fi\u015ftirmek i\u00e7in\nresource \"aws_lambda_function\" \"dual_mode_lambda\" {\n  # ... di\u011fer ayarlar ...\n  environment {\n    variables = {\n      OPERATION_MODE = \"enrich\" # Modu 'validate'den 'enrich'e de\u011fi\u015ftirdik\n    }\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>\n    Daha geli\u015fmi\u015f senaryolarda, farkl\u0131 ortamlar (dev, staging, prod) i\u00e7in ayr\u0131 Terraform \u00e7al\u0131\u015fma alanlar\u0131 (workspaces) kullanabilir veya Terraform de\u011fi\u015fkenleri (variables) ile ortam bazl\u0131 yap\u0131land\u0131rmalar\u0131 dinamik olarak y\u00f6netebilirsiniz. Bu, her ortam i\u00e7in farkl\u0131 <code>OPERATION_MODE<\/code> de\u011ferleri belirleyebilece\u011finiz anlam\u0131na gelir. \u00d6rne\u011fin, geli\u015ftirme ortam\u0131nda do\u011frulama modu a\u00e7\u0131kken, \u00fcretimde hem do\u011frulama hem de zenginle\u015ftirme modlar\u0131n\u0131 aktif edebilirsiniz. Terraform'un bu yetenekleri, \u00e7ift modlu Lambda'n\u0131z\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc daha esnek ve y\u00f6netilebilir hale getirir.\n<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: Bir Vaka Analizi<\/h2>\n<p>\n    \u00c7ift modlu AWS Lambda fonksiyonlar\u0131n\u0131n ger\u00e7ek d\u00fcnyada nas\u0131l de\u011fer yaratabilece\u011fini anlamak i\u00e7in somut bir vaka analizine g\u00f6z atal\u0131m. Bir e-ticaret platformunun sipari\u015f i\u015fleme sistemini ele alal\u0131m. Bu platformda, yeni bir sipari\u015f olu\u015fturuldu\u011funda \u00e7e\u015fitli arka plan i\u015flemleri tetiklenmesi gerekiyor. Normalde bu, birden fazla Lambda fonksiyonu veya karma\u015f\u0131k bir Step Functions i\u015f ak\u0131\u015f\u0131 gerektirebilir. Ancak \u00e7ift modlu bir Lambda ile bunu tek bir fonksiyon \u00fczerinden y\u00f6netebiliriz.\n<\/p>\n<p>\n    Senaryomuz \u015f\u00f6yle: Bir kullan\u0131c\u0131 yeni bir sipari\u015f verdi\u011finde, sipari\u015f bilgileri bir SQS kuyru\u011funa g\u00f6nderiliyor. Bu kuyruktan mesajlar\u0131 t\u00fcketen tek bir Lambda fonksiyonumuz var. Bu Lambda fonksiyonu iki ana modda \u00e7al\u0131\u015fabilir:\n<\/p>\n<ol>\n<li>\n        <strong>\u00d6n-i\u015fleme (Pre-processing) Modu:<\/strong> Bu modda, gelen sipari\u015f verileri do\u011frulan\u0131r (\u00fcr\u00fcn stok kontrol\u00fc, kullan\u0131c\u0131 bilgileri do\u011frulama vb.). E\u011fer sipari\u015f ge\u00e7erliyse, stok d\u00fc\u015f\u00fcl\u00fcr ve sipari\u015f durumu \"do\u011fruland\u0131\" olarak i\u015faretlenir. Bu mod, genellikle sipari\u015fin ilk al\u0131nd\u0131\u011f\u0131 andaki kritik do\u011frulamalar\u0131 i\u00e7erir.\n    <\/li>\n<li>\n        <strong>Son-i\u015fleme (Post-processing) Modu:<\/strong> Sipari\u015f \u00f6n-i\u015flemeden ge\u00e7tikten sonra, bu mod devreye girer. Bu modda, m\u00fc\u015fteriye bir e-posta bildirimi g\u00f6nderilir, muhasebe sistemine entegrasyon sa\u011flan\u0131r veya kargo takip numaras\u0131 olu\u015fturulur. Bu i\u015flemler, sipari\u015fin temel do\u011frulamas\u0131 tamamland\u0131ktan sonra asenkron olarak ger\u00e7ekle\u015ftirilebilir.\n    <\/li>\n<\/ol>\n<p>\n    Bu senaryoda, Lambda fonksiyonumuzun <code>lambda_handler<\/code>'\u0131 a\u015fa\u011f\u0131daki gibi bir yap\u0131ya sahip olabilir:\n<\/p>\n<pre><code>\nimport os\nimport json\n\ndef process_order_preprocessing(order_data):\n    # Stok kontrol\u00fc, kullan\u0131c\u0131 bilgisi do\u011frulama\n    if order_data.get(\"product_id\") == \"invalid\":\n        return {\"status\": \"failed\", \"message\": \"\u00dcr\u00fcn stokta yok veya ge\u00e7ersiz.\"}\n    # Basit bir stok d\u00fc\u015f\u00fcrme sim\u00fclasyonu\n    print(f\"Sipari\u015f {order_data['order_id']} i\u00e7in stok d\u00fc\u015f\u00fcld\u00fc.\")\n    order_data[\"status\"] = \"validated\"\n    return {\"status\": \"success\", \"processed_data\": order_data}\n\ndef process_order_postprocessing(order_data):\n    # E-posta g\u00f6nderme, muhasebe entegrasyonu, kargo bildirimi\n    print(f\"Sipari\u015f {order_data['order_id']} i\u00e7in m\u00fc\u015fteriye e-posta g\u00f6nderiliyor.\")\n    print(f\"Sipari\u015f {order_data['order_id']} muhasebe sistemine kaydedildi.\")\n    order_data[\"tracking_id\"] = \"TRK\" + str(order_data['order_id'])\n    order_data[\"status\"] = \"completed\"\n    return {\"status\": \"success\", \"final_data\": order_data}\n\ndef lambda_handler(event, context):\n    operation_mode = os.environ.get(\"OPERATION_MODE\", \"preprocessing\") # Varsay\u0131lan mod\n    \n    records = event.get('Records', [])\n    if not records:\n        return {'statusCode': 400, 'body': json.dumps({'message': 'SQS event records not found.'})}\n\n    results = []\n    for record in records:\n        try:\n            message_body = json.loads(record['body'])\n            order_data = message_body.get('order_data', {})\n\n            if not order_data:\n                results.append({\"status\": \"error\", \"message\": \"Sipari\u015f verisi eksik.\"})\n                continue\n            \n            print(f\"\u0130\u015flenen Sipari\u015f ID: {order_data.get('order_id')}, Mod: {operation_mode}\")\n\n            if operation_mode == \"preprocessing\":\n                result = process_order_preprocessing(order_data)\n            elif operation_mode == \"postprocessing\":\n                result = process_order_postprocessing(order_data)\n            else:\n                result = {\"status\": \"error\", \"message\": f\"Bilinmeyen \u00e7al\u0131\u015fma modu: {operation_mode}\"}\n            \n            results.append(result)\n\n        except json.JSONDecodeError:\n            results.append({\"status\": \"error\", \"message\": \"Ge\u00e7ersiz JSON format\u0131.\"})\n        except Exception as e:\n            results.append({\"status\": \"error\", \"message\": f\"Hata: {str(e)}\"})\n\n    return {\n        'statusCode': 200,\n        'body': json.dumps({'processed_items': results})\n    }\n<\/pre>\n<p><\/code><\/p>\n<p>\n    Terraform taraf\u0131nda ise, bu \u00e7ift modlu Lambda'y\u0131 da\u011f\u0131t\u0131rken, <code>OPERATION_MODE<\/code> ortam de\u011fi\u015fkenini farkl\u0131 de\u011ferlerle ayarlayan iki ayr\u0131 Lambda tetikleyicisi (\u00f6rne\u011fin, iki farkl\u0131 SQS kuyru\u011fu veya ayn\u0131 kuyruktan farkl\u0131 zamanlarda i\u015fleyen iki farkl\u0131 Lambda alias\/versiyonu) olu\u015fturabiliriz. Veya daha basit bir yakla\u015f\u0131mla, sadece ortam de\u011fi\u015fkenini de\u011fi\u015ftirip Lambda'y\u0131 yeniden da\u011f\u0131tarak mod de\u011fi\u015ftirebiliriz.\n<\/p>\n<p>\n    Bu vaka analizinde \u00e7ift modlu Lambda'n\u0131n faydalar\u0131 \u015funlard\u0131r:\n<\/p>\n<ul>\n<li>\n        <strong>Kod Birli\u011fi:<\/strong> T\u00fcm sipari\u015f i\u015fleme mant\u0131\u011f\u0131 tek bir kod taban\u0131nda bulunur. Bu, geli\u015ftirme, test ve hata ay\u0131klama s\u00fcre\u00e7lerini basitle\u015ftirir.\n    <\/li>\n<li>\n        <strong>Y\u00f6netim Kolayl\u0131\u011f\u0131:<\/strong> AWS konsolunda veya Terraform'da y\u00f6netilecek daha az kaynak vard\u0131r.\n    <\/li>\n<li>\n        <strong>Maliyet Optimizasyonu:<\/strong> Farkl\u0131 i\u015flemler i\u00e7in ayr\u0131 ayr\u0131 fonksiyonlar yerine tek bir fonksiyonun kullan\u0131lmas\u0131, bazen daha d\u00fc\u015f\u00fck maliyetli olabilir (\u00f6zellikle bo\u015fta bekleme s\u00fcreleri ve ba\u015flang\u0131\u00e7 maliyetleri a\u00e7\u0131s\u0131ndan).\n    <\/li>\n<li>\n        <strong>Esneklik:<\/strong> Gerekirse yeni bir i\u015flem modu eklemek veya mevcut modlar\u0131n mant\u0131\u011f\u0131n\u0131 de\u011fi\u015ftirmek daha kolayd\u0131r.\n    <\/li>\n<\/ul>\n<p>\n    Sonu\u00e7 olarak, bu vaka analizi, \u00e7ift modlu bir Lambda'n\u0131n karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131 tek bir y\u00f6netilebilir birim alt\u0131nda nas\u0131l toplad\u0131\u011f\u0131n\u0131 ve modern sunucusuz mimarilerde ne kadar g\u00fc\u00e7l\u00fc bir desen olabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir.\n<\/p>\n<h2>Performans, G\u00fcvenlik ve Geli\u015fmi\u015f \u00d6zellikler: \u0130leri D\u00fczey Optimizasyonlar<\/h2>\n<p>\n    \u00c7ift modlu AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 olu\u015fturduktan sonra, onlar\u0131n sadece \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakla kalmay\u0131p, ayn\u0131 zamanda en iyi performans\u0131 g\u00f6stermesini, g\u00fcvenli olmas\u0131n\u0131 ve gelecekteki ihtiya\u00e7lara uygun olmas\u0131n\u0131 sa\u011flamak da \u00f6nemlidir. \u0130\u015fte bu konuda size yard\u0131mc\u0131 olacak baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131.\n<\/p>\n<h3>Performans Optimizasyonu Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>\n    Lambda'n\u0131n performans\u0131, do\u011frudan kullan\u0131c\u0131 deneyimini ve operasyonel maliyetleri etkiler. \u00c7ift modlu bir Lambda'da her iki modun da verimli \u00e7al\u0131\u015fmas\u0131 gerekir:\n<\/p>\n<ul>\n<li>\n        <strong>Bellek ve CPU:<\/strong> Lambda'ya atanan bellek miktar\u0131 (<code>memory_size<\/code>), ayn\u0131 zamanda fonksiyonun kullan\u0131labilir CPU g\u00fcc\u00fcn\u00fc de belirler. Yo\u011fun i\u015flem gerektiren modlar i\u00e7in daha fazla bellek ay\u0131rmak, performans\u0131 art\u0131rabilir. Ancak bu, maliyeti de y\u00fckseltir, bu y\u00fczden do\u011fru dengeyi bulmak i\u00e7in testler yapmal\u0131s\u0131n\u0131z. AWS CloudWatch metriklerini kullanarak fonksiyonunuzun \u00e7al\u0131\u015fma s\u00fcresi ve bellek t\u00fcketimini izlemek, en uygun de\u011feri bulman\u0131za yard\u0131mc\u0131 olacakt\u0131r.\n    <\/li>\n<li>\n        <strong>Cold Start (So\u011fuk Ba\u015flang\u0131\u00e7) Y\u00f6netimi:<\/strong> Lambda fonksiyonlar\u0131 bir s\u00fcre kullan\u0131lmad\u0131\u011f\u0131nda \"so\u011fuk\" duruma ge\u00e7er. \u0130lk \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, AWS ortam\u0131 ba\u015flatmal\u0131, kodunuzu y\u00fcklemeli ve \u00e7al\u0131\u015ft\u0131rmal\u0131d\u0131r, bu da bir gecikmeye neden olur. \u00c7ift modlu bir Lambda'da her iki mod i\u00e7in de cold start ya\u015fanabilir. Bunun \u00f6n\u00fcne ge\u00e7mek i\u00e7in:<\/p>\n<ul>\n<li><strong>Zenginle\u015ftirilmi\u015f Python Ortamlar\u0131:<\/strong> Gerekli t\u00fcm k\u00fct\u00fcphaneleri fonksiyon paketine dahil edin, d\u0131\u015far\u0131dan indirme yapmaktan ka\u00e7\u0131n\u0131n.<\/li>\n<li><strong>Lambda Katmanlar\u0131 (Lambda Layers):<\/strong> Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Lambda katmanlar\u0131na ta\u015f\u0131yarak ana fonksiyon paketinizin boyutunu k\u00fc\u00e7\u00fclt\u00fcn ve b\u00f6ylece y\u00fckleme s\u00fcresini azalt\u0131n.<\/li>\n<li><strong>\u00d6nceden Tahsis Edilmi\u015f Konkurrentlik (Provisioned Concurrency):<\/strong> Kritik modlar i\u00e7in belirli bir say\u0131da Lambda \u00f6rne\u011fini her zaman \"s\u0131cak\" tutarak cold start gecikmelerini tamamen ortadan kald\u0131rabilirsiniz. Bu \u00f6zellik maliyetlidir, bu y\u00fczden sadece en hassas i\u015f y\u00fckleri i\u00e7in kullan\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>Mod\u00fcler Kodlama:<\/strong> Sadece o anki mod i\u00e7in gerekli olan k\u00fct\u00fcphaneleri veya mod\u00fclleri y\u00fckleyin. B\u00fcy\u00fck mod\u00fclleri veya kaynaklar\u0131 sadece ihtiya\u00e7 duyuldu\u011funda i\u00e7e aktararak ba\u015flang\u0131\u00e7 s\u00fcresini k\u0131saltabilirsiniz.\n    <\/li>\n<\/ul>\n<h3>G\u00fcvenlik ve Eri\u015fim Kontrol\u00fc<\/h3>\n<p>\n    Lambda fonksiyonlar\u0131n\u0131z\u0131n g\u00fcvenli\u011fi her zaman \u00f6ncelikli olmal\u0131d\u0131r. \u00c7ift modlu bir Lambda'da, her iki modun da uygun yetkilere sahip oldu\u011fundan ve gereksiz izinlere sahip olmad\u0131\u011f\u0131ndan emin olun:\n<\/p>\n<ul>\n<li>\n        <strong>En Az Ayr\u0131cal\u0131k Prensibi (Least Privilege Principle):<\/strong> IAM rolleri tan\u0131mlarken, Lambda fonksiyonunuza yaln\u0131zca ihtiya\u00e7 duydu\u011fu minimum izinleri verin. \u00d6rne\u011fin, sadece veri okuma modundaysan\u0131z, veritaban\u0131na yazma izni vermeyin. Terraform ile bu izinleri hassas bir \u015fekilde tan\u0131mlayabilirsiniz.\n    <\/li>\n<li>\n        <strong>Ortam De\u011fi\u015fkeni G\u00fcvenli\u011fi:<\/strong> Hassas bilgileri (API anahtarlar\u0131, veritaban\u0131 \u015fifreleri vb.) do\u011frudan ortam de\u011fi\u015fkenlerinde saklamaktan ka\u00e7\u0131n\u0131n. Bunun yerine AWS Secrets Manager veya AWS Systems Manager Parameter Store gibi hizmetleri kullan\u0131n. Lambda'n\u0131z\u0131n bu servislere eri\u015fimi i\u00e7in uygun IAM izinleri tan\u0131mlamal\u0131s\u0131n\u0131z.\n    <\/li>\n<li>\n        <strong>VPC Eri\u015fimi:<\/strong> E\u011fer Lambda fonksiyonunuz \u00f6zel a\u011f kaynaklar\u0131na (\u00f6rne\u011fin, bir RDS veritaban\u0131) eri\u015fmesi gerekiyorsa, Lambda'y\u0131 bir VPC (Virtual Private Cloud) i\u00e7ine yerle\u015ftirmeniz gerekir. Bu, a\u011f trafi\u011finin g\u00fcvenli\u011fini art\u0131r\u0131r.\n    <\/li>\n<\/ul>\n<div class=\"info-box\">\n    Uzman \u0130pucu: IAM politikalar\u0131n\u0131, her bir modun gerektirdi\u011fi minimum kaynaklara (\u00f6rne\u011fin, belirli bir S3 bucket'\u0131 veya DynamoDB tablosu) eri\u015fim sa\u011flayacak \u015fekilde \u00f6zelle\u015ftirin. Bu, bir g\u00fcvenlik ihlali durumunda etki alan\u0131n\u0131 s\u0131n\u0131rlar.\n<\/div>\n<h3>Geli\u015fmi\u015f \u00d6zellikler ve Entegrasyonlar<\/h3>\n<p>\n    Lambda'n\u0131z\u0131n yeteneklerini geni\u015fletmek ve daha y\u00f6netilebilir hale getirmek i\u00e7in kullanabilece\u011finiz ba\u015fka ara\u00e7lar da var:\n<\/p>\n<ul>\n<li>\n        <strong>Hata \u0130\u015fleme ve \u0130zleme:<\/strong> AWS CloudWatch Logs ile Lambda'n\u0131z\u0131n loglar\u0131n\u0131 merkezi olarak toplay\u0131n. Hata ay\u0131klama i\u00e7in bu loglar\u0131 dikkatlice inceleyin. AWS X-Ray, fonksiyonunuzun ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve performans darbo\u011fazlar\u0131n\u0131 g\u00f6rselle\u015ftirerek sorun gidermeyi kolayla\u015ft\u0131r\u0131r. \u00d6l\u00fcm Mektubu Kuyruklar\u0131 (Dead Letter Queues - DLQ) kullanarak ba\u015far\u0131s\u0131z olan olaylar\u0131 yakalay\u0131n ve manuel veya otomatik olarak yeniden i\u015flemeye al\u0131n.\n    <\/li>\n<li>\n        <strong>Lambda Katmanlar\u0131:<\/strong> Ortak kullan\u0131lan k\u00fct\u00fcphaneleri veya yard\u0131mc\u0131 fonksiyonlar\u0131 Lambda katmanlar\u0131na ta\u015f\u0131y\u0131n. Bu, fonksiyon paketinizin boyutunu k\u00fc\u00e7\u00fclt\u00fcr ve farkl\u0131 Lambda fonksiyonlar\u0131 aras\u0131nda kod payla\u015f\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.\n    <\/li>\n<li>\n        <strong>Versiyonlama ve Takma Adlar (Aliases):<\/strong> Lambda fonksiyonlar\u0131n\u0131z\u0131n farkl\u0131 versiyonlar\u0131n\u0131 olu\u015fturun. Takma adlar (\u00f6rne\u011fin, \"PROD\", \"DEV\") kullanarak belirli bir versiyonu i\u015faret edebilir ve b\u00f6ylece yeni bir da\u011f\u0131t\u0131m yaparken kesintisiz ge\u00e7i\u015fler sa\u011flayabilirsiniz. Bu, \u00f6zellikle \u00e7ift modlu Lambda'larda yeni bir mod eklerken veya mevcut bir modda de\u011fi\u015fiklik yaparken kullan\u0131\u015fl\u0131d\u0131r.\n    <\/li>\n<li>\n        <strong>CI\/CD Boru Hatlar\u0131:<\/strong> Terraform ile otomasyonu bir ad\u0131m \u00f6teye ta\u015f\u0131y\u0131n. GitHub Actions, GitLab CI\/CD veya AWS CodePipeline gibi ara\u00e7larla entegre ederek, kod de\u011fi\u015fikliklerinizi otomatik olarak test edebilir, Lambda ZIP dosyas\u0131n\u0131 olu\u015fturabilir ve Terraform ile da\u011f\u0131tabilirsiniz. Bu, \u00e7ift modlu Lambda'n\u0131z\u0131n s\u00fcrekli entegrasyon ve s\u00fcrekli teslimat (CI\/CD) d\u00f6ng\u00fcs\u00fcne m\u00fckemmel bir \u015fekilde uymas\u0131n\u0131 sa\u011flar.\n    <\/li>\n<\/ul>\n<p>\n    Bu ileri d\u00fczey optimizasyonlar ve \u00f6zellikler, \u00e7ift modlu Lambda fonksiyonlar\u0131n\u0131z\u0131n daha sa\u011flam, performansl\u0131, g\u00fcvenli ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flayacakt\u0131r. Sunucusuz mimarinin sundu\u011fu t\u00fcm avantajlardan faydalanmak i\u00e7in bu konulara zaman ay\u0131rmak ve yat\u0131r\u0131m yapmak, uzun vadede size b\u00fcy\u00fck faydalar sa\u011flayacakt\u0131r.\n<\/p>\n<h2>\u00c7ift Modlu Lambda'n\u0131n Gelece\u011fi ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>\n    \u00c7ift modlu AWS Lambda yakla\u015f\u0131m\u0131, geli\u015ftiricilere tek bir kod taban\u0131 \u00fczerinden \u00e7e\u015fitli operasyonel gereksinimleri kar\u015f\u0131lama esnekli\u011fi sunarak, modern bulut mimarilerinde \u00f6nemli bir yer edinmi\u015ftir. Bu desen, kod tekrar\u0131n\u0131 azaltma, y\u00f6netim y\u00fck\u00fcn\u00fc hafifletme ve CI\/CD s\u00fcre\u00e7lerini basitle\u015ftirme gibi avantajlar\u0131yla \u00f6ne \u00e7\u0131kmaktad\u0131r. \u00d6zellikle dinamik i\u015f y\u00fckleri, farkl\u0131 ortamlar veya zaman bazl\u0131 i\u015flemler gerektiren senaryolarda, \u00e7ift modlu Lambda'lar olduk\u00e7a pratik ve verimli \u00e7\u00f6z\u00fcmler sunar. Gelecekte, sunucusuz teknolojilerin geli\u015fimiyle birlikte, bu t\u00fcr esnek ve mod\u00fcler fonksiyon tasar\u0131mlar\u0131n\u0131n daha da yayg\u0131nla\u015fmas\u0131 beklenmektedir. AWS'nin Lambda'ya ekledi\u011fi yeni \u00f6zellikler (\u00f6rne\u011fin, konteyner imaj deste\u011fi, daha geli\u015fmi\u015f orkestrasyon ara\u00e7lar\u0131), \u00e7ift modlu Lambda'lar\u0131n yeteneklerini daha da art\u0131rarak daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131n tek bir fonksiyonda y\u00f6netilmesine olanak tan\u0131yabilir.\n<\/p>\n<p>\n    Bu makalede, Python ile \u00e7ift modlu bir Lambda fonksiyonunun nas\u0131l tasarlanaca\u011f\u0131n\u0131 ve Terraform ile nas\u0131l da\u011f\u0131t\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceledik. Temel kavramlardan ba\u015flayarak, kod \u00f6rnekleri, bir vaka analizi ve ileri d\u00fczey optimizasyonlarla konuyu derinlemesine ele ald\u0131k. Unutmay\u0131n ki, her zaman en basit \u00e7\u00f6z\u00fcm\u00fc aramak ve fonksiyonunuzun karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a mod\u00fclerli\u011fi korumak \u00f6nemlidir. Bu yakla\u015f\u0131m, hem maliyetleri optimize etmenize hem de operasyonel verimlili\u011fi art\u0131rman\u0131za yard\u0131mc\u0131 olacakt\u0131r.\n<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p><strong>1. \u00c7ift modlu bir Lambda fonksiyonu, performans sorunlar\u0131na yol a\u00e7ar m\u0131?<\/strong><\/p>\n<p>\n    Hay\u0131r, do\u011fru tasarland\u0131\u011f\u0131nda genellikle performans sorunlar\u0131na yol a\u00e7maz. Fonksiyonun kodu daha b\u00fcy\u00fck olaca\u011f\u0131 i\u00e7in cold start s\u00fcresi bir miktar artabilir, ancak bu durum Lambda katmanlar\u0131 veya \u00f6nceden tahsis edilmi\u015f konkurrentlik (provisioned concurrency) gibi y\u00f6ntemlerle y\u00f6netilebilir. \u00d6nemli olan, her modun yaln\u0131zca ihtiyac\u0131 olan kaynaklar\u0131 y\u00fcklemesi ve gereksiz ba\u011f\u0131ml\u0131l\u0131klar\u0131n \u00f6nlenmesidir.\n<\/p>\n<p><strong>2. \u00c7ift modlu Lambda m\u0131, yoksa birden fazla tek modlu Lambda m\u0131 kullanmal\u0131y\u0131m?<\/strong><\/p>\n<p>\n    Bu, projenin karma\u015f\u0131kl\u0131\u011f\u0131na ve ba\u011f\u0131ml\u0131l\u0131klar\u0131na ba\u011fl\u0131d\u0131r. E\u011fer modlar benzer i\u015f mant\u0131\u011f\u0131n\u0131 payla\u015f\u0131yor, ayn\u0131 ba\u011f\u0131ml\u0131l\u0131klara sahip ve genellikle ayn\u0131 veri t\u00fcrleri \u00fczerinde \u00e7al\u0131\u015f\u0131yorsa, \u00e7ift modlu bir Lambda daha verimli olabilir. Ancak modlar aras\u0131nda b\u00fcy\u00fck mant\u0131k farklar\u0131, farkl\u0131 ba\u011f\u0131ml\u0131l\u0131klar veya \u00e7ok farkl\u0131 tetikleyici mekanizmalar\u0131 varsa, ayr\u0131 ayr\u0131 tek modlu Lambda'lar daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir olabilir. \"Microservice\" prensiplerine uygun olarak, her servisin tek bir sorumlulu\u011fu olmas\u0131 idealdir; ancak pratik uygulamalarda \u00e7ift modluluk, bu prensipten \u00e7ok uzakla\u015fmadan esneklik sa\u011flar.\n<\/p>\n<p><strong>3. Terraform ile ortam de\u011fi\u015fkenlerini dinamik olarak nas\u0131l de\u011fi\u015ftirebilirim?<\/strong><\/p>\n<p>\n    Terraform'da ortam de\u011fi\u015fkenlerini de\u011fi\u015ftirmek i\u00e7in <code>aws_lambda_function<\/code> kayna\u011f\u0131n\u0131z\u0131n <code>environment<\/code> blo\u011fundaki <code>variables<\/code> k\u0131sm\u0131n\u0131 g\u00fcncelleyip <code>terraform apply<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir. Daha dinamik senaryolar i\u00e7in Terraform de\u011fi\u015fkenleri (<code>variable \"operation_mode\" {}<\/code>) kullanarak CLI \u00fczerinden veya CI\/CD boru hatt\u0131n\u0131zda farkl\u0131 de\u011ferler ge\u00e7irebilirsiniz. \u00d6rne\u011fin: <code>terraform apply -var=\"operation_mode=enrich\"<\/code>.\n<\/p>\n<p><strong>4. Hangi senaryolarda \u00e7ift modlu Lambda kullanmaktan ka\u00e7\u0131nmal\u0131y\u0131m?<\/strong><\/p>\n<p>\n    E\u011fer fonksiyon modlar\u0131n\u0131z birbirinden tamamen farkl\u0131 i\u015flevlere sahipse, \u00e7ok farkl\u0131 g\u00fcvenlik izinleri gerektiriyorsa veya farkl\u0131 \u00e7al\u0131\u015fma zamanlar\u0131\/bellek gereksinimleri varsa, tek bir \u00e7ift modlu fonksiyon yerine ayr\u0131 Lambda fonksiyonlar\u0131 kullanmak daha iyi olabilir. A\u015f\u0131r\u0131 b\u00fcy\u00fck ve karma\u015f\u0131k bir tek fonksiyon, y\u00f6netimi zorla\u015ft\u0131rabilir ve cold start s\u00fcrelerini art\u0131rabilir. Ayr\u0131ca, her modun ayr\u0131 ayr\u0131 \u00f6l\u00e7eklenmesi gerekti\u011fi durumlarda da ayr\u0131 fonksiyonlar tercih edilebilir.\n<\/p>\n<p><strong>5. Mobil uyumlu HTML i\u00e7in CSS media query'lerini nas\u0131l entegre edebilirim?<\/strong><\/p>\n<p>\n    Bu makale sadece HTML i\u00e7eri\u011fi \u00fcretmektedir, ancak genel bir bilgi olarak, mobil uyumlu HTML i\u00e7in CSS media query'lerini <code><head><\/code> b\u00f6l\u00fcm\u00fcnde veya harici bir CSS dosyas\u0131nda tan\u0131mlars\u0131n\u0131z. \u00d6rne\u011fin:\n<\/p>\n<pre><code>\n<style>\n  @media (max-width: 600px) {\n    body {\n      font-size: 14px;\n    }\n    .info-box {\n      padding: 10px;\n      margin: 10px 0;\n    }\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<p>\n    Bu, taray\u0131c\u0131n\u0131n ekran geni\u015fli\u011fine g\u00f6re farkl\u0131 stiller uygulamas\u0131n\u0131 sa\u011flar. \u0130\u00e7eri\u011fi yap\u0131land\u0131r\u0131rken (div'ler, paragraflar, g\u00f6rseller vb.) esnek bir d\u00fczen kullanmak (\u00f6rne\u011fin Flexbox veya CSS Grid) ve duyarl\u0131 \u00f6l\u00e7\u00fc birimleri (<code>%<\/code>, <code>vw<\/code>, <code>em<\/code>) tercih etmek, mobil uyumlulu\u011fu art\u0131r\u0131r.\n<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla&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-31488","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>Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma<\/title>\n<meta name=\"description\" content=\"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.\" \/>\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\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-10T10:01:27+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=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma\",\"datePublished\":\"2025-10-10T10:01:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\"},\"wordCount\":3516,\"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\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\",\"name\":\"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-10T10:01:27+00:00\",\"description\":\"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma\"}]},{\"@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":"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma","description":"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.","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\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma","og_description":"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-10T10:01:27+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma","datePublished":"2025-10-10T10:01:27+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/"},"wordCount":3516,"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\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/","name":"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-10T10:01:27+00:00","description":"AWS Lambda fonksiyonlar\u0131n\u0131z\u0131 Python ve Terraform kullanarak \u00e7ift modlu hale getirmek, farkl\u0131 senaryolar i\u00e7in tek bir kod taban\u0131yla esneklik ve verimlilik sa\u011flar. Bu rehberde, tek bir Lambda fonksiyonunun \u00e7e\u015fitli \u00e7al\u0131\u015fma modlar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle bu mimarinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-terraform-ile-cift-modlu-aws-lambda-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python ve Terraform ile \u00c7ift Modlu AWS Lambda Olu\u015fturma"}]},{"@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\/31488","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=31488"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31488\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}