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

Azure で Function App を作成するときは、アプリのホスティング プランを選択する必要があります。 Azure Functions で利用できる基本のホスティング プランは 3 つあります。従量課金プランPremium プラン専用 (App Service) プランです。 すべてのホスティング プランは、Linux と Windows 仮想マシンの両方で、一般提供 (GA) されています。

お客様が選択したホスティング プランによって、次の動作が決まります。

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

この記事では、さまざまなホスティング プランの詳しい比較を、Kubernetes ベースのホスティングと共に示します。

注意

Kubernetes クラスターで関数をホストする場合は、Azure Arc 対応 Kubernetes クラスターの使用を検討してください。 現在、Azure Arc 対応 Kubernetes クラスターでのホスティングはプレビュー段階です。 詳細は、「Azure Arc の App Service、Functions、および Logic Apps」をご覧ください。

プランの概要

次に、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 は、以下を必要とするアプリケーション ワークロードに最適です。

✔ 高スケール。
✔ コンピューティングの完全分離とセキュリティで保護されたネットワーク アクセス。
✔ メモリ使用量が多い。
Kubernetes
(ダイレクトまたは
Azure Arc)
Kubernetes は、Kubernetes プラットフォーム上で実行される完全に分離された専用の環境を提供します。

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

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

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

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

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

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

Function App タイムアウト期間

関数アプリのタイムアウト期間は、host.json プロジェクト ファイルの functionTimeout プロパティによって定義されます。 次の表は、両方のプランと各種ランタイム バージョンでの既定と最大値 (分単位) を示します。

計画 ランタイム バージョン Default 最大値
従量課金 1.x 5 10
従量課金 2.x 5 10
従量課金 3.x 5 10
Premium 1.x 無制限 無制限
Premium 2.x 30 無制限
Premium 3.x 30 無制限
App Service 1.x 無制限 無制限
App Service 2.x 30 無制限
App Service 3.x 30 無制限

注意

関数アプリのタイムアウト設定に関係なく 230 秒は、HTTP トリガー関数が要求に応答できる最大時間です。 これは、Azure Load Balancer の既定のアイドル タイムアウトによるものです。 より長い処理時間では、Durable Functions async pattern の使用を検討するか、実際の作業を遅らせて、即座に応答を返します

スケール

次の表は、さまざまなホスティング プランのスケーリングの様子を比較したものです。

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

1 各種 App Service プラン オプションに固有の制限については、App Service プランの制限に関する記事を参照してください。

コールド スタートの動作

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

サービスの制限

リソース 従量課金プラン Premium プラン 専用プラン ASE Kubernetes
既定のタイムアウトまでの時間 (分) 5 30 301 30 30
最大のタイムアウトまでの時間 (分) 10 無制限7 無制限2 unbounded unbounded
最大送信接続数 (インスタンスあたり) アクティブ 600 (合計 1200) unbounded unbounded unbounded unbounded
最大要求サイズ (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 すべてのノードがサポートされています
最大インスタンス数 200 1009 SKU により異なる10 10010 クラスターに応じる
プランあたりの関数アプリ 100 100 無制限4 unbounded unbounded
App Service プラン リージョンあたり 100 リソース グループあたり 100 リソース グループあたり 100 - -
ストレージ5 5 TB 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 Premium プランの Linux で実行する場合、インスタンス数の上限は現在 20 個です。
10 詳細については、「App Service の制限」を参照してください。

ネットワーク機能

特徴量 従量課金プラン Premium プラン 専用プラン ASE Kubernetes
受信 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 クラスターのコストだけです。関数に対する追加の課金はありません。 Function App は、通常のアプリと同じように、クラスターのアプリケーションのワークロードとして実行されます。

次のステップ