Giriş
AWS Lambda, “serverless” mimarilerin vazgeçilmez bir parçası. Ancak manuel konfigürasyon ve tekrarlayan CI/CD süreçleri zaman kaybına yol açabiliyor. Bu rehberde, Terraform ile:
- Lambda fonksiyonlarınızı modüler bir yapıda tanımlayacak,
- IAM rollerini otomatize edecek,
- Güvenli bir şekilde Lambda fonksiyonlarımızı çalıştıracağız.
Proje linki: https://github.com/linuxpedi/terraform-aws-lambda
Neden Terraform?
Multi-Environment Support: Tek bir konfigürasyonla dev
/prod
ortamları yönetin.
Infrastructure as Code (IaC): Yapılandırmalarınızı versiyonlayın.
Proje Yapısı
.
├── lambda_functions/
│ └── linuxpedi
│ └── lambda_function.py # Uygulama kodu
├── modules/
│ └── lambda/ # Tüm Lambda bileşenleri burada
│ ├── main.tf # Lambda + ZIP + Cleanup
│ ├── iam.tf # IAM Rol ve Politikaları
│ ├── variables.tf # ENV
│ └── outputs.tf # Modül çıktıları
├── main.tf # Lambda kaynak oluşturma
└── provider.tf # AWS konfigürasyonu
Adım Adım Terraform Kodu
/modules/lambda/main.tf
data "archive_file" "lambda_zip" {
type = "zip"
source_dir = var.source_dir
output_path = "${path.root}/lambda_function_payload.zip"
}
resource "aws_lambda_function" "this" {
filename = data.archive_file.lambda_zip.output_path
function_name = var.function_name
role = aws_iam_role.lambda_exec_role.arn
handler = var.handler
runtime = var.runtime
source_code_hash = filebase64sha256(data.archive_file.lambda_zip.output_path)
environment {
variables = var.environment_variables
}
}
resource "null_resource" "cleanup" {
provisioner "local-exec" {
command = "rm -f ${path.root}/lambda_function_payload.zip"
}
depends_on = [aws_lambda_function.this]
}
Terraform kodu, AWS Lambda fonksiyonunun oluşturulması ve gereksiz dosyaların temizlenmesi sürecini otomatikleştirmek için kullanılır. İlk olarak, Lambda fonksiyonunun kaynak kodunu ZIP dosyası haline getiriyoruz. data "archive_file" "lambda_zip"
bloğu, source_dir değişkeninde belirtilen dizindeki dosyaları sıkıştırarak lambda_function_payload.zip adlı bir arşiv oluşturur. Burada:
type = "zip"
: Sıkıştırma türünü belirtir.source_dir = var.source_dir
: Lambda fonksiyonunun kaynak kodunun bulunduğu dizini belirtir.output_path = "${path.root}/lambda_function_payload.zip"
: ZIP dosyasının oluşturulacağı konumu belirtir.
Bu ZIP dosyasını kullanarak AWS Lambda fonksiyonunu oluşturuyoruz. resource "aws_lambda_function" "this"
bloğunda:
filename = data.archive_file.lambda_zip.output_path
: Lambda fonksiyonunun kaynak kodunu içeren ZIP dosyasının yolunu belirtir.function_name = var.function_name
: Lambda fonksiyonuna atanacak ismi belirler.role = aws_iam_role.lambda_exec_role.arn
: Lambda’nın çalıştırılabilmesi için gerekli olan IAM rolünü belirtir.handler = var.handler
: Lambda fonksiyonu için “handler” tanımlar. Örneğin,index.handler
şeklinde bir değer olabilir.runtime = var.runtime
: Lambda’nın çalıştırılacağı Python, Node.js, Go, Java gibi runtime belirtir.source_code_hash = filebase64sha256(data.archive_file.lambda_zip.output_path)
: Kaynak kodunun değişip değişmediğini belirlemek için ZIP dosyasının hash değerini kullanır.environment { variables = var.environment_variables }
: Lambda fonksiyonuna çevresel değişkenler eklenmesini sağlar.
Son olarak, gereksiz dosyaları temizlemek için resource "null_resource" "cleanup"
bloğu kullanılır. Burada:
provisioner "local-exec"
: Yerel bir komut çalıştırmamızı sağlar.command = "rm -f ${path.root}/lambda_function_payload.zip"
: ZIP dosyasını silerek gereksiz dosyaları temizler.depends_on = [aws_lambda_function.this]
: Temizlik işleminin yalnızca Lambda fonksiyonu oluşturulduktan sonra gerçekleşmesini garanti eder.
Bu yapılandırma, AWS Lambda fonksiyonunun otomatik olarak oluşturulmasını, çalıştırılmasını ve gereksiz dosyaların temizlenmesini sağlar. Böylece, hem düzenli bir geliştirme ortamı oluşturulmuş olur hem de gereksiz dosyaların birikmesi önlenir.
/modules/lambda/iam.tf
resource "aws_iam_role" "lambda_exec_role" {
name = "${var.function_name}_exec_role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Principal = {
Service: "lambda.amazonaws.com"
}
Effect = "Allow"
Sid = ""
},
]
})
}
resource "aws_iam_role_policy" "lambda_exec_policy" {
name = "${var.function_name}_exec_policy"
role = aws_iam_role.lambda_exec_role.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
Resource = "*"
},
]
})
}
AWS Lambda fonksiyonlarının çalışabilmesi için uygun bir IAM (Identity and Access Management) rolü ve bu role bağlı yetkilendirme politikalarını oluşturmak gerekir. Terraform kodu, Lambda fonksiyonunun çalıştırılması ve log kaydı tutabilmesi için gerekli olan IAM rolü ve politikalarını tanımlar.
Öncelikle, Lambda’nın AWS tarafından çalıştırılabilmesi için bir IAM rolü oluşturuyoruz. Bu rol, AWS Lambda’nın kendi servis kimliğiyle bu rolü üstlenebilmesini sağlar. Rolü tanımlarken, assume_role_policy kullanarak Lambda servisine bu rolü kullanma yetkisi veriyoruz. Burada Effect: “Allow” ile Lambda’nın bu rolü üstlenmesini sağlıyor, Principal kısmında ise yalnızca Lambda servisine özel izin tanımlıyoruz.
Oluşturduğumuz IAM rolüne bir IAM politikası ekleyerek Lambda fonksiyonunun CloudWatch Logs üzerinde log kaydı oluşturmasını sağlıyoruz. Bu politika, fonksiyonun logları takip edebilmesi için logs:CreateLogGroup, logs:CreateLogStream ve logs:PutLogEvents gibi yetkileri içeriyor. Böylece Lambda fonksiyonu çalıştırıldığında, hata ayıklama ve performans takibi için loglarını CloudWatch üzerinde tutabiliyor.
Bu yapılandırma sayesinde AWS Lambda fonksiyonumuz güvenli ve yetkilendirilmiş bir şekilde çalışabilir ve CloudWatch üzerinden loglarını yönetebilir.
main.tf
module "linuxpedi" {
source = "./modules/lambda"
function_name = "linuxpedi"
handler = "lambda_function.lambda_handler"
runtime = "python3.9"
source_dir = "${path.module}/lambda_functions/linuxpedi"
environment_variables = {
foo = "bar"
}
}
# Example of another module configuration
# module "hello_world" {
# source = "./modules/lambda"
# function_name = "hello_world"
# handler = "lambda_function.lambda_handler"
# runtime = "python3.9"
# source_dir = "${path.module}/lambda_functions/hello_world"
# environment_variables = {
# foo = "bar"
# }
# }
Terraform kodu, AWS Lambda fonksiyonunu bir modül kullanarak oluşturur ve yapılandırır. Modüler yapı sayesinde, tekrar kullanılabilir ve yönetimi kolay bir Lambda fonksiyonu oluşturabiliriz.
Terraform’da module “linuxpedi” bloğu, ./modules/lambda
dizinindeki Lambda modülünü çağırarak çalıştırır. Buradaki değişkenler ile modüle özel parametreler belirlenir:
source = "./modules/lambda"
: Lambda fonksiyonunu oluşturmak için kullanılan Terraform modülünün yolunu belirtir. Bu,./modules/lambda
dizinindeki yapılandırmayı kullanarak Lambda’yı oluşturur.function_name = "linuxpedi"
: AWS Lambda fonksiyonunun adını belirler.handler = "lambda_function.lambda_handler"
: Lambda fonksiyonunun giriş noktasını tanımlar. Buradalambda_function.py
dosyasındakilambda_handler
fonksiyonunun çalıştırılacağını belirtir.runtime = "python3.9"
: Lambda fonksiyonunun çalıştırılacağı programlama dilini ve sürümünü belirtir. Burada Python 3.9 kullanılmıştır.source_dir = "${path.module}/lambda_functions/linuxpedi"
: Lambda fonksiyonunun kaynak kodunun bulunduğu dizini belirtir.path.module
değişkeni, Terraform modülünün bulunduğu dizini temsil eder ve bunun altındakilambda_functions/linuxpedi
dizini Lambda fonksiyonunun kaynak kodlarını içerir.environment_variables = { foo = "bar" }
: Lambda fonksiyonu için çevresel değişkenleri belirler. Burada “foo” değişkeni “bar” değerine atanmıştır. Çevresel değişkenler, Lambda’nın çalışma zamanında erişebileceği dinamik konfigürasyon değerlerini belirlemek için kullanılır.
Bu yapı sayesinde, Lambda fonksiyonumuz daha modüler, yönetilebilir ve tekrar kullanılabilir hale getirilmiş olur. Ana dizindeki main.tf
, farklı Lambda fonksiyonları için modüler ve ölçeklenebilir bir yapı oluşturmak amacıyla merkezi bir Terraform konfigürasyonu olarak kullanılır.
outputs.tf
output "lambda_function_name" {
description = "The name of the Lambda function"
value = aws_lambda_function.this.function_name
}
output "lambda_function_arn" {
description = "The ARN of the Lambda function"
value = aws_lambda_function.this.arn
}
output "lambda_function_invoke_arn" {
description = "The invoke ARN of the Lambda function"
value = aws_lambda_function.this.invoke_arn
}
Terraform’un output bloğu, bir kaynağın belirli özelliklerini dışa aktarmak için kullanılır. Buradaki üç farklı çıktı şunlardır:
output "lambda_function_name"
:- Açıklama: Lambda fonksiyonunun adını döndürür.
value = aws_lambda_function.this.function_name
ile Terraform tarafından oluşturulan Lambda fonksiyonunun adını alır.
output "lambda_function_arn"
:- Açıklama: Lambda fonksiyonunun ARN (Amazon Resource Name) değerini döndürür.
value = aws_lambda_function.this.arn
ile Lambda fonksiyonunun benzersiz ARN’sini dışa aktarır.
output "lambda_function_invoke_arn"
:- Açıklama: Lambda fonksiyonunu çağırmak için kullanılabilecek Invoke ARN değerini döndürür.
value = aws_lambda_function.this.invoke_arn
ile Lambda’nın çağrılabileceği ARN’yi verir.
Bu çıktılar sayesinde, Terraform çalıştırıldıktan sonra Lambda fonksiyonunun adı, ARN’si ve Invoke ARN’si kolayca görüntülenebilir ve diğer altyapı bileşenleriyle entegre edilebilir.
/modules/lambda/variables.tf
variable "function_name" {
description = "The name of the Lambda function"
type = string
// Example: "my_lambda_function"
}
variable "handler" {
description = "The handler for the Lambda function"
type = string
// Example: "index.handler"
}
variable "runtime" {
description = "The runtime for the Lambda function"
type = string
// Example: "nodejs14.x"
}
variable "source_dir" {
description = "The source directory of the Lambda function code"
type = string
// Example: "./src"
}
variable "environment_variables" {
description = "Environment variables for the Lambda function"
type = map(string)
default = {}
// Example: { "ENV_VAR1" = "value1", "ENV_VAR2" = "value2" }
}
Bu variables.tf
dosyası, AWS Lambda fonksiyonu oluşturulurken kullanılan temel parametreleri tanımlar. Terraform, bu değişkenleri kullanarak fonksiyonun yapılandırılmasını sağlar ve her değişkenin doğru şekilde tanımlanması, Lambda fonksiyonunun düzgün çalışabilmesi için kritik öneme sahiptir. Bu değişkenlerin doğru yapılandırılması, fonksiyonunuzun düzgün çalışmasını ve esnekliğini sağlar.
Eğer bir Lambda fonksiyonu oluşturmayı planlıyorsanız, bu parametrelerin her birini anlamak ve doğru şekilde kullanmak, altyapınızın daha verimli ve yönetilebilir olmasına yardımcı olacaktır.
Çalıştır – Test et
Artık projeyi GitHub’dan klonlayarak deneyelim ve lambdamızın sağlıklı bir şekilde oluşturulduğunu görelim.
https://github.com/linuxpedi/terraform-aws-lambda
reposundan projeyi siz de deneyebilirsiniz. Tüm kodu inceleyip, README dosyasına göz atabilirsiniz.
terraform init
Bu komut, .tf
dosyalarınızda belirttiğiniz AWS gibi sağlayıcıların modüllerini indirir ve çalışma ortamınızı hazırlar. Başarılı bir init
işlemi, Terraform has been successfully initialized!
çıktısıyla tamamlanır.
❯ terraform init
Initializing modules...
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/null...
- Reusing previous version of hashicorp/archive from the dependency lock file
- Reusing previous version of hashicorp/aws from the dependency lock file
- Installing hashicorp/null v3.2.3...
- Installed hashicorp/null v3.2.3 (signed by HashiCorp)
- Using previously-installed hashicorp/archive v2.7.0
- Using previously-installed hashicorp/aws v5.89.0
Terraform has made some changes to the provider dependency selections recorded
in the .terraform.lock.hcl file. Review those changes and commit them to your
version control system if they represent changes you intended to make.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
terraform plan
Planlama aşamasında, Terraform altyapınızda ne tür değişiklikler yapılacağını simüle eder. Bu adım, beklenmedik silme veya değişiklikleri önceden görmenizi sağlar.
Çıktıda:
- + resource “aws_lambda_function” “ornek_lambda”: Oluşturulacak yeni kaynakları,
- ~ update in-place: Güncellenecek mevcut kaynakları,
- – destroy: Silinecek kaynakları görebilirsiniz.
Bu çıktıyı dikkatlice inceleyerek altyapı tasarımınızı doğrulayın.
❯ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# module.linuxpedi.aws_iam_role.lambda_exec_role will be created
+ resource "aws_iam_role" "lambda_exec_role" {
+ arn = (known after apply)
+ assume_role_policy = jsonencode(
{
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Principal = {
+ Service = "lambda.amazonaws.com"
}
+ Sid = ""
},
]
+ Version = "2012-10-17"
}
)
+ create_date = (known after apply)
+ force_detach_policies = false
+ id = (known after apply)
+ managed_policy_arns = (known after apply)
+ max_session_duration = 3600
+ name = "linuxpedi_exec_role"
+ name_prefix = (known after apply)
+ path = "/"
+ tags_all = (known after apply)
+ unique_id = (known after apply)
+ inline_policy {
+ name = (known after apply)
+ policy = (known after apply)
}
}
# module.linuxpedi.aws_iam_role_policy.lambda_exec_policy will be created
+ resource "aws_iam_role_policy" "lambda_exec_policy" {
+ id = (known after apply)
+ name = "linuxpedi_exec_policy"
+ name_prefix = (known after apply)
+ policy = jsonencode(
{
+ Statement = [
+ {
+ Action = [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
]
+ Effect = "Allow"
+ Resource = "*"
},
]
+ Version = "2012-10-17"
}
)
+ role = (known after apply)
}
# module.linuxpedi.aws_lambda_function.this will be created
+ resource "aws_lambda_function" "this" {
+ architectures = (known after apply)
+ arn = (known after apply)
+ code_sha256 = (known after apply)
+ filename = "./lambda_function_payload.zip"
+ function_name = "linuxpedi"
+ handler = "lambda_function.lambda_handler"
+ id = (known after apply)
+ invoke_arn = (known after apply)
+ last_modified = (known after apply)
+ memory_size = 128
+ package_type = "Zip"
+ publish = false
+ qualified_arn = (known after apply)
+ qualified_invoke_arn = (known after apply)
+ reserved_concurrent_executions = -1
+ role = (known after apply)
+ runtime = "python3.9"
+ signing_job_arn = (known after apply)
+ signing_profile_version_arn = (known after apply)
+ skip_destroy = false
+ source_code_hash = "NB3rJFAvk/XLh0PT4CE2eCtKtxYIkFQN/PV9PPbaM7w="
+ source_code_size = (known after apply)
+ tags_all = (known after apply)
+ timeout = 3
+ version = (known after apply)
+ environment {
+ variables = {
+ "foo" = "bar"
}
}
+ ephemeral_storage {
+ size = (known after apply)
}
+ logging_config {
+ application_log_level = (known after apply)
+ log_format = (known after apply)
+ log_group = (known after apply)
+ system_log_level = (known after apply)
}
+ tracing_config {
+ mode = (known after apply)
}
}
# module.linuxpedi.null_resource.cleanup will be created
+ resource "null_resource" "cleanup" {
+ id = (known after apply)
}
Plan: 4 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ lambda_function_arn = (known after apply)
+ lambda_function_invoke_arn = (known after apply)
+ lambda_function_name = "linuxpedi"
terraform apply
Terraform apply , önce terraform plan
çıktısını tekrar gösterir ve onayınızı bekler. yes
yazarak onayladığınızda, AWS hesabınızda Lambda fonksiyonu ve ilişkili kaynaklar (IAM rolü, CloudWatch Logs vb.) otomatik olarak oluşturulur.
❯ terraform apply
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# module.linuxpedi.aws_iam_role.lambda_exec_role will be created
+ resource "aws_iam_role" "lambda_exec_role" {
+ arn = (known after apply)
+ assume_role_policy = jsonencode(
{
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Principal = {
+ Service = "lambda.amazonaws.com"
}
+ Sid = ""
},
]
+ Version = "2012-10-17"
}
)
+ create_date = (known after apply)
+ force_detach_policies = false
+ id = (known after apply)
+ managed_policy_arns = (known after apply)
+ max_session_duration = 3600
+ name = "linuxpedi_exec_role"
+ name_prefix = (known after apply)
+ path = "/"
+ tags_all = (known after apply)
+ unique_id = (known after apply)
+ inline_policy {
+ name = (known after apply)
+ policy = (known after apply)
}
}
# module.linuxpedi.aws_iam_role_policy.lambda_exec_policy will be created
+ resource "aws_iam_role_policy" "lambda_exec_policy" {
+ id = (known after apply)
+ name = "linuxpedi_exec_policy"
+ name_prefix = (known after apply)
+ policy = jsonencode(
{
+ Statement = [
+ {
+ Action = [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
]
+ Effect = "Allow"
+ Resource = "*"
},
]
+ Version = "2012-10-17"
}
)
+ role = (known after apply)
}
# module.linuxpedi.aws_lambda_function.this will be created
+ resource "aws_lambda_function" "this" {
+ architectures = (known after apply)
+ arn = (known after apply)
+ code_sha256 = (known after apply)
+ filename = "./lambda_function_payload.zip"
+ function_name = "linuxpedi"
+ handler = "lambda_function.lambda_handler"
+ id = (known after apply)
+ invoke_arn = (known after apply)
+ last_modified = (known after apply)
+ memory_size = 128
+ package_type = "Zip"
+ publish = false
+ qualified_arn = (known after apply)
+ qualified_invoke_arn = (known after apply)
+ reserved_concurrent_executions = -1
+ role = (known after apply)
+ runtime = "python3.9"
+ signing_job_arn = (known after apply)
+ signing_profile_version_arn = (known after apply)
+ skip_destroy = false
+ source_code_hash = "NB3rJFAvk/XLh0PT4CE2eCtKtxYIkFQN/PV9PPbaM7w="
+ source_code_size = (known after apply)
+ tags_all = (known after apply)
+ timeout = 3
+ version = (known after apply)
+ environment {
+ variables = {
+ "foo" = "bar"
}
}
+ ephemeral_storage {
+ size = (known after apply)
}
+ logging_config {
+ application_log_level = (known after apply)
+ log_format = (known after apply)
+ log_group = (known after apply)
+ system_log_level = (known after apply)
}
+ tracing_config {
+ mode = (known after apply)
}
}
# module.linuxpedi.null_resource.cleanup will be created
+ resource "null_resource" "cleanup" {
+ id = (known after apply)
}
Plan: 4 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ lambda_function_arn = (known after apply)
+ lambda_function_invoke_arn = (known after apply)
+ lambda_function_name = "linuxpedi"
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
module.linuxpedi.aws_iam_role.lambda_exec_role: Creating...
module.linuxpedi.aws_iam_role.lambda_exec_role: Creation complete after 1s [id=linuxpedi_exec_role]
module.linuxpedi.aws_iam_role_policy.lambda_exec_policy: Creating...
module.linuxpedi.aws_lambda_function.this: Creating...
module.linuxpedi.aws_iam_role_policy.lambda_exec_policy: Creation complete after 1s [id=linuxpedi_exec_role:linuxpedi_exec_policy]
module.linuxpedi.aws_lambda_function.this: Still creating... [10s elapsed]
module.linuxpedi.aws_lambda_function.this: Creation complete after 16s [id=linuxpedi]
module.linuxpedi.null_resource.cleanup: Creating...
module.linuxpedi.null_resource.cleanup: Provisioning with 'local-exec'...
module.linuxpedi.null_resource.cleanup (local-exec): Executing: ["/bin/sh" "-c" "rm -f ./lambda_function_payload.zip"]
module.linuxpedi.null_resource.cleanup: Creation complete after 0s [id=...]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Outputs:
lambda_function_arn = "arn:aws:lambda:us-west-1:xxxxxxxxxxxx:function:linuxpedi"
lambda_function_invoke_arn = "arn:aws:apigateway:us-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-1:xxxxxxxxxxxx:function:linuxpedi/invocations"
lambda_function_name = "linuxpedi"
Lambda Fonksiyonunuz Hazır!
İşlem tamamlandığında, AWS Management Console üzerinden Lambda sekmesine giderek fonksiyonunuzun çalışır durumda olduğunu doğrulayabilirsiniz. Artık Terraform ile altyapınızı versiyon kontrollü ve tekrarlanabilir şekilde yönetebilirsiniz!



