AWS Lambda Soğuk Başlatmayı Azaltma: Pratik Yöntemler
Lambda fonksiyonları ilk kez çalıştırıldığında veya uzun süre inaktif kaldıktan sonra başlatılması gecikmeli olur. Bu gecikmeye soğuk başlatma (cold start) denir ve kullanıcı deneyimini olumsuz etkiler. Özellikle API Gateway, DynamoDB veya real-time uygulamalarda kritik hale gelir.
Soğuk başlatma, runtime başlatılması, kod indirmesi ve ortam hazırlanması gibi adımlardan kaynaklanır. Tipik olarak 100-3000ms arası sürer; Python/Node.js daha hızlı, Java/C# daha yavaş başlar.
Provisioned Concurrency, belirli sayıda Lambda örneğini önceden sıcak tutarak soğuk başlatmayı neredeyse sıfıra indirir.
AWS Management Console üzerinden Lambda fonksiyonunun Concurrency sekmesine gir. Provisioned concurrency configurations bölümünde Add configuration tıkla. Fonksiyon için 5-10 örnek ayırarak başla.
Lambda'nın /tmp klasörü arttırıldığında başlatma hızlanır. Varsayılan 512 MB'dan 10 GB'a çıkarmak CPU ve ağ hızını da iyileştirir.
CloudFormation veya SAM template'inde:
1Resources:2MyFunction:3Type: AWS::Lambda::Function4Properties:5EphemeralStorage:6Size: 10240 # 10 GB7MemorySize: 30088Runtime: python3.11Kütüphane yüklemelerini minimize et. Bağımlılıkları handler dışında yükle:
1import json2import boto3 # Handler dışında yükle34dynamodb = boto3.resource('dynamodb') # Global scope'ta başlat56def lambda_handler(event, context):7table = dynamodb.Table('users')8response = table.get_item(Key={'id': event['id']})9return {10'statusCode': 200,11'body': json.dumps(response.get('Item', {}))12}Beklenen çıktı:
1{2"statusCode": 200,3"body": "{\"id\": \"123\", \"name\": \"Ali\"}"4}Bağımlılıkları Layer'da paketleyerek başlatma süresini azalt:
1# Yerel olarak layer hazırla2mkdir python3pip install requests -t python/4zip -r layer.zip python/56# AWS CLI ile upload et7aws lambda publish-layer-version \8--layer-name my-dependencies \9--zip-file fileb://layer.zip \10--compatible-runtimes python3.11Fonksiyonun Code sekmesinde Layers > Add a layer seçerek bağla.
Memory artırmak CPU'yu da artırır ve başlatmayı hızlandırır. En az 1024 MB'dan başla:
1aws lambda update-function-configuration \2--function-name my-function \3--memory-size 1024 \4--timeout 60Sonuç: Soğuk başlatma 500ms'den 50ms'ye düşer.
Provisioned Concurrency en etkili çözüm olsa da maliyetli. Bütçesi sınırlıysa kod optimizasyonu, ephemeral storage artırma ve Layer kullanımı ile başla. Kritik API'ler için Provisioned Concurrency, diğerleri için CloudWatch alarmlarla izleme yeterlidir.
0 yorum