Azure İşlevleri'da Node.js uygulamalarıyla ilgili sorunları giderme

Important

Bu makalenin içeriği, sayfanın üst kısmındaki seçicideki Node.js programlama modeli seçiminize göre değişir. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. Geçiş kılavuzunda v3 ve v4 arasındaki farklar hakkında daha fazla bilgi edinin.

Bu makalede, Node.js işlev uygulamalarında yaygın senaryolarda sorun gidermeye yönelik bir kılavuz sağlanır.

Azure portalındakiSorunları tanılama ve çözme sekmesi, uygulamanızla ilgili olası sorunları izlemek ve tanılamak için kullanışlı bir kaynaktır. Ayrıca tanıya dayalı olarak sorunlarınıza olası çözümler sunar. Daha fazla bilgi için bkz. Azure İşlev uygulaması tanılama.

Bir diğer yararlı kaynak da, özel KQL sorguları çalıştırabilmeniz için Application Insights örneğiniz için Azure portalındakiGünlükler sekmesidir. Aşağıdaki örnek sorgu, geçen gün uygulamanız için hataları ve uyarıları nasıl görüntüleyebileceğinizi gösterir:

let myAppName = "<your app name>";
let startTime = ago(1d);
let endTime = now();
union traces,requests,exceptions
| where cloud_RoleName =~ myAppName
| where timestamp between (startTime .. endTime)
| where severityLevel > 2

Bu kaynaklar sorununuzu çözmediyse, aşağıdaki bölümlerde belirli uygulama sorunları için öneriler sağlanır:

İşlev bulunamadı

Günlüklerinizde aşağıdaki hatalardan herhangi birini görürseniz:

HTTP tetikleyicisi bulunamadı.

İş işlevi bulunamadı. İş sınıflarınızı ve yöntemlerinizi genel yapmayı deneyin. Bağlama uzantıları (ör. Azure Depolama, ServiceBus, Timers vb.) kullanıyorsanız, başlangıç kodunuzda uzantı(lar) için kayıt yöntemini çağırdığınızdan emin olun (ör. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() vb.).

Aşağıdaki düzeltmeleri deneyin:

  • Yerel olarak çalışırken Azure İşlevleri Core Tools v4.0.5382 veya üzerini kullandığınızdan emin olun.
  • Azure çalışırken:
    • Azure İşlevleri Runtime Sürüm 4.25 veya üzerini kullandığınızdan emin olun.

    • Node.js v18 veya üzerini kullandığınızdan emin olun.

    • Uygulama ayarını FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR olarak trueayarlayın. Bu ayar tüm model v4 uygulamaları için önerilir ve tüm giriş noktası hatalarının uygulama içgörüleri günlüklerinizde görünür olmasını sağlar. Daha fazla bilgi için Azure İşlevleri için uygulama ayarları referansı kısmına bakın.

    • Giriş noktası hataları için işlev uygulamanızın günlüklerini kontrol edin. Aşağıdaki örnek sorgu, geçen gün uygulamanız için giriş noktası hatalarını nasıl görüntüleyebileceğinizi gösterir:

      let myAppName = "<your app name>";
      let startTime = ago(1d);
      let endTime = now();
      union traces,requests,exceptions
      | where cloud_RoleName =~ myAppName
      | where timestamp between (startTime .. endTime)
      | where severityLevel > 2
      | where message has "entry point"
      
  • Uygulamanızın, kök dizinde bir host.json ve her işlev için içinde bir function.json dosyası bulunan bir klasör içeren gerekli klasör yapısına sahip olduğundan emin olun.

Undici isteği bir oluşturucu değil

İşlev uygulaması günlüklerinizde aşağıdaki hatayı alırsanız:

System.Private.CoreLib: İşlev yürütülürken özel durum oluştu: Functions.httpTrigger1. System.Private.CoreLib: Sonuç: Başarısız Özel Durum: undici_1.Request bir oluşturucu değil

Node.js sürüm 22.x veya üzerini kullandığınızdan emin olun.

Azure İşlevleri çalışma zamanı algılanamadı

