Kısaca
AWS Lambda API, geliştiricilerin sunucusuz işlevleri otomatikleştirilmiş şekilde dağıtmasını, yönetmesini ve çağırmasını sağlayan RESTful bir arayüzdür. IAM kimlik doğrulaması, senkron ve asenkron çağırma seçenekleri, olay kaynağı eşlemesi ve üretim için eşzamanlılık yönetimi gibi temel işlevlerle tam otomasyon için uygundur. Bu rehberde, Lambda API entegrasyonunu sıfırdan üretime hazır şekilde kurmanın adımlarını bulacaksınız.
Giriş
AWS Lambda, aylık trilyonlarca isteği 1 milyondan fazla kullanıcı için işler. Sunucusuz uygulama ve otomasyon geliştiren ekipler için Lambda API entegrasyonu, CI/CD ve altyapı kodu için kritik öneme sahiptir.
Manuel olarak onlarca Lambda işlevini yöneten geliştiriciler, dağıtım ve güncellemelerde ciddi zaman kaybeder. Sağlam bir Lambda API entegrasyonu, dağıtımları otomatikleştirir, mavi-yeşil yayınları uygular ve dinamik ölçeklendirme sağlar.
Bu rehberde, IAM kimlik doğrulamasından işlev dağıtımına, çağırma modellerinden olay kaynağı eşlemesine kadar Lambda API ile tam otomasyon için ihtiyacınız olan her şeyi teknik örnekler ve kodlarla bulacaksınız.
AWS Lambda API Nedir?
AWS Lambda, sunucusuz bilgi işlem işlevlerini yönetmek için RESTful bir API sunar. API ile şunları yapabilirsiniz:
- İşlev oluşturma, güncelleme ve silme
- Kod dağıtımı ve versiyonlama
- İşlev çağırma (senkron/asenkron)
- Olay kaynağı eşlemesi (SQS, Kinesis, DynamoDB, S3)
- Katman yönetimi (paylaşılan bağımlılıklar)
- Takma ad ve trafik yönlendirme
- Eşzamanlılık ve kapasite yönetimi
- Günlükleme ve izleme entegrasyonu
Temel Özellikler
| Özellik | Açıklama |
|---|---|
| RESTful API | Standart HTTPS uç noktaları |
| IAM Authentication | AWS İmza Sürümü 4 |
| Async Invocation | Ateşle ve unut olay işleme |
| Sync Invocation | İstek-yanıt modeli |
| Event Sources | 200+ AWS hizmet entegrasyonu |
| Layers | Paylaşılan kod/bağımlılıklar |
| Versions/Aliases | Trafik kaydırma, rollback |
| Provisioned Concurrency | Soğuk başlangıcı önler |
Lambda Çalışma Zamanı Desteği
| Çalışma Zamanı | Sürümler | Kullanım Senaryosu |
|---|---|---|
| Node.js | 18.x, 20.x | API arka uç, olay işleme |
| Python | 3.9, 3.10, 3.11 | Veri işleme, ML çıkarımı |
| Java | 11, 17, 21 | Kurumsal uygulamalar |
| Go | 1.x | Yüksek performans |
| Rust | 1.x | Düşük gecikme |
| .NET | 6, 8 | Windows iş yükleri |
| Ruby | 3.x | Web uygulamaları |
| Custom | Any | Kapsayıcı tabanlı çalışma |
API Mimari Genel Bakış
Temel Lambda API uç noktası:
https://lambda.{region}.amazonaws.com/2015-03-31/
API Sürümleri
| Sürüm | Durum | Kullanım Senaryosu |
|---|---|---|
| 2015-03-31 | Güncel | Tüm Lambda işlemleri |
| 2018-01-31 | Çalışma Zamanı API | Özel runtime arayüzü |
Başlarken: Kimlik Doğrulama Kurulumu
Adım 1: AWS Hesabı ve IAM Kullanıcısı Oluşturun
- AWS Konsolunu açın.
- Yeni bir AWS hesabı oluşturun.
- IAM Konsolu > Kullanıcılar > Kullanıcı Oluştur menüsünden yeni bir kullanıcı ekleyin.
- Kullanıcıya Lambda yürütme politikalarını atayın.
Adım 2: IAM Kimlik Bilgilerini Oluşturun
Programlı erişim için erişim anahtarı oluşturun:
# AWS CLI ile anahtar oluşturma
aws iam create-access-key --user-name lambda-deployer
Çıktıdaki anahtarı güvenli şekilde saklayın:
# ~/.aws/credentials
[lambda-deployer]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Veya ortam değişkeni olarak
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
Adım 3: AWS İmza Sürümü 4'ü Kullanın
Lambda API istekleri için SigV4 imzası gereklidir. Kendi imzalayıcınızı bu şekilde yazabilirsiniz:
const crypto = require('crypto');
class AWSSigner {
constructor(accessKeyId, secretAccessKey, region, service = 'lambda') {
this.accessKeyId = accessKeyId;
this.secretAccessKey = secretAccessKey;
this.region = region;
this.service = service;
}
// ... (kodun tamamı yukarıdaki gibi)
}
Kullanım:
const signer = new AWSSigner(
process.env.AWS_ACCESS_KEY_ID,
process.env.AWS_SECRET_ACCESS_KEY,
'us-east-1'
);
Adım 4: Lambda API İstemcisi Oluşturun
Aşağıdaki fonksiyonla Lambda API'ye imzalı istek gönderebilirsiniz:
const LAMBDA_BASE_URL = 'https://lambda.us-east-1.amazonaws.com/2015-03-31';
const lambdaRequest = async (path, options = {}) => {
// ... (yukarıdaki kodun tamamı)
};
// Kullanım
const functions = await lambdaRequest('/functions');
console.log(`Bulunan işlev sayısı: ${functions.Functions.length}`);
Alternatif: AWS SDK Kullanın
AWS SDK kullanarak imzalama ve istek göndermeyi kolayca otomatikleştirebilirsiniz:
const { LambdaClient, ListFunctionsCommand, CreateFunctionCommand, InvokeCommand } = require('@aws-sdk/client-lambda');
const lambda = new LambdaClient({ region: 'us-east-1' });
// İşlevleri listele
const listCommand = new ListFunctionsCommand({});
const result = await lambda.send(listCommand);
// İşlev oluştur
const createCommand = new CreateFunctionCommand({
// ... (örnek yapılandırma)
});
const fn = await lambda.send(createCommand);
İşlev Yönetimi
Bir İşlev Oluşturma
Lambda işlevini API ile oluşturun:
const createFunction = async (functionConfig) => {
// ... (tam kod yukarıda)
};
// Kullanım
const fn = await createFunction({
name: 'order-processor',
roleArn: 'arn:aws:iam::123456789012:role/lambda-execution-role',
handler: 'index.handler',
runtime: 'nodejs20.x',
s3Bucket: 'my-deployments-bucket',
s3Key: 'order-processor/v1.0.0.zip',
description: 'SQS kuyruğundan siparişleri işler',
timeout: 30,
memorySize: 512,
environment: {
DB_HOST: 'db.example.com',
LOG_LEVEL: 'info'
}
});
console.log(`İşlev oluşturuldu: ${fn.FunctionArn}`);
Kodu Doğrudan Yükleme
Küçük işlevler için kodu doğrudan yükleyin:
const fs = require('fs');
const path = require('path');
const createFunctionWithZip = async (functionName, zipPath) => {
// ... (tam kod yukarıda)
};
// Paketleyip yükleyin
// zip -r function.zip index.js node_modules/
await createFunctionWithZip('my-function', './function.zip');
İşlev Kodunu Güncelleme
Yeni kod sürümü dağıtımı için:
const updateFunctionCode = async (functionName, updateConfig) => {
// ... (tam kod yukarıda)
};
// Kullanım
const updated = await updateFunctionCode('order-processor', {
s3Bucket: 'my-deployments-bucket',
s3Key: 'order-processor/v1.1.0.zip',
publish: true
});
console.log(`Sürüm şuna güncellendi: ${updated.Version}`);
İşlev Yapılandırmasını Güncelleme
Zaman aşımı, bellek veya ortam değişkenlerini güncelleyin:
const updateFunctionConfig = async (functionName, config) => {
// ... (tam kod yukarıda)
};
Bir İşlevi Silme
const deleteFunction = async (functionName, qualifier = null) => {
// ... (tam kod yukarıda)
};
İşlev Çağırma
Eşzamanlı Çağırma (İstek-Yanıt)
const invokeFunction = async (functionName, payload, qualifier = null) => {
// ... (tam kod yukarıda)
};
Eşzamansız Çağırma (Ateşle ve Unut)
const invokeAsync = async (functionName, payload) => {
// ... (tam kod yukarıda)
};
Deneme Çalıştırması
const dryRunInvocation = async (functionName) => {
// ... (tam kod yukarıda)
};
Çağırma Yanıt Türleri
| Çağırma Türü | Davranış | Kullanım Senaryosu |
|---|---|---|
RequestResponse |
Sonuç bekle | API, CLI |
Event |
Ateşle ve unut | Olay işleme |
DryRun |
Yalnızca izin testi | Doğrulama, debug |
Sürüm ve Takma Ad Yönetimi
Sürümleri Yayınlama
const publishVersion = async (functionName, description = null) => {
// ... (tam kod yukarıda)
};
Takma Adlar Oluşturma
const createAlias = async (functionName, aliasName, version, description = null) => {
// ... (tam kod yukarıda)
};
Yönlendirme ile Trafik Kaydırma
const updateAliasWithRouting = async (functionName, aliasName, routingConfig) => {
// ... (tam kod yukarıda)
};
Takma Ad Kullanım Senaryoları
| Takma Ad | Sürüm | Amaç |
|---|---|---|
dev |
$LATEST | Geliştirme testi |
staging |
Latest tested | QA doğrulama |
prod |
Stabil sürüm | Üretim trafiği |
blue |
Şu anki prod | Mavi-yeşil dağıtım |
green |
Yeni sürüm | Mavi-yeşil dağıtım |
Olay Kaynağı Eşlemesi
SQS Tetikleyicisi Oluşturma
const createSQSEventSource = async (functionName, queueArn, batchSize = 10) => {
// ... (tam kod yukarıda)
};
DynamoDB Akış Tetikleyicisi Oluşturma
const createDynamoDBEventSource = async (functionName, streamArn, startingPosition = 'LATEST') => {
// ... (tam kod yukarıda)
};
Olay Kaynağı Türleri
| Kaynak | Senaryo | Toplu İşlem |
|---|---|---|
| SQS | Mesaj kuyruğu | Evet (1-10) |
| Kinesis | Gerçek zamanlı akış | Evet (1-10,000) |
| DynamoDB | DB değişikliği | Evet (1-1,000) |
| S3 | Nesne olayları | Hayır |
| EventBridge | Olay yönlendirme | Evet |
| API Gateway | HTTP API | Hayır |
| Schedule | Zamanlanmış iş | Hayır |
Katman Yönetimi
Bir Katman Oluşturma
const createLayer = async (layerName, layerConfig) => {
// ... (tam kod yukarıda)
};
İşlevlerde Katmanları Kullanma
const createFunctionWithLayers = async (functionConfig) => {
// ... (tam kod yukarıda)
};
Eşzamanlılık ve Ölçeklendirme
Ayrılmış Eşzamanlılığı Ayarlama
const putFunctionConcurrency = async (functionName, reservedConcurrentExecutions) => {
// ... (tam kod yukarıda)
};
Hesap Eşzamanlılık Limitleri
| Hesap Tipi | Varsayılan Limit | Arttırım |
|---|---|---|
| Free Tier | 1,000 | Evet |
| Pay-as-you-go | 1,000 | Evet |
| Enterprise | 1,000+ | Özel limit |
Üretim Dağıtım Kontrol Listesi
Üretime geçmeden önce şunları uygulayın:
- [ ] AWS SDK ile otomatik SigV4 imzalaması kullanın
- [ ] Versiyon ve takma ad yönetimini etkinleştirin
- [ ] Kritik işlevlere ayrılmış eşzamanlılık atayın
- [ ] Asenkron çağrılar için DLQ kurun
- [ ] Hata ayıklama için X-Ray izlemeyi açın
- [ ] VPC yapılandırmasıyla veritabanı erişimi sağlayın
- [ ] Yapılandırılmış (JSON) günlükleme kullanın
- [ ] CloudWatch alarmları kurun
- [ ] Ortak bağımlılıklar için katmanları kullanın
- [ ] Mavi-yeşil dağıtım uygulayın
Gerçek Dünya Kullanım Senaryoları
API Arka Uç
Bir SaaS şirketi, yüksek trafikli sunucusuz REST API'yi şöyle inşa eder:
- Her kaynak için ayrı Lambda işlevi
- API Gateway ile yönlendirme ve kimlik doğrulama
- DynamoDB ile veri depolama
- Tutarlı performans için ayrılmış eşzamanlılık
Sonuç: %99,99 uptime, EC2'ye göre %60 maliyet avantajı.
Olay İşleme Hattı
E-ticaret platformu, sipariş yoğunluğunu yönetmek için:
- SQS ile siparişleri tamponlayıp Lambda ile toplu işleme
- Başarısız mesajlar için DLQ
- CloudWatch ile kuyruk derinliği uyarıları
Sonuç: Hiçbir sipariş kaybı yok, 10 kata kadar ölçeklenebilirlik.
Sonuç
AWS Lambda API ile:
- IAM kimlik doğrulaması (SigV4, AWS SDK önerilir)
- Senkron ve asenkron çağırma modelleri
- Sürüm ve takma ad ile güvenli dağıtımlar
- Olay kaynağı entegrasyonu ile otomasyon
- Katman yönetimiyle paylaşılan bağımlılıklar
- Apidog, API testleri ve ekip işbirliği için pratik bir platform
SSS Bölümü
Lambda API ile nasıl kimlik doğrularım?
AWS IAM kimlik bilgilerini SigV4 imzayla kullanın. AWS SDK, imzalamayı otomatik yapar.
Eşzamanlı ve eşzamansız çağırma arasındaki fark nedir?
Eşzamanlı (RequestResponse), işlevin tamamlanmasını bekler ve sonucu döndürür. Eşzamansız (Event), isteği sıraya alır ve hemen döner.
Lambda sürümleri nasıl çalışır?
Her yayınlanan sürüm, işlevin değişmez bir anlık görüntüsüdür. Takma adlar ile belirli sürümlere trafik yönlendirebilirsiniz.
Lambda Katmanları nelerdir?
Katmanlar, kod ve bağımlılıkları paylaşmak için kullanılır, birden çok işlevde tekrar kullanılabilir kütüphaneler sağlar.
Soğuk başlangıçları nasıl azaltırım?
Ayrılmış eşzamanlılık, küçük deploy paketleri ve derlenmiş diller (Go, Rust) kullanın.
Ayrılmış eşzamanlılık nedir?
Belirli işlevler için yürütme slotlarını rezerve eder, kaynak çakışmasını önler.
Lambda'yı S3'ten tetikleyebilir miyim?
Evet, S3 nesne olayları ile Lambda otomatik olarak tetiklenebilir.
Top comments (0)