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

Azure Functions は、2 つの異なるプランで実行できます。従量課金プランと Premium プラン (パブリック プレビュー) です。Azure Functions runs in two different plans: Consumption plan and Premium plan (public preview). 従量課金プランでは、コードの実行時にコンピューティング能力が自動的に追加されます。The Consumption plan automatically adds compute power when your code is running. アプリは、負荷を処理する必要があるときはスケールアウトされ、コードの実行が停止するとスケールダウンされます。Your app is scaled out when needed to handle load, and scaled down when code stops running. アイドル状態の VM に対して課金されることはなく、事前に容量を予約する必要もありません。You don't have to pay for idle VMs or reserve capacity in advance. Premium プランも自動的にスケーリングされ、コードの実行中はコンピューティング能力が追加されます。The Premium plan will also automatically scale and add additional compute power when your code is running. Premium プランには、Premium コンピューティング インスタンス、無期限にインスタンスをウォーム状態に保つ機能、VNet 接続などの追加機能が付属しています。The Premium plan comes with additional features like premium compute instances, the ability to keep instances warm indefinitely, and VNet connectivity. 既存の App Service プランをお持ちの場合は、そのプランで関数アプリを実行することもできます。If you have an existing App Service Plan, you can also run your function apps within them.

注意

Premium プランLinux 向けの従量課金プランはどちらも、現在プレビュー段階です。Both Premium plan and Consumption plan for Linux are currently in preview.

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

関数アプリを作成するときに、アプリ内の関数のホスティング プランを選択します。When you create a function app, you choose the hosting plan for functions in the app. どちらのプランでも、関数は "Azure Functions ホスト" のインスタンスにより実行されます。In either plan, 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.
  • VNet 接続などのインスタンス機能。Instance features like VNet connectivity.

注意

関数アプリ リソースのプラン プロパティを変更することにより、従量課金プランと Premium プランを切り替えることができます。You can switch between Consumption and Premium plans by changing the plan property of the function app resource.

従量課金プランConsumption plan

従量課金プランを使用する場合、Azure Functions ホストのインスタンスは、受信イベントの数に基づいて動的に追加および削除されます。When you're using the Consumption plan, instances of the Azure Functions host are dynamically added and removed based on the number of incoming events. このサーバーレス プランではスケーリングが自動的に行われ、関数の実行中にのみコンピューティング リソースに対して料金が発生します。This serverless plan scales automatically, and you're charged for compute resources only when your functions are running. 従量課金プランでは、構成可能な期間が経過すると関数の実行はタイムアウトします。On a Consumption plan, a function execution times out after a configurable period of time.

課金は、実行数、実行時間、およびメモリの使用量に基づいて行われ、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.

Premium プラン (パブリック プレビュー)Premium plan (public preview)

Premium プランを使用すると、従量課金プランと同じように、Azure Functions ホストのインスタンスが、受信イベントの数に基づいてすばやく追加および削除されます。When you're using the Premium plan, instances of the Azure Functions host are rapidly added and removed based on the number of incoming events just like the consumption plan. ただし、Premium プランでは次の機能も提供されます。However, the Premium plan also offers:

  • コールド スタートを回避するために常にウォーム状態のインスタンス。Always warm instances to avoid any cold start.
  • VNet の接続。VNet connectivity.
  • 無制限の実行期間。Unlimited execution duration.
  • Premium インスタンス サイズ (1 コア、2 コア、4 コアのインスタンス)。Premium instance sizes (one core, two core, and four core instances).
  • 予測可能な価格オプション。Predictable pricing options.
  • 複数の関数アプリを含むプランでの高密度アプリ割り当て。High-density app allocation for plans with multiple function apps.

これらのオプションの構成方法については、「Azure Functions premium plan (Azure Functions の Premium プラン)」をご覧ください。Information on how you can configure these options can be found in the Azure Functions premium plan.

実行とメモリの消費量に応じた課金の代わりに、必要なインスタンスと予約インスタンスで使用されたコア秒数および GB 秒数に基づいて課金されます。Instead of billing per execution and memory consumed, billing is based on the number of core seconds and GB seconds used across needed and reserved instances. 常に少なくとも 1 つのインスタンスがウォーム状態になっている必要があるので、(実行の数に関係なく) アクティブなプランごとに固定の月額料金があります。At least one instance is required to be warm at all times, so there is a fixed monthly cost per plan that is active (regardless of the number of executions).

