Takip et

AWS ve Terraform ile Serverless ToDo API Geliştirme: Tam Bir Öğrenme Rehberi

AWS ve Terraform ile Serverless ToDo API Geliştirme: Tam Bir Öğrenme Rehberi

Sunucuları yönetmekten sıkıldınız mı? Karmaşık altyapı yönetimi yerine, işinize odaklanmak istiyor musunuz? O halde serverless mimarisi tam size göre! Bu rehberde, AWS ve Terraform kullanarak sıfırdan bir ToDo API’si oluşturacağız. Adım adım ilerleyeceğimiz bu yolculukta, temel kavramlardan ileri düzey tekniklere kadar her şeyi öğreneceksiniz. Hazırsanız, başlayalım!

Serverless Mimarisi Nedir? Temel Kavramlar

Serverless mimari, sunucu yönetiminden sizi kurtaran bir bulut tabanlı yaklaşımı temsil eder. Kodunuzu çalıştırmak için gerekli altyapıyı, Amazon Web Services (AWS) gibi bulut sağlayıcıları yönetir. Bu sayede, sunucu bakımı, güncellemeleri ve ölçeklendirme gibi işlemlerle uğraşmaz, kodunuza ve uygulamanızın işlevselliğine odaklanırsınız. Serverless mimarinin temel yapı taşları arasında Lambda fonksiyonları, API Gateway ve DynamoDB gibi yönetilen servisler yer alır. Lambda fonksiyonları, olay tetiklemeli kod parçalarıdır ve API Gateway, bu fonksiyonlara erişim sağlayan bir API oluştururken, DynamoDB ise veritabanı ihtiyaçlarınızı karşılar. Bu mimari, maliyet etkinliği ve ölçeklenebilirlik açısından büyük avantajlar sunar. Yalnızca kodunuz çalışırken ödeme yaparsınız ve uygulama trafiğiniz arttığında sistem otomatik olarak ölçeklenir. Başka bir deyişle, maliyetler yalnızca kullanımınıza göre belirlenir. Daha fazla bilgi için fatihsoysal.com sitesini ziyaret edebilirsiniz.

API Gateway’i Terraform ile Nasıl Kurarız?

Öncelikle, API Gateway’imizi Terraform ile otomatikleştireceğiz. Terraform, altyapınızı tanımlamak ve yönetmek için kullanılan bir Infrastructure as Code (IaC) aracıdır. Bu, altyapınızı kod olarak yönetebileceğiniz ve değişiklikleri sürüm kontrol sistemlerinde takip edebileceğiniz anlamına gelir. İşte basit bir API Gateway tanımı:

resource "aws_api_gateway_rest_api" "todo_api" {
  name        = "todo-api"
  description = "Todo API"
}

resource "aws_api_gateway_resource" "proxy" {
  rest_api_id = aws_api_gateway_rest_api.todo_api.id
  parent_id   = aws_api_gateway_rest_api.todo_api.root_resource_id
  path_part   = "{proxy+}"
}

Bu kod bloğu, todo-api adında bir REST API tanımlar. {proxy+} kısmı, tüm istekleri bir Lambda fonksiyonuna yönlendireceğimiz anlamına gelir. Daha sonra, bu API'ye Lambda fonksiyonumuzu bağlayacağız. Bu basit örneği geliştirerek, yetkilendirme, CORS gibi ilave özellikleri de ekleyebilirsiniz. Örneğin, API Key'ler ile güvenliği arttırmak ya da özel bir domain adı kullanmak için Terraform konfigürasyonunu genişletebilirsiniz.

AWS Lambda Fonksiyonunu Oluşturma ve Terraform ile Yönetme

API Gateway'imiz hazır olduğuna göre, şimdi de ToDo API'sini oluşturmak için gerekli Lambda fonksiyonunu oluşturacağız. Lambda fonksiyonları, serverless ortamında kod çalıştırmak için idealdir. Python ile yazılmış bir Lambda fonksiyonu örneği:

import json

def lambda_handler(event, context):
    # ToDo işlemleri burada yapılacak
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Bu basit fonksiyon, "Hello from Lambda!" mesajını döndürür.  Gerçek bir ToDo uygulaması için,  DynamoDB ile etkileşim kurarak verileri işlemeniz gerekecektir.  Lambda fonksiyonunu Terraform ile yönetebiliriz:

