次の方法で共有


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

Azure で関数アプリを作成するときは、アプリのホスティング オプションを選択する必要があります。 Azure には、関数コードの次のホスティング オプションが用意されています。

ホスティング オプション サービス 可用性 コンテナー サポート
従量課金プラン Azure Functions 一般提供 (GA) なし
Flex 従量課金プラン Azure Functions プレビュー なし
Premium プラン Azure Functions GA Linux
専用プラン Azure Functions GA Linux
コンテナー アプリ Azure Container Apps GA Linux

Azure Functions のホスティング オプションは、Linux と Windows の両方の仮想マシン上の Azure App Service インフラストラクチャによって支援されています。 選択したホスティング オプションによって、次の動作が決まります。

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

選択したプランは、関数コードの実行コストにも影響します。 詳細については、「課金」を参照してください。

この記事では、さまざまなホスティング オプションを詳しく比較します。 Linux コンテナーでの関数コードの実行と管理の詳細については、Azure Functions での Linux コンテナーのサポートに関するページを参照してください。

プランの概要

以下に、Azure Functions ホスティングのさまざまなオプションの利点をまとめます。

オプション メリット
従量課金プラン 関数が自動スケールで実行されている (従量課金制) 場合にのみ、コンピューティング リソースに対して課金されます。

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

✔ 本当の意味で "サーバーレス" ホスティングを提供する既定のホスティング プラン。
✔ 関数の実行中にのみ課金されます。
✔ 負荷が高い期間中でも、自動的にスケーリングします。
Flex 従量課金プラン コンピューティングの選択肢、仮想ネットワーク、従量課金制を使用して、高いスケーラビリティを実現します。

Flex 従量課金プランでは、Functions ホストのインスタンスは、構成されているインスタンスごとのコンカレンシーと受信イベントの数に基づいて動的に追加および削除されます。

✔ 事前にプロビジョニングされた (常時使用可能な) インスタンスの数を指定して、コールド スタートを減らす。
✔ セキュリティを強化するために仮想ネットワークがサポートされる。
✔ 関数の実行時に課金される。
✔ 負荷が高い期間中でも、自動的にスケーリングします。
Premium プラン 需要に応じて自動的にスケーリングを行いながら、事前ウォーミングされたワーカーを使用して、アイドル状態になっても遅延なくアプリケーションを実行したり、より強力なインスタンスで実行したり、仮想ネットワークに接続したりすることができます。

次のような状況では、Azure Functions の Premium プランを検討してください。

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

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

✔ 既に他の App Service インスタンスを実行している、使用率の低い既存の仮想マシンがある。
✔ 完全に予測可能な請求情報が必要であるか、インスタンスを手動でスケーリングする必要がある。
✔ 同じプランで複数の Web アプリと関数アプリを実行したい
✔ より大きなコンピューティング サイズの選択肢にアクセスする必要がある。
✔ App Service Environment (ASE) によって提供される完全なコンピューティング分離とセキュリティで保護されたネットワーク アクセス。
✔ メモリ使用量が非常に多く、高スケールである (ASE)。
コンテナー アプリ Azure Container Apps によってホストされるフル マネージド環境で、コンテナー化された関数アプリを作成してデプロイします。

Azure Functions プログラミング モデルを使用して、イベントドリブン、サーバーレス、クラウド ネイティブ関数アプリを構築します。 他のマイクロサービス、API、Web サイト、ワークフローと共に、コンテナーでホストされるプログラムとして関数を実行します。 以下の状況では、Container Apps で関数をホストすることを検討してください。

✔ 基幹業務アプリをサポートするために、カスタム ライブラリを関数コードと共にパッケージ化したい。
✔ コード実行をオンプレミスまたはレガシ アプリから、コンテナーで実行されているクラウド ネイティブ マイクロサービスに移行する必要がある。
✔ Kubernetes クラスターと専用コンピューティングの管理のオーバーヘッドと複雑さを回避したいとき。
✔ 関数に、専用 GPU コンピューティング リソースによって提供されるハイエンドの処理能力が必要である。

この記事の残りの表では、さまざまな機能と動作に基づいてホスティング オプションを比較します。

オペレーティング システムのサポート

次の表は、ホスティング オプションに対するオペレーティング システムのサポートを示しています。

ホスティング Linux1 デプロイ Windows2 デプロイ
従量課金プラン ✅ コードのみ
❌ コンテナー (サポートされていません)
✅ コードのみ
Flex 従量課金プラン ✅ コードのみ
❌ コンテナー (サポートされていません)
❌ サポート対象外
Premium プラン ✅ コードのみ
✅ コンテナー
✅ コードのみ
専用プラン ✅ コードのみ
✅ コンテナー
✅ コードのみ
コンテナー アプリ ✅ コンテナーのみ ❌ サポート対象外

1 Linux は、Python ランタイム スタックでサポートされている唯一のオペレーティング システムです。
2 Windows デプロイはコードのみです。 現在、Functions では Windows コンテナーはサポートされていません。

Function App タイムアウト期間

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

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

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

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

言語のサポート

Functions での現在のネイティブ言語スタックのサポートについて詳しくは、「Azure Functions でサポートされている言語」を参照してください。

スケール

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

プラン スケール アウト 最大インスタンス数
従量課金プラン イベント ドリブン。 負荷が高い期間中であっても、自動的にスケールアウトされます。 Functions インフラストラクチャでは、受信するトリガー イベントの数に基づいて、Functions ホストのインスタンスをさらに追加することで、CPU とメモリのリソースがスケーリングされます。 Windows: 200
Linux: 1001
Flex 従量課金プラン 関数ごとのスケーリング。 イベントドリブン スケーリングの決定は関数ごとに計算され、アプリ内の関数をより明確にスケーリングする方法が提供されます。 HTTP、Blob Storage (Event Grid)、Durable Functions を除き、アプリ内の他のすべての関数トリガーの種類では、独立したインスタンスでスケーリングされます。 アプリ内のすべての HTTP トリガーでは、すべての Blob Storage (Event Grid) トリガーの場合と同様に、同じインスタンス上のグループとしてまとめてスケーリングされます。 すべての Durable Functions トリガーでもインスタンスが共有され、まとめてスケーリングされます。 特定のリージョン全体のすべてのインスタンスの合計メモリ使用量によってのみ制限されます。 詳細については、「インスタンス メモリ」を参照してください。
Premium プラン イベント ドリブン。 負荷が高い期間中であっても、自動的にスケールアウトされます。 Azure Functions インフラストラクチャでは、関数がトリガーされるイベントの数に基づいて Functions ホストのインスタンスを追加することで、CPU とメモリのリソースがスケーリングされます。 Windows: 100
Linux: 20-1002
専用プラン3 手動/自動スケール 10-30
100 (ASE)

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

コールド スタートの動作

プラン 詳細
従量課金プラン アプリはアイドル時にゼロにスケーリングできます。つまり、一部の要求の起動時に待機時間が長くなる可能性があります。 従量課金プランには、コールド スタート時間を短縮するのに役立ついくつかの最適化があります。これには、既に関数ホストと言語プロセスが実行されている、事前ウォーミングされたプレースホルダー関数からのプルが含まれます。
Flex 従量課金プラン 新しいインスタンスをプロビジョニングするときの遅延を減らすために、常時使用可能なインスタンスをサポートします。
Premium プラン 1 つまたは複数の "常にウォーム状態" のインスタンスを維持できるようにすることで、コールド スタートを回避するために常時使用可能なインスタンスをサポートします。
専用プラン 専用プランで実行する場合、Functions ホストを所定の数のインスタンスで継続的に実行できます。つまり、コールド スタートは実際には問題になりません。

サービスの制限

リソース 従量課金プラン Flex 従量課金プラン12 Premium プラン 専用プラン/ASE
既定のタイムアウトまでの時間 (分) 5 30 30 301
最大のタイムアウトまでの時間 (分) 10 無制限15 無制限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
最大メモリ (インスタンスあたりの GB) 1.5 413 3.5 ~ 14 1.75-14/3.5-14
最大インスタンス数 (Windows/Linux) 200/100 1000 14 100/20 SKU により異なる/1009
プランあたりの関数アプリ11 100 100 100 無制限4
App Service プラン リージョンあたり 100 該当なし リソース グループあたり 100 リソース グループあたり 100
アプリあたりのデプロイ スロット10 2 該当なし 3 1-209
ストレージ5 5 GB 250 GB 250 GB 50 ~ 1000 GB
アプリケーションごとのカスタム ドメイン数 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 個という関数アプリの制限があります。
  12. Flex 従量課金プランは現在、プレビュー段階です。
  13. Flex 従量課金プランのインスタンス サイズは、現在、2,048 MB または 4,096 MB のどちらかとして定義されています。 詳細については、「インスタンス メモリ」を参照してください。
  14. プレビュー期間中の Flex 従量課金プランには、特定のリージョン全体のすべてのインスタンスの合計メモリ使用量を制限するリージョン サブスクリプション クォータがあります。 詳細については、「インスタンス メモリ」を参照してください。
  15. Flex 従量課金プランでは、ホストで実行時間制限が適用されません。 ただし、プラットフォームではスケールイン、デプロイ中、または更新プログラムを適用するためにインスタンスを終了する必要がある場合があるため、現在、保証されていません。

ネットワーク機能

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

課金

プラン 詳細
従量課金プラン 関数が実行された時間に対してだけ支払います。 課金は、実行数、実行時間、およびメモリの使用量に基づいて行われ、
Flex 従量課金プラン 請求は、実行回数、アクティブに関数を実行しているインスタンスのメモリ、および常時使用可能なインスタンスのコストに基づいています。 詳細については、Flex 従量課金プランの請求に関するページを参照してください。
Premium プラン Premium プランは、事前ウォーミングされた必要なインスタンスで使用されたコア秒数とメモリに基づいています。 プランごとに少なくとも 1 つのインスタンスが常にウォーム状態である必要があります。 このプランでは、最も予測可能な価格が提供されます。
専用プラン App Service プランの Function App に対する支払いは、Web アプリなどの他の App Service リソースの場合と同じです。

ASE の場合、インフラストラクチャに対して支払いを行い、環境のサイズによって変更されない一定の月額料金があります。 App Service プランの vCPU あたりのコストもあります。 ASE でホストされているすべてのアプリは、分離された価格 SKU に含まれます。 詳細については、ASE の概要に関する記事を参照してください。

動的ホスティング プラン (従量課金、Flex 従量課金、Premium) の直接のコスト比較については、Azure Functions の価格に関するページを参照してください。 さまざまな専用プラン オプションの価格については、App Service の価格に関するページを参照してください。 Container Apps ホスティングの価格については、「Azure Container Apps の価格」を参照してください。

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

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

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

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

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

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

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

次のステップ