Azure Functions のホスティング オプション

Azure で関数アプリを作成するときは、アプリのホスティング プランを選択する必要があります。 Azure Functions で提供される Azure Functions の基本のホスティング プランは 3 つあります。従量課金プランPremium プラン専用 (App Service) プランです。 これらのホスティング プランは、Azure App Service インフラストラクチャによって支援され、Linux と Windows の両方の仮想マシンで一般提供 (GA) されます。

選択する Azure Functions のホスティング プランによって、次の動作が決まります。

  • Function App をスケールする方法
  • 各 Function App インスタンスに利用できるリソース。
  • Azure Virtual Network 接続などの高度な機能のサポート。

Azure Functions ホスティングに加えて、Kubernetes クラスターまたは Azure Container Apps にデプロイできるコンテナー内でコンテナー化された関数アプリをホストすることもできます。 Kubernetes クラスターで関数をホストする場合は、Azure Arc 対応 Kubernetes クラスターの使用を検討してください。 カスタム コンテナー アプリのデプロイについて詳しくは、Azure Functions の Azure Container Apps ホスティングに関するページを参照してください。

この記事では、コンテナーベースのホスティング オプションを含む、さまざまなホスティング プランの詳しい比較を示します。

注意

Azure Arc 対応 Kubernetes クラスターおよび Azure Container Apps での Azure Functions コンテナーのホスティングは、現在プレビュー段階です。

プランの概要

次に、Azure Functions の 3 つの主要なホスティング プランの利点をまとめます。

プラン メリット
従量課金プラン 自動的にスケールし、関数が実行されている際のコンピューティング リソースに対してのみ課金されます。

従量課金プランでは、Functions ホストのインスタンスは、受信イベントの数に基づいて動的に追加および削除されます。

✔ 既定のホスティング プランです。
✔ 関数の実行中にのみ課金されます。
✔ 負荷が高い期間中でも、自動的にスケーリングします。
Premium プラン 需要に応じて自動的にスケーリングを行いながら、事前ウォーミングされたワーカーを使用して、アイドル状態になっても遅延なくアプリケーションを実行したり、より強力なインスタンスで実行したり、仮想ネットワークに接続したりすることができます。

次の状況で、Azure Functions プレミアムプランを検討してください。

✔ 関数を継続的に、またはほぼ継続的に実行したい。
✔ 小規模な実行の回数が多く、実行料金が高いが、従量課金プランでの GB 秒は低い。
✔ 従量課金プランで提供されるよりも多くの CPU またはメモリのオプションが必要である。
✔ 従量課金プランで許可されている最大実行時間よりも長くコードを実行する必要がある。
✔ 仮想ネットワーク接続など、従量課金プランでは利用できない機能が必要である。
✔ 関数を実行するカスタム Linux イメージを提供したい。
専用プラン App Service プラン内で、Functions を通常の App Service プラン料金で実行します。

Durable Functions を使用できない場合、実行時間の長いシナリオに最適です。 次の状況では、App Service プランを検討してください。

✔ 既に他の App Service インスタンスを実行している、使用率の低い既存の VM がある。
✔ スケーリングとコストを予測できることが必要である。

この記事の比較表には、Functions アプリを実行するための最大の制御性と分離性を実現する、次のホスト オプションも含まれています。

ホスティング オプション 詳細
ASE App Service Environment (ASE) は、App Service アプリを大規模かつ安全に実行するために完全に分離された専用の環境を提供する、Azure App Service の機能です。

A Standard Edition は、次を必要とするアプリケーション ワークロードに適しています。

✔ 高スケール。
✔ コンピューティングの完全分離とセキュリティで保護されたネットワーク アクセス。
✔ メモリ使用量が多い。
Azure Container Apps Azure Container Apps は、サーバーレス プラットフォームでマイクロサービスとコンテナー化されたアプリケーションを実行できるフル マネージド環境です。 Azure Container Apps では、Kubernetes API での作業で必要となる複雑さが解消され、基になる Azure Kubernetes Service (AKS) の機能を使用して関数を実行できます。
Kubernetes
(ダイレクトまたは
Azure Arc)
Kubernetes は、Kubernetes プラットフォーム上で実行される完全に分離された専用の環境を提供します。