resource "aws_lambda_function" "todo_lambda" {
filename = "lambda_function.zip"
function_name = "todo-lambda"
role = aws_iam_role.lambda_role.arn
handler = "lambda_function.lambda_handler"
runtime = "python3.9"
source_code_hash = filebase64sha256("lambda_function.zip")
}

Bu kod, lambda_function.zip dosyasındaki Python kodunu "todo-lambda" adıyla bir Lambda fonksiyonu olarak tanımlar. aws_iam_role.lambda_role.arn kısmı, fonksiyonun gerekli izinlere sahip olmasını sağlar. Fonksiyonunuzun daha güvenli çalışması için IAM rollerini doğru bir şekilde konfigüre etmeniz kritik öneme sahiptir. Dikkat etmeniz gereken bir diğer önemli nokta ise, zip dosyasının doğru bir şekilde oluşturulması ve doğru izinlerle AWS'ye yüklenmesidir.

DynamoDB Tablosu Oluşturma ve Veri Yönetimi

ToDo uygulamasının verilerini saklamak için DynamoDB kullanacağız. DynamoDB, NoSQL bir veritabanı hizmetidir ve yüksek ölçeklenebilirlik sunar. Terraform ile DynamoDB tablosu oluşturmak oldukça basittir:

resource "aws_dynamodb_table" "todo_table" {
  name           = "todo-table"
  billing_mode   = "PAY_PER_REQUEST"
  hash_key       = "id"
  attribute {
    name = "id"
    type = "S"
  }
}

Bu kod, todo-table adında bir DynamoDB tablosu tanımlar ve id sütununu birincil anahtar olarak kullanır. PAY_PER_REQUEST fatura yöntemi, kullanım bazlı ücretlendirme anlamına gelir. Daha sonra, Lambda fonksiyonunuz bu tablo ile etkileşim kurarak verileri kaydedebilir ve okuyabilir. DynamoDB'nin performansını optimize etmek için, uygulama gereksinimlerine göre kapasite ayarlarını doğru bir şekilde yapmanız ve indeksleri kullanmanız önemlidir.

API Gateway ve Lambda Fonksiyonunun Bağlantısı

Son adım olarak, API Gateway'i Lambda fonksiyonuna bağlayacağız. Bu, API Gateway üzerinden gelen isteklerin Lambda fonksiyonu tarafından işlenmesini sağlar. Terraform ile bu bağlantıyı aşağıdaki gibi sağlayabilirsiniz:

resource "aws_api_gateway_integration" "lambda_integration" {
  rest_api_id = aws_api_gateway_rest_api.todo_api.id
  resource_id = aws_api_gateway_resource.proxy.id
  http_method = "ANY"
  integration_http_method = "POST"
  type = "AWS_PROXY"
  integration_subtype = "aws_proxy"
  credentials = aws_iam_role.lambda_role.arn
}

Bu kod, API Gateway'deki tüm istekleri (ANY method) Lambda fonksiyonuna (AWS_PROXY türü) yönlendirir. credentials kısmı, Lambda fonksiyonunun izinlerini belirtir. Bu bağlantı doğru bir şekilde kurulduğundan emin olmak için, Terraform'un başarılı bir şekilde çalıştığından ve API Gateway'in Lambda fonksiyonunu doğru şekilde çağırdığından emin olmalısınız. Yanlış konfigürasyonlar performans sorunlarına ve hatalara yol açabilir.

Öğrenme Yol Haritası

[Yeni Başlayan]: Bu rehberdeki adımları takip ederek, temel bir ToDo API'si oluşturabilirsiniz. AWS konsolunu kullanarak Lambda fonksiyonlarını ve DynamoDB tablolarını manuel olarak da oluşturabilirsiniz, ancak Terraform kullanarak otomasyon sağlamanız, gelecekteki değişiklikleri kolaylaştıracaktır.

[Orta]: Güvenlik, CORS, API Key yönetimi gibi konuları inceleyerek API'nizi daha güvenli ve kullanışlı hale getirebilirsiniz. Daha gelişmiş DynamoDB sorguları ve Lambda fonksiyonu optimizasyonları üzerinde çalışabilirsiniz. Ayrıca farklı hata yönetimi tekniklerini de uygulayarak uygulamanızın daha sağlam olmasını sağlayabilirsiniz.