İşlev uygulaması günlüklerinizde aşağıdaki hatayı alırsanız:

UYARI: Azure İşlevleri çalışma zamanı algılanamadı. "@azure/işlevler" paketini test moduna geçirme - tüm özellikler desteklenmez.

package.json dosyanızda applicationinsights başvurusu olup olmadığını denetleyin ve sürümün ^2.7.1 veya daha yüksek olduğundan emin olun. Sürümü güncelleştirdikten sonra komutunu çalıştırın npm install

HTTP akışları çalışmıyor

HTTP yayını çalışmıyorsa:

  • Paket sürümünün 4.3.0 veya daha yeni olduğunu doğrulayın @azure/functions .
  • Azure İşlevleri runtime sürümünün 4.28 veya daha yeni olduğundan emin olun.
  • app.setup({ enableHttpStream: true }) çağrıldığını kontrol et.
  • Doğrulama, FUNCTIONS_REQUEST_BODY_SIZE_LIMIT büyük veri için uygun şekilde ayarlanmıştır.

Kancalar çalıştırılmıyor

Hook’larınız çalışmıyorsa:

  • Programlama modeli v4’ü kullandığınızı doğrulayın.
  • Hook kayıt sözdizimi doğrula: app.hook.preInvocation() veya app.hook.appStart().
  • Fonksiyon tanımlarından önce kancaları kaydettiğinizi kontrol edin.
  • Hook'lar yalnızca belirli işlev türleri için çalışacaksa tetikleyici filtrelemesini inceleyin.

TypeScript derleme sorunları

TypeScript'e özgü sorunlar için:

Yapı hataları:

  • tsconfig.json öğesinin yapı çıktınızı işaret eden doğru outDir'e sahip olduğunu doğrulayın
  • scriptFile öğesinin v3 modelinde .js değil, derlenmiş .ts dosyalarına işaret ettiğinden emin olun
  • Tüm TypeScript bağımlılıklarının yüklü olduğundan emin olun: npm install --save-dev typescript @types/node

Tip hataları:

  • En son tür tanımları için paketi güncelleme @azure/functions
  • Doğru ithalat kullanın: import { app, HttpRequest, InvocationContext } from '@azure/functions'
  • Fonksiyon imzalarının beklenen türlerle eşleştiğini doğrulayın

Modül çözünürlük problemleri

Modül hataları bulunamıyor:

  • Tüm bağımlılıkların kurulduğundan emin olmak için çalıştırın npm install
  • Check node_modules klasörü dağıtım paketinde var
  • ES modülleri için, dosya adlarının .mjs uzantısını kullandığından veya package.json içinde "type": "module" bulunduğundan emin olun.
  • TypeScript derlemesinden sonra göreli import yollarının doğru olduğunu doğrulayın

Ortam ve yapılandırma sorunları

Eksik çevre değişkenleri:

  • Yerel gelişim için değişkenler ekleyin local.settings.json
  • Bulut dağıtımı için Azure portalında Uygulama Ayarlarını ayarlayın
  • Değerlere erişmek için process.env["VARIABLE_NAME"] kullanın

Kayıt problemleri:

  • İşleve özgü günlükler için context.log() yerine console.log() kullanın
  • Application Insights bağlantı dizesinin yapılandırıldığını denetleyin
  • Filtreleme için host.json içindeki log seviyelerini doğrulayın

Microsoft'dan yardım alma

Aşağıdaki yollardan biriyle Microsoft’tan daha fazla yardım alabilirsiniz:

  • Azure İşlevleri Node.js deposunda bilinen sorunları arayın. Sorununuzun belirtildiğini görmüyorsanız yeni bir sorun oluşturun ve neler olduğunu bize bildirin.
  • Bu kılavuzu kullanarak sorununuzu tanılayamıyorsanız, uygulamanızla ilgili sorunları tanılamaya yardımcı olmak için Microsoft destek mühendisleri kullanılabilir. Microsoft çeşitli destek planları sunar. Azure portalındaki işlev uygulamanızın Destek + sorun giderme bölümünde bir destek bileti oluşturun.

Sonraki Adımlar