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::Function
4Properties:
5EphemeralStorage:
6Size: 10240 # 10 GB
7MemorySize: 3008
8Runtime: python3.11

Kütüphane yüklemelerini minimize et. Bağımlılıkları handler dışında yükle:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import json
2import boto3 # Handler dışında yükle
3
4dynamodb = boto3.resource('dynamodb') # Global scope'ta başlat
5
6def 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ırla
2mkdir python
3pip install requests -t python/
4zip -r layer.zip python/
5
6# AWS CLI ile upload et
7aws lambda publish-layer-version \
8--layer-name my-dependencies \
9--zip-file fileb://layer.zip \
10--compatible-runtimes python3.11

Fonksiyonun 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 60

Sonuç: 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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz