Function App の HTTP/2 設定の確認

HTTP/2 の必要性とクライアントの互換性を検討し、HTTPS による保護は別途確認してください。

説明

HTTP/2 は多重化など、Web リクエストの処理効率を高める機能を提供します。HTTP/2 が無効でも通信が暗号化されていないとは限らず、HTTP/1.1 も HTTPS で使用できます。サービスの要件とクライアントの対応状況に合わせて通信方式を選んでください。

想定される影響

  • HTTP/2 による転送効率の改善を利用できない場合があります。
  • 関数アプリのプロトコル設定が組織の運用基準と異なる場合があります。
  • 互換性を確認せずに変更すると、一部のクライアントの接続に影響するおそれがあります。

対処方法

HTTP/2 が必要な環境では site_config.http2_enabled = true を設定し、クライアントの対応状況と実際のプロトコルネゴシエーションを確認してください。HTTPS、最小 TLS バージョン、認証は別途構成してください。クライアント証明書を使う場合は、TLS 再ネゴシエーションが必要な設定との互換性も確認してください。

例

AzureRM 3.x の旧 Function App 設定の抜粋で、必須のストレージ構成は省略しています。例のランタイム設定は、現在のデプロイに使うバージョンを推奨するものではありません。

変更前

hcl
resource "azurerm_function_app" "example" {
  name                = "test-azure-functions"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  app_service_plan_id = azurerm_app_service_plan.example.id
}

変更後

hcl
resource "azurerm_function_app" "example" {
  name                = "test-azure-functions"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  app_service_plan_id = azurerm_app_service_plan.example.id

  site_config {
    dotnet_framework_version = "v4.0"
    scm_type                 = "LocalGit"
    http2_enabled            = true
  }
}

変更前は HTTP/2 を有効にしていません。変更後は http2_enabled = true を設定します。実際の HTTP/2 利用はクライアントとのネゴシエーションに依存し、この設定だけで HTTPS を必須にするわけではありません。

参考資料