AWS Lambda Timeout Hatası Nedir?
Bu, genellikle fonksiyonunuzun çok uzun sürdüğü, veritabanı bağlantılarında bekleme süresi olduğu, üçüncü parti API çağrılarının yavaşladığı veya kaynak tüketimi nedeniyle oluşur. Peki, bu hatayı nasıl aşabilirsiniz?
Lambda Timeout Hatası ile Karşılaştığınızda Ne Yapmalısınız?
# 1. Lambda Timeout Süresini Artırmak
Lambda'nın varsayılan zaman aşımı süresi genellikle 3 saniye ile sınırlıdır. Eğer işlem sürenizin daha uzun olması gerektiğini biliyorsanız, bu süreyi artırmalısınız. Bunu yapmak için AWS Management Console üzerinden kolayca zaman aşımı süresini değiştirebilirsiniz.
const lambda = new AWS.Lambda();
const params = {
FunctionName: 'your-function-name',
Timeout: 10 // Bu değer saniye cinsindendir.
};
Bu işlem, Lambda fonksiyonunuzun daha fazla süreye sahip olmasını sağlar, ancak sadece bir çözüm değildir. Eğer fonksiyonunuzu optimize edebiliyorsanız, bu genellikle daha iyi bir seçenek olacaktır.
# 2. Lambda Fonksiyonunu Optimize Etmek
Zaman aşımını artırmak genellikle kısa vadeli bir çözüm olsa da, daha uzun vadeli bir çözüm bulmak isterseniz Lambda fonksiyonunuzu optimize etmeyi düşünebilirsiniz. Örneğin, gereksiz işlemleri kaldırabilir, API çağrılarını daha verimli hale getirebilir veya veritabanı sorgularını optimize edebilirsiniz.
- Veritabanı sorgularını daha hızlı hale getirmek: Gereksiz JOIN'ler, alt sorgular ya da kötü yazılmış sorgular, Lambda fonksiyonunun süresini uzatabilir.
- Üçüncü taraf API’ları daha verimli kullanmak: Üçüncü taraf API'larıyla entegrasyon yaparken zaman aşımı sürelerini kontrol etmek, gereksiz sorgulardan kaçınmak, API'ları asenkron hale getirmek Lambda'nın başarısını artırır.
- Bellek ayarlarını optimize etmek: Lambda fonksiyonunun kullandığı bellek miktarı doğrudan işlem süresiyle ilişkilidir. Belleği artırmak, işlem hızını da artırabilir.
# 3. Asenkron Çalışma Yöntemleri Kullanmak
Lambda fonksiyonları asenkron çalışabilen yapılardır. Yani fonksiyonlar, bazı görevleri paralel olarak işleyebilir. Eğer uzun süren görevleriniz varsa, bu görevleri bölerek asenkron şekilde çalıştırmayı düşünebilirsiniz.
const params = {
FunctionName: 'your-function-name',
InvocationType: 'Event', // Asenkron çağrı
};
lambda.invoke(params, function(error, data) {
if (error) {
console.log(error);
} else {
console.log('Function invoked asynchronously');
}
});
Asenkron çalışarak, Lambda fonksiyonunun süre sınırlamaları içinde kalabilir ve zaman aşımı hatasından kaçınabilirsiniz.