Azure Functions のホスティング オプションを比較する
Azure で Function App を作成するときは、アプリのホスティング プランを選択する必要があります。 Azure には、関数コードの次のホスティング オプションが用意されています。
| ホスティング オプション | サービス | 可用性 | コンテナー サポート |
|---|---|---|---|
| 消費プラン | Azure Functions | 一般提供 (GA) | なし |
| Flex 従量課金プラン | Azure Functions | GA | なし |
| プレミアムプラン | Azure Functions | GA | Linux |
| 専用プラン | Azure Functions | GA | Linux |
| コンテナー アプリ | Azure Container Apps | GA | Linux |
Azure App Service インフラストラクチャでは、Linux と Windows の両方の仮想マシンでの Azure Functions のホスティングが容易になります。 選択したホスティング オプションによって、次の動作が決まります。
- Function App をスケールする方法
- 各 Function App インスタンスに利用できるリソース。
- Azure Virtual Network 接続などの高度な機能のサポート。
- Linux コンテナーのサポート。
選択したプランは、関数コードの実行コストにも影響します。
プランの概要
次に、さまざまなホスティング オプションの利点をまとめます。
消費プラン
従量課金プランがデフォルトのホスティング プランです。 関数が自動スケールで実行されている (従量課金制) 場合にのみ、コンピューティング リソースに対して課金されます。 従量課金プランでは、Functions ホストのインスタンスは、受信イベントの数に基づいて動的に追加および削除されます。
Flex 従量課金プラン
コンピューティングの選択肢、仮想ネットワーク、従量課金制を使用して、高いスケーラビリティを実現します。 Flex 従量課金プランでは、Functions ホストのインスタンスは、構成されているインスタンスごとのコンカレンシーと受信イベントの数に基づいて動的に追加および削除されます。
プロビジョニング済み (常に準備完了) インスタンスの数を指定することで、コールド スタートを減らすことができます。 必要に応じて自動的にスケーリングします。
Premium プラン
需要に応じて自動的にスケーリングを行いながら、事前ウォーミングされたワーカーを使用して、アイドル状態になっても遅延なくアプリケーションを実行したり、より強力なインスタンスで実行したり、仮想ネットワークに接続したりすることができます。
次の状況では、Azure Functions の Premium プランを検討してください。
- あなたの関数アプリは継続的、またはほぼ継続的に実行されています。
- インスタンスの制御を強化し、イベント ドリブンのスケーリングを使用して複数の関数アプリを同じプランにデプロイする必要がある。
- 小規模な実行の回数が多く、実行料金が高いが、従量課金プランでの GB 秒数は少ない。
- 従量課金プランで提供されるよりも多くの CPU またはメモリのオプションが必要である。
- 従量課金プランで許可されている最大実行時間よりも長くコードを実行する必要がある。
- 仮想ネットワーク接続が必要である。
- 関数を実行するカスタム Linux イメージを提供したい。
専用プラン
App Service プラン内で、関数を通常の App Service プラン料金で実行します。 Durable Functions を使用できない場合、実行時間の長いシナリオに最適です。
次の状況では、App Service プランを検討してください。
- 完全に予測可能な課金が必要であるか、またはインスタンスを手動でスケーリングする必要がある。
- 同じプランで複数の Web アプリと関数アプリを実行したい
- より大きなコンピューティング サイズの選択肢にアクセスする必要がある。
- App Service Environment (ASE) によって提供されるコンピューティングの完全分離とセキュリティで保護されたネットワーク アクセス。
- 高いメモリ使用率と高いスケール (ASE)。
Container Apps
Azure Container Apps によってホストされるフル マネージド環境で、コンテナー化された関数アプリを作成してデプロイします。
Azure Functions プログラミング モデルを使用して、イベントドリブン、サーバーレス、クラウド ネイティブ関数アプリを構築します。 他のマイクロサービス、API、Web サイト、ワークフローと共に、コンテナーでホストされるプログラムとして関数を実行します。
以下の状況では、Container Apps で関数をホストすることを検討してください。
- 基幹業務アプリをサポートするために、カスタム ライブラリを関数コードと一緒にパッケージ化したい。
- コード実行をオンプレミスまたはレガシ アプリから、コンテナーで実行されているクラウド ネイティブ マイクロサービスに移行する必要がある。
- Kubernetes クラスターと専用コンピューティングの管理のオーバーヘッドと複雑さを回避したい。
- あなたの関数には専用のCPU計算リソースが提供するハイエンドな処理能力が必要です。
関数アプリのタイムアウト時間
host.jsonプロジェクト ファイルの functionTimeout プロパティは、関数アプリの関数のタイムアウト期間を指定します。 このプロパティは、関数の実行に特に適用されます。 トリガーによって関数の実行が開始された後、関数はタイムアウト期間内に戻るか応答する必要があります。
次の表は、特定のプランの既定値と最大値 (分) を示しています。
| プラン | 既定値 | 最大1 |
|---|---|---|
| Flex 従量課金プラン | 30 | 無制限2 |
| プレミアムプラン | 304 | 無制限2 |
| 専用プラン | 304 | 無制限3 |
| コンテナー アプリ | 30 | 無制限5 |
| 従量課金プラン | 5 | 10 |
- 関数アプリのタイムアウト設定に関係なく、HTTP トリガー関数が要求に応答できる最大時間は 230 秒です。 これは、Azure Load Balancer の既定のアイドルタイムアウトが原因です。 処理時間が長い場合は、 Durable Functions の非同期パターン の使用を検討するか、実際の作業を延期してすぐに応答を返します。
- 実行タイムアウトの最長期間は適用されません。 ただし、関数の実行に与えられる猶予期間は、Flex Consumption プランと Premium プランのスケールイン中に 60 分、プラットフォームの更新中に 10 分の猶予期間が与えられます。
- App Service プランを Always On に設定する必要があります。 プラットフォームの更新中は 10 分の猶予期間が与えられます。
- Functions ホスト ランタイムのバージョン 1.x の既定のタイムアウトは "無制限" です。
- レプリカの最小数が 0 に設定されている場合、既定のタイムアウトは、アプリで使用される特定のトリガーによって異なります。