Kubernetes は、次を必要とするアプリケーション ワークロードに適しています。
✔ ハードウェア要件のカスタマイズ。
✔ 分離およびセキュリティで保護されたネットワーク アクセス。
✔ ハイブリッド環境またはマルチクラウド環境で実行可能。
✔ 既存の Kubernetes アプリケーションやサービスと並行して実行。

この記事の残りの表では、さまざまな機能と動作のプランを比較します。 動的ホスティング プラン (従量課金と Premium) のコスト比較については、Azure Functions の価格に関するページを参照してください。 さまざまな専用プラン オプションの価格については、App Service の価格に関するページを参照してください。

オペレーティング システム/ランタイム

次の表は、ホスティング プランでのオペレーティング システムと言語のサポートを示しています。

Linux1、2
コードのみ
Windows コードのみ Linux1、2、3
Docker コンテナー
従量課金プラン C#
JavaScript
Java
Python
PowerShell Core
TypeScript
C#
JavaScript
Java
PowerShell Core
TypeScript
サポートなし
Premium プラン C#
JavaScript
Java
Python
PowerShell Core
TypeScript
C#
JavaScript
Java
PowerShell Core
TypeScript
C#
JavaScript
Java
PowerShell Core
Python
TypeScript
専用プラン C#
JavaScript
Java
Python
TypeScript
C#
JavaScript
Java
PowerShell Core
TypeScript
C#
JavaScript
Java
PowerShell Core
Python
TypeScript
ASE C#
JavaScript
Java
Python
TypeScript
C#
JavaScript
Java
PowerShell Core
TypeScript
C#
JavaScript
Java
PowerShell Core
Python
TypeScript
Kubernetes (ダイレクト) 該当なし 該当なし C#
JavaScript
Java
PowerShell Core
Python
TypeScript
Azure Arc (プレビュー) C#
JavaScript
Java
Python
TypeScript
該当なし C#
JavaScript
Java
PowerShell Core
Python
TypeScript

1 Linux は、Python ランタイム スタックでサポートされている唯一のオペレーティング システムです。
2 現在、Linux での PowerShell のサポートはプレビュー段階です。
3 Linux は、Docker コンテナーでサポートされている唯一のオペレーティング システムです。

Function App タイムアウト期間

関数アプリ内の関数のタイムアウト期間は、host.json プロジェクト ファイルの functionTimeout プロパティによって定義されます。 このプロパティは、関数の実行に特に適用されます。 トリガーが関数の実行を開始した後、関数はタイムアウト期間内に戻るか応答する必要があります。 詳細については、「Azure Functions のパフォーマンスと信頼性を向上させる」を参照してください。

次の表は、特定のプランの既定値と最大値 (分) を示しています。

プラン Default 最大1
従量課金プラン 5 10
Premium プラン 302 無制限3
専用プラン 302 無制限3

1 関数アプリのタイムアウト設定に関係なく、HTTP トリガー関数で要求に応答するためにかかる最大時間は 230 秒です。 これは、Azure Load Balancer の既定のアイドル タイムアウトによるものです。 より長い処理時間では、Durable Functions async pattern の使用を検討するか、実際の作業を遅らせて、即座に応答を返します
2 Functions Runtime バージョン 1.x のタイムアウトの既定値は "無制限" です。
3 60 分まで保証されます。 OS とランタイムの修正プログラムの適用、脆弱性の修正プログラムの適用、スケールインの動作では、引き続き関数の実行を取り消すことができるため、確実に堅牢な関数を記述できます。

スケール

次の表は、さまざまなホスティング プランのスケーリングの様子を比較したものです。
最大インスタンスは、特に説明がない限り、関数アプリごと (従量課金) またはプランごと (Premium/専用) に示されています。

