AWS Lambda ve Terraform: Adım Adım Kurulum Rehberi
AWS Lambda ve Terraform: Adım Adım Kurulum Rehberi
Terraform, altyapı yönetimini kod ile yapmanızı sağlayan (IaC) güçlü bir araçtır. AWS Lambda ise sunucu yönetimi olmadan kod çalıştırmanıza olanak tanır. Bu ikisini birleştirmek, ölçeklenebilir ve tekrar kullanılabilir sunucusuz mimariler oluşturmanın en etkili yoludur.
Bu rehberde, Terraform kullanarak baştan sona bir AWS Lambda fonksiyonu oluşturacağız.
<div class="toc"> <ul> <li><a href="#on-gereksinimler">Ön Gereksinimler</a></li> <li><a href="#adim-1-proje-yapisi">Adım 1: Proje Yapısı</a></li> <li><a href="#adim-2-iam-rolu-olusturma">Adım 2: IAM Rolü Oluşturma</a></li> <li><a href="#adim-3-lambda-kodunu-hazirlama">Adım 3: Lambda Kodunu Hazırlama</a></li> <li><a href="#adim-4-terraform-ile-lambda-tanimlama">Adım 4: Terraform ile Lambda Tanımlama</a></li> <li><a href="#adim-5-dagitim">Adım 5: Dağıtım (Deploy)</a></li> <li><a href="#adim-6-kaynaklari-temizleme">Adım 6: Kaynakları Temizleme</a></li> <li><a href="#sonuc">Sonuç</a></li> </ul> </div>Ön Gereksinimler
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
- AWS Hesabı: Erişim anahtarlarına sahip bir kullanıcı.
- AWS CLI: Yüklü ve yapılandırılmış (
aws configure). - Terraform: Yüklü (v1.0+).
Adım 1: Proje Yapısı
Proje dizininizi oluşturun ve aşağıdaki dosyaları hazırlayın:
mkdir lambda-terraform-demo
cd lambda-terraform-demo
touch main.tf variables.tf outputs.tf lambda_function.py
main.tf dosyasında AWS sağlayıcısını (provider) tanımlayarak başlayalım:
provider "aws" {
region = "eu-central-1" # Veya tercih ettiğiniz bölge
}
Adım 2: IAM Rolü Oluşturma
Lambda fonksiyonunun çalışabilmesi için bir IAM rolüne ihtiyacı vardır. Bu rol, Lambda'nın AWS servislerine (örneğin CloudWatch Logs) erişmesine izin verir.
# Lambda için IAM Rolü (Assume Role Policy)
resource "aws_iam_role" "lambda_exec" {
name = "serverless_lambda"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = ""
Principal = {
Service = "lambda.amazonaws.com"
}
}
]
})
}
# CloudWatch Logs için Temel İzinler
resource "aws_iam_role_policy_attachment" "lambda_policy" {
role = aws_iam_role.lambda_exec.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
Adım 3: Lambda Kodunu Hazırlama
Basit bir Python fonksiyonu oluşturalım. lambda_function.py dosyasını açın:
def lambda_handler(event, context):
print("Terraform ile Lambda tetiklendi!")
return {
'statusCode': 200,
'body': 'Merhaba, Terraform!'
}
Adım 4: Terraform ile Lambda Tanımlama
Şimdi Lambda fonksiyonunun kendisini tanımlayacağız. Terraform'un kodu AWS'e yükleyebilmesi için önce .zip formatına getirmemiz gerekir.
# Python kodunu zip'le
data "archive_file" "lambda_zip" {
type = "zip"
source_file = "lambda_function.py"
output_path = "lambda_function_payload.zip"
}
# Lambda Fonksiyonu Kaynağı
resource "aws_lambda_function" "test_lambda" {
# Yerel zip dosyasını kullan
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
role = aws_iam_role.lambda_exec.arn
handler = "lambda_function.lambda_handler"
# Kod değişikliğinde yeniden deploy etmek için hash kontrolü
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
runtime = "python3.9"
environment {
variables = {
foo = "bar"
}
}
}
Adım 5: Dağıtım
Yapılandırmayı uygulamak için terminalden şu komutları çalıştırın:
-
Başlat: Terraform'u ve gerekli eklentileri indirir.
terraform init -
Planla: Yapılacak değişiklikleri görün.
terraform plan -
Uygula: Kaynakları oluşturun.
terraform apply -auto-approve
İşlem tamamlandığında, AWS Konsolu üzerinden Lambda fonksiyonunuzu görebilir ve "Test" sekmesinden çalıştırabilirsiniz.
Adım 6: Kaynakları Temizleme
Denemeyi bitirdiğinizde maliyet oluşmaması için kaynakları silebilirsiniz:
terraform destroy -auto-approve
Sonuç
Bu rehberde, Terraform kullanarak temel bir AWS Lambda fonksiyonunu nasıl otomatize edeceğinizi öğrendiniz. IaC yaklaşımı, altyapınızın versiyonlanabilir, test edilebilir ve tekrar üretilebilir olmasını sağlar.
Daha ileri seviye konular için AWS Danışmanlık hizmetlerimize göz atabilir veya karmaşık altyapılar için Terraform Danışmanlık desteği alabilirsiniz. Ayrıca konteyner tabanlı çözümler için DevOpsN üzerindeki diğer makalelerimizi inceleyebilirsiniz.
Kaynak / Source: https://awsfundamentals.com/blog/aws-lambda-with-terraform