Sonuç ve Öneriler
Terraform ile AWS Lambda fonksiyonlarını modüler bir şekilde yönetmek, hem altyapıyı kontrol altında tutmanızı hem de süreçleri otomatize ederek hata riskini azaltmanızı sağlar. Bu rehberde:
- Modüler Yapı sayesinde farklı Lambda fonksiyonlarını tek bir konfigürasyonla yönetebilir,
- IAM Rollerinin Otomatik Oluşturulması ile güvenliği merkezileştirebilir,
- Çevresel Değişkenler ile dinamik konfigürasyonlar sağlayabilirsiniz.
Bu yaklaşım, özellikle CI/CD süreçlerinizi optimize ederek dağıtım sürelerini kısaltır ve tutarlılığı artırır. Ayrıca, Infrastructure as Code (IaC) prensibiyle yapılandırmalarınızı versiyonlayarak takım içi iş birliğini kolaylaştırırsınız.
İleri Adımlar
Çoklu Ortamlar: workspace
özelliğini kullanarak dev, staging ve prod ortamları arasında geçiş yapabilirsiniz.
API Gateway Entegrasyonu: Lambda fonksiyonlarınızı HTTP endpoint’leri ile kullanıma açabilirsiniz.
Monitoring: CloudWatch Alarmları veya AWS X-Ray ile performans takibi yapabilirsiniz.
Son Söz
Terraform, AWS Lambda yönetimini basitleştiren güçlü bir araçtır. Bu rehberdeki adımları uygulayarak altyapınızı daha esnek ve sürdürülebilir hale getirebilirsiniz. Denemekten çekinmeyin—başlangıçta küçük bir fonksiyonla başlayıp zamanla karmaşık iş akışlarına ölçeklendirebilirsiniz. Sorularınız veya geri bildirimleriniz için yorum bırakmayı unutmayın! 🚀