プラン スケール アウト 最大インスタンス数
従量課金プラン イベント ドリブン。 負荷が高い期間中であっても、自動的にスケールアウトされます。 Azure Functions インフラストラクチャでは、受信するトリガー イベントの数に基づいて Functions ホストのインスタンスを追加することで、CPU とメモリのリソースがスケーリングされます。 Windows: 200
Linux: 1001
Premium プラン イベント ドリブン。 負荷が高い期間中であっても、自動的にスケールアウトされます。 Azure Functions インフラストラクチャでは、関数がトリガーされるイベントの数に基づいて Functions ホストのインスタンスを追加することで、CPU とメモリのリソースがスケーリングされます。 Windows: 100
Linux: 20-1002
専用プラン3 手動/自動スケール 10-30
ASE3 手動/自動スケール 100
Kubernetes KEDA を使用した Kubernetes クラスターのイベント ドリブン自動スケーリング。 クラスターによって異なります

1 現在、従量課金プランの Linux アプリでは、スケールアウト中に 1 つのサブスクリプションで 1 時間あたり 500 インスタンスの制限があります。
2 一部のリージョンでは、Premium プランの Linux アプリを 100 インスタンスにスケーリングできます。 詳細については、Premium プランに関する記事を参照してください。
3 各種 App Service プラン オプションに固有の制限については、App Service プランの制限に関する記事を参照してください。

コールド スタートの動作

プラン 詳細
従量課金プラン アプリがアイドル状態になると 0 にスケーリングされます。つまり、一部の要求の起動時に追加の待機時間が発生する可能性があります。 従量課金プランには、既に関数ホストと言語プロセスが実行されている、事前ウォーミングされたプレースホルダー関数からのプルが含まれ、コールド スタート時間を短縮するためのいくつかの最適化があります。
Premium プラン コールド スタートを回避するためにインスタンスを常にウォーム状態に維持します。
専用プラン 専用プランで実行していると、Functions ホストを継続的に実行できます。つまり、コールド スタートは問題にならないということです。
ASE 専用プランで実行していると、Functions ホストを継続的に実行できます。つまり、コールド スタートは問題にならないということです。
Kubernetes KEDA の構成によっては、コールド スタートを回避するようにアプリを構成できます。 0 にスケーリングするように構成されている場合は、新しいイベントに対してコールド スタートが発生します。

サービスの制限

リソース 従量課金プラン Premium プラン 専用プラン ASE Kubernetes
既定のタイムアウトまでの時間 (分) 5 30 301 30 30
最大のタイムアウトまでの時間 (分) 10 無制限7 無制限2 無制限 無制限
最大送信接続数 (インスタンスあたり) アクティブ 600 (合計 1200) 無制限 無制限 無制限 無制限
最大要求サイズ (MB)3 100 100 100 100 クラスターに応じる
クエリ文字列の最大長3 4096 4096 4096 4096 クラスターに応じる
要求 URL の最大長3 8192 8192 8192 8192 クラスターに応じる
インスタンスあたりの ACU 100 210 ~ 840 100 ~ 840 210 から 2508 AKS の価格
最大メモリ (インスタンスあたりの GB) 1.5 3.5 ~ 14 1.75 ~ 14 3.5 から 14 すべてのノードをサポート
最大インスタンス数 (Windows/Linux) 200/100 100/20 SKU により異なる9 1009 クラスターに応じる
プランあたりの関数アプリ11 100 100 無制限4 無制限 無制限
App Service プラン リージョンあたり 100 リソース グループあたり 100 リソース グループあたり 100 - -
アプリあたりのデプロイ スロット10 2 3 1-209 20 該当なし
ストレージ5 5 GB 250 GB 50 ~ 1000 GB 1 TB (テラバイト) 該当なし
アプリケーションごとのカスタム ドメイン数 5006 500 500 500 該当なし
カスタム ドメインの SSL サポート 無制限の SNI SSL 接続が含まれる 無制限の SNI SSL 接続と 1 件の IP SSL 接続が含まれる 無制限の SNI SSL 接続と 1 件の IP SSL 接続が含まれる 無制限の SNI SSL 接続と 1 件の IP SSL 接続が含まれる 該当なし