次の場合には、Azure Functions の Premium プランを検討してください。Consider the Azure Functions premium plan in the following cases:

  • 関数を継続的に、またはほぼ継続的に実行したい。Your function apps 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.
  • 従量課金プランで許可されている最大実行時間よりも長くコードを実行する必要がある。Your code needs to run longer than the maximum execution time allowed on the Consumption plan.
  • 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.

注意

Premium プラン (プレビュー) では現在、Windows インフラストラクチャを介して、.NET、Node、または Java で実行する関数がサポートされています。The premium plan preview currently supports functions running in .NET, Node, or Java through Windows infrastructure.

Premium プランで JavaScript 関数を実行する場合は、vCPU の少ないインスタンスを選ぶ必要があります。When running JavaScript functions on a Premium plan, you should choose an instance that has fewer vCPUs. 詳しくは、シングルコア Premium プランの選択に関する記事をご覧ください。For more information, see the Choose single-core Premium plans.

App Service プランApp Service plan

関数アプリは、他の App Service アプリ (Basic、Standard、Premium、Isolated SKU) と同じ専用 VM 上でも実行できます。Your function apps can also run on the same dedicated VMs as other App Service apps (Basic, Standard, Premium, and Isolated SKUs). 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.
  • 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.

App Service プランの関数アプリに対する支払いは、Web アプリなどの他の App Service リソースの場合と同じです。You pay the same for function apps in an App Service Plan as you would for other App Service resources, like web apps. 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の少ないプランを選択してください。When running JavaScript functions on an App Service plan, you should choose a plan that has fewer vCPUs. 詳細については、シングルコア App Service プランの選択に関するページをご覧ください。For more information, see 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 goes idle after a few minutes of inactivity, so only HTTP triggers will "wake up" your functions. 常時接続は App Service プランでのみ使用可能です。Always on is available only on an App Service plan. 従量課金プランでは、関数アプリはプラットフォームにより自動的にアクティブ化されます。On a Consumption plan, the platform activates function apps automatically.

Function App タイムアウト期間Function app timeout duration

Function App のタイムアウト期間は、host.json プロジェクト ファイルの functionTimeout プロパティによって定義されます。The timeout duration of a function app is defined by the functionTimeout property in the host.json project file. 次の表は、両方のプランと両方のランタイム バージョンでの既定と最大値 (分単位) を示します。The following table shows the default and maximum values in minutes for both plans and in both runtime versions:

プランPlan ランタイム バージョンRuntime Version 既定値Default 最大値Maximum
消費Consumption 1.x1.x 55 1010
消費Consumption 2.x2.x 55 1010
App ServiceApp Service 1.x1.x 無制限Unlimited 無制限Unlimited
App ServiceApp Service 2.x2.x 3030 無制限Unlimited

注意

関数アプリのタイムアウト設定に関係なく 230 秒は、HTTP トリガー関数が要求に応答できる最大時間です。Regardless of the function app timeout setting, 230 seconds is the maximum amount of time that an HTTP triggered function can take to respond to a request. これは、Azure Load Balancer の既定のアイドル タイムアウトによるものですThis is because of the default idle timeout of Azure Load Balancer. より長い処理時間では、Durable Functions async pattern の使用を検討するか、実際の作業を遅らせて、即座に応答を返しますFor longer processing times, consider using the Durable Functions async pattern or defer the actual work and return an immediate response.

自分のホスティング プランWhat is my hosting plan

自分の関数アプリが使用するホスティング プランを確認するには、Azure Portal で関数アプリの [概要] タブの [App Service プラン / 価格レベル] を表示します。To determine the hosting plan used by your function app, see App Service plan / pricing tier in the Overview tab for the function app in the Azure portal. App Service プランについては価格レベルも示されます。For App Service plans, the pricing tier is also indicated.

ポータルでのスケーリング プランの表示

次のように、プランを判断するのに、Azure CLI を使用することもできます。You can also use the Azure CLI to determine the plan, as follows:

appServicePlanId=$(az functionapp show --name <my_function_app_name> --resource-group <my_resource_group> --query appServicePlanId --output tsv)
az appservice plan list --query "[?id=='$appServicePlanId'].sku.tier" --output tsv

このコマンドの出力が dynamic の場合、関数アプリは従量課金プランです。When the output from this command is dynamic, your function app is in the Consumption plan. このコマンドの出力が ElasticPremium の場合、関数アプリは Premium プランです。When the output from this command is ElasticPremium, your function app is in the Premium plan. その他すべての値は、App Service プランのレベルを意味します。All other values indicate tiers of an App Service plan.

常時接続が有効になっている場合でも、個々の関数の実行タイムアウトは host.json プロジェクト ファイルの functionTimeout 設定によって制御できます。Even with Always On enabled, the execution timeout for individual functions is controlled by the functionTimeout setting in the host.json project file.

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

どのプランでも、関数アプリを使用するには、Azure BLOB、Queue、Files、Table Storage をサポートする一般的な Azure ストレージ アカウントが必要です。On any plan, a function app requires a general Azure Storage account, which supports Azure Blob, Queue, Files, and Table storage. これは、Functions が、Azure Storage を利用してトリガーの管理や関数実行のログなどの操作を行っているためですが、ストレージ アカウントによってはキューとテーブルはサポートされません。This is because Functions rely on Azure Storage for operations such as managing triggers and logging function executions, but some storage accounts do not support queues and tables. そのようなアカウント (BLOB専用ストレージ アカウント (including premium storage) や、ゾーン冗長ストレージ レプリケーションを備えた汎用ストレージ アカウントなど) は、関数アプリを作成するときに既存の [ストレージ アカウント] の選択肢から除外されます。These accounts, which include blob-only storage accounts (including premium storage) and general-purpose storage accounts with zone-redundant storage replication, are filtered-out from your existing Storage Account selections when you create a function app.

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

従量課金プランと Premium プランのしくみHow the consumption and premium plans work

従量課金プランと Premium プランでは、関数がトリガーされるイベントの数に基づいて Functions ホストのインスタンスを追加することで、スケール コントローラーによって CPU とメモリのリソースが自動的に拡大縮小されます。In the consumption and premium plans, 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 のメモリと 1 個の CPU に制限されています。Each instance of the Functions host in the consumption plan is limited to 1.5 GB of memory and 1 CPU. ホストのインスタンスは関数アプリ全体です。つまり、関数アプリ内のすべての関数がインスタンス内のリソースを共有し、同時にスケールされます。An instance of the host is the entire function app, meaning all functions within a function app share resource within an instance and scale at the same time. 同じ従量課金プランを共有する関数アプリは、個別にスケーリングされます。Function apps that share the same consumption plan are scaled independently. Premium プランでは、プランのサイズにより、そのインスタンス上のそのプランのすべてのアプリで使用可能なメモリと CPU が決まります。In the premium plan, your plan size will determine the available memory and CPU for all apps in that plan on that instance.

関数コード ファイルは、関数のメイン ストレージ アカウントの Azure Files 共有に格納されます。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. このような遅延が発生するのは、関数アプリがアイドルになったときです。This delay occurs when a function app has gone idle. 関数アプリが実行されると、BLOB は直ちに処理されます。After the function app is running, blobs are processed immediately. このようなコールド スタートの遅延を回避するには、Premium プランを使用するか、または Event Grid トリガーを使用します。To avoid this cold-start delay, use the Premium plan, or use the Event Grid trigger. 詳しくは、BLOB トリガー バインディングのリファレンス記事をご覧ください。For more information, see the blob trigger binding reference article.

実行時のスケーリング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 only scales up 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.
  • HTTP トリガーの場合、新しいインスタンスは、10 秒ごとに最大 1 回しか割り当てられません。For HTTP triggers, new instances will only be allocated at most once every 1 second.
  • 非 HTTP トリガーの場合、新しいインスタンスは、30 秒ごとに最大 1 回しか割り当てられません。For non-HTTP triggers, new instances will only be allocated at most once every 30 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 efficiency. 詳細については、パフォーマンスの考慮事項に関する記事のスケーラビリティのセクションをご覧ください。For more information, see the scalability section of the performance considerations article. 関数アプリがスケールするにつれて、接続がどのように変化するかを認識する必要もあります。You should also be aware of how connections behave as your function app scales. 詳細については、「How to manage connections in Azure Functions」(Azure Functions で接続を管理する方法) を参照してください。For more information, see How to manage connections in Azure Functions.

