はじめに

Azure Functionsを運用していると、突然関数リストが表示されなくなり、「We were not able to load some functions in the list due to errors」というエラーメッセージが表示されることがあります。

本記事では、Application InsightsでOpenTelemetry(OTEL)を使用している場合に発生する、OTEL_SERVICE_NAME環境変数が未定義であることが原因のエラーについて、その原因と対処方法をご紹介します。

エラーの症状

Azure PortalでFunctionsのページを開いたときに、以下のようなエラーメッセージが表示され、関数のリストが読み込めなくなります。

We were not able to load some functions in the list due to errors.
Refresh the page to try again.

Error while loading
Ask questions and use troubleshooting tools to investigate these errors.
Diagnose and solve problems

この状態では:

  • 関数の一覧が表示されない
  • 個別の関数の詳細も確認できない
  • コード上ではApplication Insightsへのデータ送信は正常に動作している

エラーの原因

このエラーは、Application InsightsでOpenTelemetry(OTEL)を使用している場合に、OTEL_SERVICE_NAME環境変数が設定されていないことが原因です。

Azure FunctionsでOpenTelemetryを使用してテレメトリデータを送信する際、サービス名を識別するためにOTEL_SERVICE_NAME環境変数が必要になります。
この環境変数が未定義の場合、Azure Portalの関数リスト表示機能が正常に動作せず、エラーが発生します。

なぜコードは動作するのか?

コード内でApplication Insightsへのデータ送信が正常に動作しているのは、テレメトリの送信自体にはOTEL_SERVICE_NAMEが必須ではないためです。
しかし、Azure Portal側の管理機能では、この環境変数の存在を前提としているため、未定義の場合にエラーが発生します。


対処方法

手順1: Azure Portalから環境変数を設定

  1. Azure Portalで対象のFunctionアプリを開く

  2. 左メニューから「構成」(Configuration)を選択

  3. 「アプリケーション設定」タブで「新しいアプリケーション設定」をクリック

  4. 以下の設定を追加:

    • 名前: OTEL_SERVICE_NAME
    • : Functionsアプリの名前(例: my-function-app)またはサービスを識別できる任意の名前
  5. 「保存」をクリックして設定を適用

手順2: Functionsアプリの再起動

環境変数の設定後、Functionsアプリを再起動します:

  1. 「概要」ページに戻る
  2. 「再起動」ボタンをクリック

手順3: 動作確認

再起動後、Functionsのページを再読み込みして、関数リストが正常に表示されることを確認します。


ベストプラクティス

サービス名の命名規則

OTEL_SERVICE_NAMEには、以下のような命名規則を推奨します:

  • アプリケーション名をベースにする: 例 order-processing-function
  • 環境を含める: 例 order-processing-function-prod, order-processing-function-dev
  • チーム名やプロジェクト名を含める: 例 teamA-order-processing-function

Infrastructure as Codeでの管理

Bicep、ARM Template、Terraformなどを使用している場合は、環境変数を定義に含めておくことで、今後のデプロイ時に自動的に設定されます。

Bicepの例:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    siteConfig: {
      appSettings: [
        {
          name: 'OTEL_SERVICE_NAME'
          value: functionAppName
        }
        // 他の設定...
      ]
    }
  }
}

おわりに

本記事では、Azure FunctionsでOpenTelemetryを使用している際に、OTEL_SERVICE_NAME環境変数が未定義であることが原因で関数リストが表示されないエラーについて説明しました。

この環境変数を設定するだけで問題は解決しますが、Infrastructure as Codeを使用している場合は、デプロイ定義に含めておくことで、同じ問題の再発を防ぐことができます。