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 の Premium プランを検討してください。 ✔ 関数を継続的に、またはほぼ継続的に実行したい。 ✔ 小規模な実行の回数が多く、実行料金が高いが、従量課金プランでの 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 の機能です。 ASE は、以下を必要とするアプリケーション ワークロードに最適です。 ✔ 高スケール。 ✔ コンピューティングの完全分離とセキュリティで保護されたネットワーク アクセス。 ✔ メモリ使用量が多い。 |
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 のパフォーマンスと信頼性を向上させる」を参照してください。
次の表は、特定のプランの既定値と最大値 (分) を示しています。
プラン | 既定 | 最大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 プランが 常時接続 に設定されている必要があります。 標準料金でのお支払い。
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 アプリが含まれていた既存のリソース グループに関数アプリを作成している。
- 新しい関数アプリを以前のアプリと同じリージョンに作成している。
- 以前のアプリが何らかの原因で新しいアプリと互換性がない。 これは、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 は、通常のアプリと同じように、クラスターのアプリケーションのワークロードとして実行されます。 |