課金モデル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.

従量課金の請求を理解する方法についての便利なクエリと情報については、請求に関する FAQ をご覧ください。Useful queries and information on how to understand your consumption bill can be found on the billing FAQ.

サービスの制限Service limits

次の表は、さまざまなホスティング プランで実行する場合に、関数アプリに適用される制限を示しています。The following table indicates the limits that apply to function apps when running in the various hosting plans:

ResourceResource 従量課金プランConsumption plan Premium プランPremium plan App Service プラン1App Service plan1
スケールアウトScale out イベント ドリブンEvent driven イベント ドリブンEvent driven 手動/自動スケールManual/autoscale
既定のタイムアウトまでの時間 (分)Default time out duration (min) 55 3030 302302
最大のタイムアウトまでの時間 (分)Max time out duration (min) 1010 unboundedunbounded 無制限3unbounded3
最大送信接続数 (インスタンスあたり)Max outbound connections (per instance) アクティブ 600 (合計 1200)600 active (1200 total) unboundedunbounded unboundedunbounded
最大要求サイズ (MB)4Max request size (MB)4 100100 100100 100100
クエリ文字列の最大長4Max query string length4 40964096 40964096 40964096
要求 URL の最大長4Max request URL length4 81928192 81928192 81928192
インスタンスあたりの ACUACU per instance 100100 210 ~ 840210-840 100 ~ 840100-840
最大メモリ (インスタンスあたりの GB)Max memory (GB per instance) 1.51.5 3.5 ~ 143.5-14 1.75 ~ 141.75-14
プランあたりの関数アプリFunction apps per plan 100100 100100 無制限5unbounded5
App Service プランApp Service plans リージョンあたり 100100 per region リソース グループあたり 100100 per resource group リソース グループあたり 100100 per resource group
ストレージ6Storage6 1 GB1 GB 250 GB250 GB 50 ~ 1000 GB50-1000 GB
アプリケーションごとのカスタム ドメイン数Custom domains per app 50075007 500500 500500
カスタム ドメインの SSL サポートCustom domain SSL support サポートされない、デフォルトで使用可能な *.azurewebsites.net のワイルドカード証明書Not supported, wildcard certificate for *.azurewebsites.net available by default 無制限の SNI SSL 接続と 1 件の IP SSL 接続が含まれるunbounded SNI SSL and 1 IP SSL connections included 無制限の SNI SSL 接続と 1 件の IP SSL 接続が含まれるunbounded SNI SSL and 1 IP SSL connections included

1各種 App Service プラン オプションに固有の制限については、App Service プランの制限に関する記事を参照してください。1For specific limits for the various App Service plan options, see the App Service plan limits.
2既定では、App Service プランでの Functions 1.x ランタイムのタイムアウトは無制限です。2By default, the timeout for the Functions 1.x runtime in an App Service plan is unbounded.
3App Service プランが Always On に設定されている必要があります。3Requires the App Service plan be set to Always On. 標準料金でのお支払い。Pay at standard rates.
4 これらの制限はホストで設定されます。4 These limits are set in the host.
5 実際にホストできる関数アプリの数は、アプリのアクティビティ、マシン インスタンスのサイズ、対応するリソース使用量によって異なります。5 The actual number of function apps that you can host depends on the activity of the apps, the size of the machine instances, and the corresponding resource utilization.
6 ストレージの制限は、同じ App Service プランのすべてのアプリにまたがる一時ストレージ内の合計コンテンツ サイズです。6The storage limit is the total content size in temporary storage across all apps in the same App Service plan. 従量課金プランでは、Azure Files を一時ストレージに使用します。Consumption plan uses Azure Files for temporary storage.
7関数アプリが従量課金プランでホストされている場合、CNAME オプションのみがサポートされます。7When your function app is hosted in a Consumption plan, only the CNAME option is supported. Premium プランまたは App Service プランの関数アプリでは、CNAME または A レコードを使用してカスタム ドメインをマップできます。For function apps in a Premium plan or an App Service plan, you can map a custom domain using either a CNAME or an A record.