1 既定では、App Service プランでの Functions 1.x ランタイムのタイムアウトは無制限です。
2 App Service プランが Always On に設定されている必要があります。 標準料金でのお支払い。
3 これらの制限はホストで設定されます。
4 実際にホストできる関数アプリの数は、アプリのアクティビティ、マシン インスタンスのサイズ、対応するリソース使用量によって異なります。
5 ストレージの上限は、同じ App Service プランのすべてのアプリにまたがる一時ストレージ内の合計コンテンツ サイズです。 従量課金プランでは、Azure Files を一時ストレージに使用します。
6 関数アプリが従量課金プランでホストされている場合、CNAME オプションのみがサポートされます。 Premium プランまたは App Service プランの関数アプリでは、CNAME または A レコードを使用してカスタム ドメインをマップできます。
7 最大60 分間保証されます。
8 ワーカーは、お客様のアプリをホストする役割です。 ワーカーは、3 つの固定サイズで使用できます。1 vCPU/3.5 GB RAM。2 vCPU/7 GB RAM。4 vCPU/14 GB RAM。
9 詳細については、「App Service の制限」を参照してください。
10 運用スロットを含む。
11 現在、特定のサブスクリプションには 5,000 個という関数アプリの制限があります。

既存のリソース グループに新しい関数アプリを作成するための制限事項

場合によっては、既存のリソース グループで関数アプリの新しいホスティング プランを作成しようとすると、次のいずれかのエラーが発生することがあります。

  • 価格レベルがこのリソース グループで許可されていない
  • <SKU_name> ワーカー はリソース グループ <resource_group_name> で使用できない

これは次の条件が当てはまる場合に発生する可能性があります。

  • 今までに別の関数アプリまたは Web アプリが含まれていた既存のリソース グループに関数アプリを作成している。 たとえば、Linux Consumption アプリは、Linux Dedicated プランまたは Linux プレミアム プランと同じリソース グループではサポートされていません。
  • 新しい関数アプリを以前のアプリと同じリージョンに作成している。
  • 以前のアプリが何らかの原因で新しいアプリと互換性がない。 これは、SKU、オペレーティング システム間、または可用性ゾーンのサポートなど、他のプラットフォームレベルの機能が原因で発生する可能性があります。

これは、関数アプリと Web アプリのプランが、作成時に異なるリソース プールにマッピングされることに起因しています。 SKU が異なると、異なるインフラストラクチャ機能のセットが必要になります。 リソース グループにアプリを作成すると、そのリソース グループは特定のリソース プールにマッピングおよび割り当てされます。 そのリソース グループに別のプランを作成しようとすると、マッピングされたプールに必要なリソースがないというエラーが発生します。

このエラーが発生した場合は、代わりに関数アプリとホスティング プランを新しいリソース グループに作成します。

ネットワーク機能

特徴量 従量課金プラン Premium プラン 専用プラン ASE
受信 IP の制限 ✅はい ✅はい ✅はい ✅はい
受信プライベート エンドポイント ❌なし ✅はい ✅はい ✅はい
仮想ネットワークの統合 ❌なし ✅あり (リージョン) ✅はい (リージョンとゲートウェイ) ✅はい
仮想ネットワーク トリガー (非 HTTP) ❌なし ✅はい ✅はい ✅はい
ハイブリッド接続 (Windows のみ) ❌なし ✅はい ✅はい ✅はい
送信 IP の制限 ❌なし ✅はい ✅はい ✅はい

課金

プラン 詳細
従量課金プラン 関数が実行された時間に対してだけ支払います。 課金は、実行数、実行時間、およびメモリの使用量に基づいて行われ、
Premium プラン Premium プランは、必要なインスタンスや事前ウォーミングされたインスタンスで使用されたコア秒数とメモリに基づいています。 プランごとに少なくとも 1 つのインスタンスが常にウォーム状態である必要があります。 このプランでは、最も予測可能な価格が提供されます。
専用プラン App Service プランの Function App に対する支払いは、Web アプリなどの他の App Service リソースの場合と同じです。
App Service Environment (ASE) インフラストラクチャの支払いを行うための ASE には一定の月額料金があり、ASE のサイズが変化しても料金は変わりません。 App Service プランの vCPU あたりのコストもあります。 ASE でホストされているすべてのアプリは、分離された価格 SKU に含まれます。
Kubernetes お支払いは Kubernetes クラスターのコストだけです。Functionsに対する追加の課金はありません。 Function App は、通常のアプリと同じように、クラスターのアプリケーションのワークロードとして実行されます。

次のステップ