[İleri Düzey]: Serverless Application Model (SAM) gibi araçları kullanarak daha karmaşık serverless uygulamaları geliştirebilir, API Gateway'de custom authorizers kullanarak yetkilendirmeyi geliştirebilir, ve CI/CD pipeline'larını entegre ederek otomatik dağıtım süreçleri kurabilirsiniz. Bu seviyede, performans optimizasyonu ve maliyet analizi kritik önem taşır.

Gerçek Dünya Senaryosu: Bir E-Ticaret Uygulaması İçin ToDo API'si

Bir e-ticaret şirketinde, stok yönetimi için bir ToDo API'si kullanabilirsiniz. Örneğin, düşük stok seviyelerine sahip ürünleri takip eden ve ilgili departmanları bilgilendiren bir sistem kurabilirsiniz. Bu sistem, stok eksiklikleri nedeniyle oluşabilecek satış kayıplarını önlemeye yardımcı olur. Bu senaryo, gerçek zamanlı veri işleme ve ölçeklenebilirlik gerektirir, bu yüzden serverless mimarisi ideal bir çözümdür.

Performans Karşılaştırması: Tablo, Liste ve Özel Çözüm

Veri depolama ve erişim performansını optimize etmek için farklı yaklaşımlar karşılaştırabiliriz:

| Yöntem | Avantajlar | Dezavantajlar |
|----------------|----------------------------------------------|---------------------------------------------|
| DynamoDB Tablo | Yüksek performans, ölçeklenebilirlik | NoSQL veritabanı, ilişkisel sorgular için uygun değil |
| Liste (Array) | Basit yapı | Ölçeklenebilirlik sınırlı, performans düşebilir |
| Özel Çözüm | Uygulamaya özel optimizasyonlar | Geliştirme süresi uzun, bakım zor olabilir |

Güvenlik Uyarıları

Dikkat: Lambda fonksiyonlarınıza ve DynamoDB tablonuza erişim izinlerini doğru bir şekilde ayarlamamanız durumunda, güvenlik açıklarına neden olabilirsiniz. IAM rollerini ve politikalarını dikkatlice yapılandırmanız ve gereksiz izinleri vermemeniz çok önemlidir.

Sonuç

Bu rehberde, AWS ve Terraform kullanarak bir Serverless ToDo API'si geliştirmenin temel adımlarını öğrendiniz. Serverless mimarisinin avantajlarını ve kullanım alanlarını keşfettik. Uygulama geliştirme sürecinizde karşılaşabileceğiniz zorluklar ve bunların çözüm yolları hakkında bilgi sahibi oldunuz. Daha fazla bilgi için fatihsoysal.com adresini ziyaret edebilirsiniz.

Sıkça Sorulan Sorular

* Terraform nedir ve neden kullanmalıyım? Terraform, altyapınızı kod olarak yönetmenizi sağlayan bir IaC aracıdır. Bu, altyapınızı otomatikleştirmenize, sürüm kontrolü sağlamanıza ve değişiklikleri izleyebilmenize olanak tanır.

* DynamoDB'nin avantajları nelerdir? DynamoDB, yüksek performans, ölçeklenebilirlik ve esneklik sunan bir NoSQL veritabanı hizmetidir. Kullanımı kolay ve yönetimi basittir.

* Lambda fonksiyonları nasıl ölçeklenir? Lambda fonksiyonları, gelen isteklere göre otomatik olarak ölçeklenir. AWS, gerekli kaynakları dinamik olarak tahsis eder.

* API Gateway'in amacı nedir? API Gateway, uygulamanızın giriş noktası olarak hizmet eder ve istekleri Lambda fonksiyonlarına yönlendirir. Güvenlik, yetkilendirme ve hız limitlerini yönetmenize de olanak sağlar.

* Serverless mimarisi hangi durumlarda idealdir? Serverless mimarisi, hızlı geliştirme, ölçeklenebilirlik ve maliyet etkinliği gerektiren uygulamalar için idealdir. Olay tetiklemeli veya talep üzerine çalışan uygulamalar için özellikle uygundur.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık