Azure Functions のスケールとホスティングAzure Functions scale and hosting

Azure Functions は、従量課金プランと Azure App Service プランという 2 つの異なるモードで実行できます。You can run Azure Functions in two different modes: Consumption plan and Azure App Service plan. 従量課金プランでは、コードの実行時にコンピューティング能力を自動的に割り当て、負荷の処理の必要性に応じてスケールアウトし、コードを実行していないときはスケールダウンします。The Consumption plan automatically allocates compute power when your code is running, scales out as necessary to handle load, and then scales down when code is not running. アイドル状態の VM に対して課金されることはなく、事前に容量を予約する必要もありません。You don't have to pay for idle VMs and don't have to reserve capacity in advance. この記事では、従量課金プランであるサーバーレス アプリ モデルを中心に説明します。This article focuses on the Consumption plan, a serverless app model. App Service プランの仕組みの詳細については、「Azure App Service プランの詳細な概要」を参照してください。For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

注意

Linux ホスティングは現在、App Service プランでのみ利用可能です。Linux hosting is currently only available on an App Service plan.

Azure Functions に慣れていない場合は、「Azure Functions の概要」を参照してください。If you aren't familiar with Azure Functions, see the Azure Functions overview.

関数アプリを作成するときに、アプリに含まれる関数のホスティング プランを構成する必要があります。When you create a function app, you must configure a hosting plan for functions that the app contains. どちらのモードでも、関数は "Azure Functions ホスト" のインスタンスにより実行されます。In either mode, an instance of the Azure Functions host executes the functions. プランの種類のコントロール対象は次のとおりです。The type of plan controls:

  • ホスト インスタンスをスケールアウトする方法。How host instances are scaled out.
  • 各ホストで使用できるリソース。The resources that are available to each host.

現在、ホスティング プランの種類は、関数アプリの作成中に選択する必要があり、Currently, you must choose the type of hosting plan during the creation of the function app. 後で変更することはできません。You can't change it afterward.

App Service プランの階層間で拡大縮小して、さまざまな量のリソースを割り当てることができます。On an App Service plan you can scale between tiers to allocate different amount of resources. 従量課金プランでは、すべてのリソース割り当てが Azure Functions によって自動的に処理されます。On the Consumption plan, Azure Functions automatically handles all resource allocation.

従量課金プランConsumption plan

従量課金プランを使用する場合、Azure Functions ホストのインスタンスは、受信イベントの数に基づいて動的に追加および削除されます。When you're using a Consumption plan, instances of the Azure Functions host are dynamically added and removed based on the number of incoming events. このプランではスケーリングが自動的に行われ、関数の実行中にのみコンピューティング リソースに対して料金が発生します。This plan scales automatically, and you are charged for compute resources only when your functions are running. 従量課金プランでは、関数を最大で 10 分間実行できます。On a Consumption plan, a function can run for a maximum of 10 minutes.

注意

従量課金プランの関数に対する既定のタイムアウトは 5 分です。The default timeout for functions on a Consumption plan is 5 minutes. Function App に対してこの値を 10 分まで増やすには、host.jsonfunctionTimeout プロパティを変更します。The value can be increased to 10 minutes for the Function App by changing the property functionTimeout in host.json.

課金は、実行数、実行時間、およびメモリの使用量に基づいて行われ、Billing is based on number of executions, execution time, and memory used. 関数アプリ内のすべての関数にわたって集計されます。Billing is aggregated across all functions within a function app. 詳細については、Azure Functions の価格に関するページを参照してください。For more information, see the [Azure Functions pricing page].

従量課金プランは既定のホスティング プランであり、次の利点があります。The Consumption plan is the default hosting plan and offers the following benefits:

  • 関数の実行中にのみ課金されます。Pay only when your functions are running.
  • 負荷が高い期間中であっても、自動的にスケールアウトされます。Scale out automatically, even during periods of high load.

App Service プランApp Service plan

App Service プランでは、Function App は Web Apps、API Apps、Mobile Apps と同様に、Basic、Standard、Premium、および Isolated SKU の専用 VM 上で実行されます。In the App Service plan, your function apps run on dedicated VMs on Basic, Standard, Premium, and Isolated SKUs, similar to Web Apps, API Apps, and Mobile Apps. 専用 VM が App Service アプリに割り当てられるので、Functions ホストは継続的に実行されます。Dedicated VMs are allocated to your App Service apps, which means the functions host is always running. App Service プランでは、Linux をサポートしています。App Service plans support Linux.

次のような場合に App Service プランを検討してください。Consider an App Service plan in the following cases:

  • 既に他の App Service インスタンスを実行している、使用率の低い既存の VM がある。You have existing, underutilized VMs that are already running other App Service instances.
  • Function App を継続的に、またはほぼ継続的に実行したい。You expect your function apps to run continuously, or nearly continuously. この場合、App Service プランは、さらにコスト効率性に優れています。In this case, an App Service Plan can be more cost-effective.
  • 従量課金プランで提供されるよりも多くの CPU またはメモリのオプションが必要である。You need more CPU or memory options than what is provided on the Consumption plan.
  • 従量課金プランで許可されている最大実行時間 (10 分) よりも長く実行する必要がある。You need to run longer than the maximum execution time allowed on the Consumption plan (of 10 minutes).
  • App Service 環境、VNET/VPN 接続、大規模な VM のサポートなど、App Service プランでのみ使用できる機能が必要である。You require features that are only available on an App Service plan, such as support for App Service Environment, VNET/VPN connectivity, and larger VM sizes.
  • Linux 上で Function App を実行するか、または関数を実行するために Linux 上にカスタム イメージを提供したい。You want to run your function app on Linux, or you want to provide a custom image on which to run your functions.

VM を使用すると、コストが実行数、実行時間、メモリの使用量から切り離されます。A VM decouples cost from number of executions, execution time, and memory used. このため、割り当てた VM インスタンスのコストを超えて課金されることはありません。As a result, you won't pay more than the cost of the VM instance that you allocate. App Service プランの仕組みの詳細については、「Azure App Service プランの詳細な概要」を参照してください。For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

App Service プランでは、VM インスタンスを追加して手動でスケールアウトするか、自動スケールを有効にすることができます。With an App Service plan, you can manually scale out by adding more VM instances, or you can enable autoscale. 詳細については、「手動または自動によるインスタンス数のスケール変更」を参照してください。For more information, see Scale instance count manually or automatically. 別の App Service プランを選択してスケールアップすることもできます。You can also scale up by choosing a different App Service plan. 詳細については、 Azure でのアプリのスケールアップ に関するページを参照してください。For more information, see Scale up an app in Azure.

App Service プランで JavaScript 関数を実行する予定がある場合は、CPUの少ないプランを選択してください。If you are planning to run JavaScript functions on an App Service plan, you should choose a plan that has fewer vCPUs. 詳細については、シングルコア App Service プランの選択に関するページをご覧ください。For more information, see the Choose single-core App Service plans.

Always On

App Service プランを実行する場合、関数アプリが正常に実行されるように、常時接続設定を有効にする必要があります。If you run on an App Service plan, you should enable the Always On setting so that your function app runs correctly. App Service プランでは、関数のランタイムは非アクティブな状態が数分続くとアイドル状態となるため、関数を "起こす" ことができるのは HTTP トリガーのみとなります。On an App Service plan, the functions runtime will go idle after a few minutes of inactivity, so only HTTP triggers will "wake up" your functions. これは、WebJobs で常時接続を有効にしておく必要がある理由と似ています。This is similar to how WebJobs must have Always On enabled.

常時接続は App Service プランでのみ使用可能です。Always On is available only on an App Service plan. 従量課金プランでは、関数アプリはプラットフォームにより自動的にアクティブ化されます。On a Consumption plan, the platform activates function apps automatically.

ストレージ アカウントの要件Storage account requirements

関数アプリを使用するには、従量課金プランと App Service プランのどちらでも、Azure BLOB、Queue、Files、Table Storage をサポートする一般的な Azure ストレージ アカウントが必要です。On either a Consumption plan or an App Service plan, a function app requires a general Azure Storage account that supports Azure Blob, Queue, Files, and Table storage. 内部的には、Azure Functions はトリガーの管理や関数実行のログなどの操作に Azure Storage を使用します。Internally, Azure Functions uses Azure Storage for operations such as managing triggers and logging function executions. BLOB 専用のストレージ アカウント (Premium Storage を含む)、ゾーン冗長ストレージ レプリケーションを使用する汎用ストレージ アカウントなど、一部のストレージ アカウントでは、キューとテーブルがサポートされません。Some storage accounts do not support queues and tables, such as blob-only storage accounts (including premium storage) and general-purpose storage accounts with zone-redundant storage replication. これらのアカウントは、関数アプリの作成時に [ストレージ アカウント] ブレードから除外されます。These accounts are filtered from the Storage Account blade when you're creating a function app.

ストレージ アカウントの種類の詳細については、Azure Storage サービスの概要に関する記事をご覧ください。To learn more about storage account types, see Introducing the Azure Storage services.

従量課金プランの仕組みHow the Consumption plan works

従量課金プランでは、関数がトリガーされるイベントの数に基づいて Functions ホストのインスタンスを追加することで、スケール コントローラーによって CPU とメモリのリソースが自動的に拡大縮小されます。In the Consumption plan, the scale controller automatically scales CPU and memory resources by adding additional instances of the Functions host, based on the number of events that its functions are triggered on. Functions ホストの各インスタンスのメモリは、1.5 GB に制限されています。Each instance of the Functions host is limited to 1.5 GB of memory. ホストのインスタンスは Function App です。つまり、関数アプリ内のすべての関数がインスタンス内のリソースを共有し、同時にスケールされます。An instance of the host is the Function App, meaning all functions within a funciton app share resources within an instance and scale at the same time.

従量課金ホスティング プランを使用する場合は、関数コード ファイルが、関数のメイン ストレージ アカウントの Azure Files 共有に保存されます。When you use the Consumption hosting plan, function code files are stored on Azure Files shares on the function's main storage account. 関数アプリのメイン ストレージ アカウントを削除すると、関数コード ファイルは削除され、復元できません。When you delete the main storage account of the function app, the function code files are deleted and cannot be recovered.

注意

従量課金プランで BLOB トリガーを使用しているときに関数アプリがアイドル状態になると、新しい BLOB の処理が最大で 10 分遅延する場合があります。When you're using a blob trigger on a Consumption plan, there can be up to a 10-minute delay in processing new blobs if a function app has gone idle. 関数アプリが実行されると、BLOB は直ちに処理されます。After the function app is running, blobs are processed immediately. この初期段階の遅延を避けるために、次のオプションのいずれかを検討してください。To avoid this initial delay, consider one of the following options:

実行時のスケーリングRuntime scaling

Azure Functions は "スケール コントローラー" と呼ばれるコンポーネントを使用して、イベント レートを監視し、スケールアウトとスケールインのどちらを実行するかを決定します。Azure Functions uses a component called the scale controller to monitor the rate of events and determine whether to scale out or scale in. スケール コントローラーは、トリガーの種類ごとにヒューリスティックを使用します。The scale controller uses heuristics for each trigger type. たとえば、Azure Queue Storage トリガーを使用した場合、拡大縮小はキューの長さや最も古いキュー メッセージの経過時間に基づいて実施されます。For example, when you're using an Azure Queue storage trigger, it scales based on the queue length and the age of the oldest queue message.

スケーリングは Function App 単位で行われます。The unit of scale is the function app. 関数アプリがスケールアウトするときは、Azure Functions ホストの複数のインスタンスを実行するための追加リソースが割り当てられます。When the function app is scaled out, additional resources are allocated to run multiple instances of the Azure Functions host. 反対に、コンピューティングの需要が減ると、スケール コントローラーにより、関数ホストのインスタンスが削除されます。Conversely, as compute demand is reduced, the scale controller removes function host instances. Function App 内で関数が何も実行されていない場合、インスタンスの数は最終的に 0 にスケールダウンされます。The number of instances is eventually scaled down to zero when no functions are running within a function app.

イベントを監視してインスタンスを作成しているスケール コントローラー

スケーリングの動作についてUnderstanding scaling behaviors

スケーリングはさまざまな要因によって異なる可能性があり、選択したトリガーと言語に基づいて異なる方法でスケールします。Scaling can vary on a number of factors, and scale differently based on the trigger and language selected. ただし、今日のシステムにはスケーリングのいくつかの側面があります。However there are a few aspects of scaling that exist in the system today:

  • 1 つの関数アプリは、最大 200 インスタンスにスケールできます。A single function app will only scale to a maximum of 200 instances. 1 つのインスタンスで一度に複数のメッセージや要求を処理できるので、同時実行の数に上限は設定されていません。A single instance may process more than one message or request at a time though, so there isn't a set limit on number of concurrent executions.
  • 新しいインスタンスは、10 秒ごとに最大 1 回しか割り当てられません。New instances will only be allocated at most once every 10 seconds.

次の記事に記載されているように、トリガーごとにスケーリングの上限が異なる場合もあります。Different triggers may also have different scaling limits as well as documented below:

スケーラブルなアプリのベスト プラクティスとパターンBest practices and patterns for scalable apps

関数アプリには、スケールに影響を及ぼすさまざまな側面 (ホスト構成、ランタイム フットプリント、リソースの効率など) があります。There are many aspects of a function app that will impact how well it will scale, including host configuration, runtime footprint, and resource effeciency. 詳細については、パフォーマンスの考慮事項に関する記事のスケーラビリティのセクションをご覧ください。View the scalability section of the performance considerations article for more information.

課金モデルBilling model

従量課金プランの課金の詳細については、Azure Functions の価格に関するページをご覧ください。Billing for the Consumption plan is described in detail on the [Azure Functions pricing page]. 使用量は Function App レベルで集計され、関数コードが実行されている期間のみカウントされます。Usage is aggregated at the function app level and counts only the time that function code is executed. 課金の単位は、次のとおりです。The following are units for billing:

  • ギガバイト/秒 (GB/秒) 単位でのリソース使用量Resource consumption in gigabyte-seconds (GB-s). メモリ サイズと、関数アプリ内の全関数の実行時間の組み合わせとして計算されます。Computed as a combination of memory size and execution time for all functions within a function app.
  • 実行回数Executions. イベント トリガーに応じて関数が実行されるたびにカウントされます。Counted each time a function is executed in response to an event trigger.