Azure Functions Node.js アプリのトラブルシューティング

Important

ページの上部にあるセレクターで Node.js プログラミング モデルを選ぶと、この記事の内容は変わります。 v4 モデルは一般提供されており、JavaScript と TypeScript の開発者にとって、より柔軟で直感的なエクスペリエンスが得られるように設計されています。 v3 と v4 の違いの詳細については、移行ガイドを参照してください。

この記事では、Node.js 関数アプリの一般的なシナリオをトラブルシューティングするためのガイドを提供します。

Azure ポータルの [問題の診断と解決] タブは、アプリケーションに関連する可能性のある問題を監視および診断するのに役立つリソースです。 また、診断に基づいて問題に対する潜在的な解決策も提供します。 詳細については、「Azure Function app diagnostics」を参照してください。

もう 1 つの便利なリソースは、カスタム KQL クエリを実行できるように、Application Insights インスタンスのAzure ポータルの [ログ] タブです。 次のクエリ例は、過去 1 日のアプリのエラーと警告を表示する方法を示しています。

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

これらのリソースで問題が解決しなかった場合は、次のセクションで特定のアプリケーションの問題に関するアドバイスを提供します。

関数が見つかりません

ログに次のいずれかのエラーが表示される場合:

HTTP トリガーが見つかりません。

ジョブ関数が見つかりません。 ジョブクラスとメソッドを public に設定してみてください。 バインド拡張機能 (Azure Storage、ServiceBus、Timers など) を使用している場合は、スタートアップ コード (ビルダーなど) で拡張機能の登録メソッドを呼び出したことを確認してください。AddAzureStorage() ビルダー。AddServiceBus() ビルダー。AddTimers() など)。

次の修正を試してください。

  • ローカルで実行する場合は、Azure Functions Core Tools v4.0.5382 以降を使用していることを確認してください。
  • Azureで実行する場合:
    • ランタイム バージョン 4.25 以降Azure Functions使用していることを確認します。

    • Node.js v18 以降を使用していることを確認します。

    • アプリ設定の FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERRORtrueに設定します。 この設定は、すべてのモデル v4 アプリに対して推奨され、すべてのエントリ ポイント エラーがアプリケーション分析情報ログに確実に表示されます。 詳細については、「Azure Functions のアプリケーション設定のリファレンス」をご覧ください。

    • 関数アプリのログでエントリ ポイントのエラーを確認します。 次のクエリ例は、過去 1 日のアプリのエントリ ポイント エラーを表示する方法を示しています。

      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"
      
  • ルートに host.json と、function.jsonファイルを含む各関数のフォルダーを含む必要なフォルダー構造がアプリにあることを確認します。

Undici 要求はコンストラクターではありません

関数アプリのログに次のエラーが表示される場合:

System.Private.CoreLib: 関数の実行中の例外: Functions.httpTrigger1。 System.Private.CoreLib: 結果: エラー例外: undici_1.Request はコンストラクターではありません

バージョン 22.x 以降 Node.js 使用していることを確認します。

Azure Functions ランタイムを検出できませんでした

関数アプリのログに次のエラーが表示される場合:

警告: Azure Functions ランタイムを検出できませんでした。 "@azure/functions" パッケージをテスト モードに切り替える - すべての機能がサポートされているわけではありません。

package.json ファイルでapplicationinsightsへの参照を確認し、バージョンが^2.7.1以上であることを確認します。 バージョンを更新した後、次を実行します。 npm install

HTTPストリームが動作しない

HTTPストリーミングが動作しない場合は:

  • パッケージ @azure/functions バージョンが4.3.0以降であることを確認してください。
  • Azure Functions のランタイム バージョンが 4.28 以降であることを確認してください。
  • app.setup({ enableHttpStream: true })が呼ばれているか確認してください。
  • Verify FUNCTIONS_REQUEST_BODY_SIZE_LIMIT が大規模データに適切に設定されています。

フックが実行されない

フックが動いていない場合:

  • プログラミングモデルv4を使っているか確認してください。
  • フック登録の構文を確認してください: app.hook.preInvocation() または app.hook.appStart()
  • 関数定義の前にフックを登録しているか確認してください。
  • トリガーフィルタリングの見直し、フックは特定の関数タイプだけに動作すべきかどうか確認してください。

TypeScriptコンパイルの問題

TypeScript特有の問題について:

ビルド失敗:

  • tsconfig.jsonが自分のビルド出力を正しくoutDir指しているか確認してください
  • v3モデルのscriptFile.jsではなく、コンパイル済みの.tsファイルを参照していることを確認してください。
  • すべてのTypeScript依存関係がインストールされているか確認してください: npm install --save-dev typescript @types/node

タイプエラー:

  • 最新の型定義に対応するため、@azure/functions パッケージを更新します
  • 適切なインポートを使う: import { app, HttpRequest, InvocationContext } from '@azure/functions'
  • 関数シグネチャが期待される型と一致するかどうか確認する

モジュール解決の問題

モジュールエラーが見つからない:

  • すべての依存関係がインストールされていることを確認するために npm install を実行してください
  • デプロイメントパッケージにフォルダ node_modules 存在しているか確認してください
  • ES モジュールの場合、ファイル名で .mjs 拡張子を使用するか、package.json"type": "module" があることを確認してください。
  • TypeScriptコンパイル後に相位インポートパスが正しいか確認してください

環境および構成の問題

環境変数が欠けている点:

  • ローカル開発のために変数を追加してlocal.settings.json
  • Azure portal でクラウド デプロイ用のアプリケーション設定を設定する
  • process.env["VARIABLE_NAME"]を使って値にアクセスする

ログの問題:

  • 機能固有のログにはcontext.log()ではなくconsole.log()を使います
  • Application Insightsの接続文字列が設定されているか確認してください
  • フィルタリングのためにログレベルを host.json で確認してください

Microsoftからヘルプを取得する

次のいずれかの方法で、Microsoftからさらにヘルプを取得できます。

次のステップ