Azure Functions ランタイム バージョンの概要Azure Functions runtime versions overview

現在、Azure Functions では、次の 3 つのバージョンのランタイム ホストがサポートされています。これらは、1.x、2.x、および 3.x です。Azure Functions currently supports three versions of the runtime host: 1.x, 2.x, and 3.x. 3 つのすべてのバージョンは、運用環境シナリオでサポートされています。All three versions are supported for production scenarios.

重要

バージョン 1.x はメンテナンス モードであり、Azure portal または Windows コンピューター上のローカルでの開発のみをサポートします。Version 1.x is in maintenance mode and only supports development in the Azure portal or locally on Windows computers. 拡張機能は、それ以降のバージョンでのみ提供されます。Enhancements are provided only in later versions.

この記事では、各種のバージョン間のいくつかの相違点、各バージョンを作成する方法、およびバージョンの変更方法について詳細に説明します。This article details some of the differences between the various versions, how you can create each version, and how to change versions.

LanguagesLanguages

バージョン 2.x から、ランタイムでは言語拡張モデルが使用されており、関数アプリ内のすべての関数が同じ言語を共有する必要があります。Starting with version 2.x, the runtime uses a language extensibility model, and all functions in a function app must share the same language. 関数アプリ内の関数の言語はそのアプリの作成時に選択され、FUNCTIONS_WORKER_RUNTIME 設定に保持されます。The language of functions in a function app is chosen when creating the app and is maintained in the FUNCTIONS_WORKER_RUNTIME setting.

次の表は、各ランタイム バージョンでどのプログラミング言語が現在サポートされているかを示しています。The following table indicates which programming languages are currently supported in each runtime version.

LanguageLanguage 1.x1.x 2.x2.x 3.x3.x
C#C# GA (.NET Framework 4.7)GA (.NET Framework 4.7) GA (.NET Core 2.2)GA (.NET Core 2.2) GA (.NET Core 3.1)GA (.NET Core 3.1)
JavaScriptJavaScript GA (Node 6)GA (Node 6) GA (Node 8、10)GA (Node 8 & 10) GA (Node 10、12)GA (Node 10 & 12)
F#F# GA (.NET Framework 4.7)GA (.NET Framework 4.7) GA (.NET Core 2.2)GA (.NET Core 2.2) GA (.NET Core 3.1)GA (.NET Core 3.1)
JavaJava 該当なしN/A GA (Java 8)GA (Java 8) GA (Java 8)GA (Java 8)
PowerShellPowerShell 該当なしN/A GA (PowerShell Core 6)GA (PowerShell Core 6) GA (PowerShell Core 6)GA (PowerShell Core 6)
PythonPython 該当なしN/A GA (Python 3.6、3.7)GA (Python 3.6 & 3.7) GA (Python 3.6、3.7、3.8)GA (Python 3.6, 3.7, & 3.8)
TypeScriptTypeScript 該当なしN/A GA1GA1 GA1GA1

1 JavaScript へのトランスパイリングによってサポートされます1Supported through transpiling to JavaScript.

言語サポートの計画的な変更については、「Azure ロードマップ」を参照してください。For information about planned changes to language support, see Azure roadmap.

詳細については、サポートされている言語に関するページを参照してください。For more information, see Supported languages.

特定のバージョンで実行するRun on a specific version

既定では、Azure portal と Azure CLI で作成された関数アプリはバージョン 3.x に設定されます。By default, function apps created in the Azure portal and by the Azure CLI are set to version 3.x. このバージョンは必要に応じて変更できます。You can modify this version as needed. ランタイムのバージョンを 1.x に変更できるのは、関数アプリを作成してから関数を追加するまでの間のみです。You can only change the runtime version to 1.x after you create your function app but before you add any functions. 2.x と 3.x の間の移行は関数が含まれるアプリでも許可されますが、まず、新しいアプリでテストすることをお勧めします。Moving between 2.x and 3.x is allowed even with apps that have functions, but it is still recommended to test in a new app first.

1.x からそれ以降のバージョンへの移行Migrating from 1.x to later versions

最新のバージョンではなくバージョン 1.x のランタイムを使用するように記述された既存のアプリを移行することができます。You may choose to migrate an existing app written to use the version 1.x runtime to instead use a newer version. 必要な変更の大部分は、.NET Framework 4.7 と .NET Core 間の C# API の変更など、言語ランタイムの変更に関連する変更です。Most of the changes you need to make are related to changes in the language runtime, such as C# API changes between .NET Framework 4.7 and .NET Core. また、コードとライブラリが、選択した言語ランタイムと互換性があることを確認する必要があります。You'll also need to make sure your code and libraries are compatible with the language runtime you choose. 最後に、以下で示すトリガー、バインド、および機能での変更にも注意してください。Finally, be sure to note any changes in trigger, bindings, and features highlighted below. 最適な移行結果を得るために、新しいバージョンで新しい関数アプリを作成し、既存のバージョン 1.x の関数コードを新しいアプリに移植してください。For the best migration results, you should create a new function app in a new version and port your existing version 1.x function code to the new app.

アプリ構成を手動で更新することで "インプレース" アップグレードすることが可能ですが、1.x から上位のバージョンへの移行には、いくつかの破壊的変更が含まれます。While it's possible to do an "in-place" upgrade by manually updating the app configuration, going from 1.x to a higher version includes some breaking changes. たとえば、C# では、デバッグ オブジェクトが TraceWriter から ILogger に変更されています。For example, in C#, the debugging object is changed from TraceWriter to ILogger. 最新のバージョン 3.x のテンプレートに基づいて新しいバージョン 3.x プロジェクトを作成することで、更新された関数から始めます。By creating a new version 3.x project, you start off with updated functions based on the latest version 3.x templates.

バージョン 1.x 後のトリガーとバインドの変更Changes in triggers and bindings after version 1.x

バージョン 2.x 以降では、アプリの関数で使用される特定のトリガーとバインドの拡張機能をインストールする必要があります。Starting with version 2.x, you must install the extensions for specific triggers and bindings used by the functions in your app. この例外は、拡張機能を必要としない HTTP トリガーとタイマー トリガーのみです。The only exception for this HTTP and timer triggers, which don't require an extension. 詳細については、バインド拡張機能の登録とインストールに関するページを参照してください。For more information, see Register and install binding extensions.

バージョン間には、関数の function.json や属性の変更もいくつかあります。There are also a few changes in the function.json or attributes of the function between versions. たとえば、イベント ハブの path のプロパティは eventHubName になりました。For example, the Event Hub path property is now eventHubName. 各バインドのドキュメントへのリンクについては、既存のバインド一覧を参照してください。See the existing binding table for links to documentation for each binding.

バージョン 1.x 後の機能の変更Changes in features and functionality after version 1.x

バージョン 1.x 後、いくつかの機能が削除、更新、置換されました。A few features were removed, updated, or replaced after version 1.x. このセクションでは、バージョン 1.x の後に後続のバージョンを使用した場合に気づく変更点について詳しく説明します。This section details the changes you see in later versions after having used version 1.x.

バージョン 2.x では次の点が変更されました。In version 2.x, the following changes were made:

  • HTTP エンドポイントを呼び出すキーは、Azure Blob Storage 内で常に暗号化されて格納されます。Keys for calling HTTP endpoints are always stored encrypted in Azure Blob storage. バージョン 1.x では、既定で Azure File ストレージにキーが格納されていました。In version 1.x, keys were stored in Azure File storage by default. アプリをバージョン 1.x からバージョン 2.x にアップグレードすると、ファイル ストレージ内の既存のシークレットはリセットされます。When upgrading an app from version 1.x to version 2.x, existing secrets that are in file storage are reset.

  • バージョン 2.x ランタイムには、Webhook プロバイダーの組み込みサポートは含まれていません。The version 2.x runtime doesn't include built-in support for webhook providers. この変更はパフォーマンスを向上するために行われました。This change was made to improve performance. Webhook のエンドポイントとして HTTP トリガーを使用することもできます。You can still use HTTP triggers as endpoints for webhooks.

  • ホスト構成ファイル (host.json) は空か、文字列 "version": "2.0" が含まれる必要があります。The host configuration file (host.json) should be empty or have the string "version": "2.0".

  • 監視を改善するために、AzureWebJobsDashboard 設定を使用したポータルの WebJobs ダッシュボードは、APPINSIGHTS_INSTRUMENTATIONKEY 設定を使用する Azure Application Insights に置き換えられています。To improve monitoring, the WebJobs dashboard in the portal, which used the AzureWebJobsDashboard setting is replaced with Azure Application Insights, which uses the APPINSIGHTS_INSTRUMENTATIONKEY setting. 詳しくは、「Azure Functions を監視する」をご覧ください。For more information, see Monitor Azure Functions.

  • 関数アプリ内のすべての関数は、同じ言語を共有する必要があります。All functions in a function app must share the same language. 関数アプリを作成するときに、そのアプリのランタイム スタックを選択する必要があります。When you create a function app, you must choose a runtime stack for the app. ランタイム スタックは、アプリケーション設定の FUNCTIONS_WORKER_RUNTIME 値によって指定されます。The runtime stack is specified by the FUNCTIONS_WORKER_RUNTIME value in application settings. メモリ占有領域と起動時間を改善するために、この要件が追加されました。This requirement was added to improve footprint and startup time. ローカルで開発する場合は、この設定も local.settings.json ファイル に含める必要があります。When developing locally, you must also include this setting in the local.settings.json file.

  • App Service プランでの関数に対する既定のタイムアウトは 30 分に変更されます。The default timeout for functions in an App Service plan is changed to 30 minutes. host.json の functionTimeout 設定を使用して、手動でタイムアウトを無制限に変更することができます。You can manually change the timeout back to unlimited by using the functionTimeout setting in host.json.

  • 従量課金プラン機能の場合、HTTP 同時実行のスロットルは既定で実装され、インスタンスあたりの既定の同時要求数は 100 です。HTTP concurrency throttles are implemented by default for Consumption plan functions, with a default of 100 concurrent requests per instance. これは host.json ファイルの maxConcurrentRequests 設定で変更できます。You can change this in the maxConcurrentRequests setting in the host.json file.

  • .NET Core の制限があるため、F# スクリプト (.fsx) 関数のサポートが削除されました。Because of .NET Core limitations, support for F# script (.fsx) functions has been removed. コンパイル済みの F# 関数 (.fs) は引き続きサポートされます。Compiled F# functions (.fs) are still supported.

  • Event Grid トリガー Webhook の URL 形式は https://{app}/runtime/webhooks/{triggerName} に変更されました。The URL format of Event Grid trigger webhooks has been changed to https://{app}/runtime/webhooks/{triggerName}.

2.x から 3.x への移行Migrating from 2.x to 3.x

Azure Functions バージョン 3.x は、バージョン 2.x との下位互換性が高くなっています。Azure Functions version 3.x is highly backwards compatible to version 2.x. 多くのアプリは、コードを変更することなく、3.x に安全にアップグレードできるはずです。Many apps should be able to safely upgrade to 3.x without any code changes. 3.x への移行が推奨されますが、運用アプリでメジャー バージョンを変更する前に、広範囲なテストを必ず実行してください。While moving to 3.x is encouraged, be sure to run extensive tests before changing the major version in production apps.

2.x と 3.x の間の破壊的変更Breaking changes between 2.x and 3.x

2.x アプリを 3.x にアップグレードする前に次の変更点にご留意ください。The following are the changes to be aware of before upgrading a 2.x app to 3.x.

JavaScriptJavaScript

  • context.done 経由で割り当てられた出力バインディングまたは戻り値が context.bindings の設定と同じ動作をするようになりました。Output bindings assigned through context.done or return values now behave the same as setting in context.bindings.

  • タイマー トリガー オブジェクトはパスカル ケースではなくキャメル ケースです。Timer trigger object is camelCase instead of PascalCase

  • dataType バイナリが指定された、イベント ハブにトリガーされる関数の場合、string ではなく、binary の配列を受け取ります。Event Hub triggered functions with dataType binary will receive an array of binary instead of string.

  • HTTP 要求ペイロードには context.bindingData.req 経由でアクセスできなくなりました。The HTTP request payload can no longer be accessed via context.bindingData.req. 引き続き入力パラメーター context.req としてアクセスできるほか、context.bindings でアクセスできます。It can still be accessed as an input parameter, context.req, and in context.bindings.

  • Node.js 8 のサポートが終了し、3.x 関数では実行されません。Node.js 8 is no longer supported and will not execute in 3.x functions.

.NET.NET

Azure でのアプリのバージョンの変更Changing version of apps in Azure

Azure の公開アプリから使用される Functions ランタイムのバージョンは、FUNCTIONS_EXTENSION_VERSION アプリケーションの設定によって決まります。The version of the Functions runtime used by published apps in Azure is dictated by the FUNCTIONS_EXTENSION_VERSION application setting. 次のランタイムのメジャー バージョン値がサポートされています。The following major runtime version values are supported:

Value ランタイム ターゲットRuntime target
~3 3.x3.x
~2 2.x2.x
~1 1.x1.x

重要

他のアプリ設定の変更や関数のコード変更が必要になる可能性があるため、この設定を独断で変更しないでください。Don't arbitrarily change this setting, because other app setting changes and changes to your function code may be required.

ローカルで開発されたアプリケーションのバージョンLocally developed application versions

関数アプリを次のように更新し、ターゲット バージョンをローカルで変更できます。You can make the following updates to function apps to locally change the targeted versions.

Visual Studio のランタイム バージョンVisual Studio runtime versions

Visual Studio では、プロジェクトを作成するときにランタイムのバージョンを選択します。In Visual Studio, you select the runtime version when you create a project. Visual Studio 用の Azure Functions ツールは、ランタイムのメジャー バージョン 3 つをサポートしています。Azure Functions tools for Visual Studio supports the three major runtime versions. デバッグ時と公開時には、プロジェクトの設定に基づいて正しいバージョンが使用されます。The correct version is used when debugging and publishing based on project settings. バージョン設定は、.csproj ファイルの次のプロパティで定義されています。The version settings are defined in the .csproj file in the following properties:

バージョン 1.xVersion 1.x
<TargetFramework>net461</TargetFramework>
<AzureFunctionsVersion>v1</AzureFunctionsVersion>
バージョン 2.xVersion 2.x
<TargetFramework>netcoreapp2.1</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
バージョン 3.xVersion 3.x
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>

注意

Azure Functions 3.x と .NET では、Microsoft.NET.Sdk.Functions 拡張機能を 3.0.0 以上にする必要があります。Azure Functions 3.x and .NET requires the Microsoft.NET.Sdk.Functions extension be at least 3.0.0.

Visual Studio で 2.x アプリを 3.x に更新するUpdating 2.x apps to 3.x in Visual Studio

2.x をターゲットにする既存の関数を開き、.csproj ファイルを編集し、上記の値を更新することで 3.x に移行できます。You can open an existing function targeting 2.x and move to 3.x by editing the .csproj file and updating the values above. Visual Studio では、プロジェクト メタデータに基づき、ランタイム バージョンがユーザーに代わって自動的に管理されます。Visual Studio manages runtime versions automatically for you based on project metadata. ただし、お使いのコンピューターでその Visual Studio で 3.x 用のテンプレートとランタイムが設定される前に 3.x アプリを作成していない場合にのみ可能です。However, it's possible if you have never created a 3.x app before that Visual Studio doesn't yet have the templates and runtime for 3.x on your machine. "プロジェクトで指定されたバージョンと一致する、利用可能な Functions ランタイムはありません" のようなエラーが表示されることがあります。This may present itself with an error like "no Functions runtime available that matches the version specified in the project." 最新のテンプレートとランタイムを取得するには、新しい関数プロジェクトを作成する操作を進めます。To fetch the latest templates and runtime, go through the experience to create a new function project. バージョンとテンプレートの選択画面に進んだら、Visual Studio で最新テンプレートの取得が完了するまで待ちます。When you get to the version and template select screen, wait for Visual Studio to complete fetching the latest templates. 最新の .NET Core 3 テンプレートが利用できるようになり、表示されたら、バージョン 3.x 用に構成されているプロジェクトの実行とデバッグができます。Once the latest .NET Core 3 templates are available and displayed you should be able to run and debug any project configured for version 3.x.

重要

バージョン 3.x 関数は、Visual Studio バージョン 16.4 以降を使用している場合にのみ、Visual Studio で開発できます。Version 3.x functions can only be developed in Visual Studio if using Visual Studio version 16.4 or newer.

VS Code と Azure Functions Core ToolsVS Code and Azure Functions Core Tools

Azure Functions Core Tools は、コマンド ラインの開発に使用されます。また、Visual Studio Code 用の Azure Functions 拡張機能からも使用されます。Azure Functions Core Tools is used for command line development and also by the Azure Functions extension for Visual Studio Code. バージョン 3.x に対して開発するには、Core Tools のバージョン 3.x をインストールします。To develop against version 3.x, install version 3.x of the Core Tools. バージョン 2.x の開発には Core Tools のバージョン 2.x が必要です。他のバージョンも同様です。Version 2.x development requires version 2.x of the Core Tools, and so on. 詳細については、「Azure Functions Core Tools のインストール」を参照してください。For more information, see Install the Azure Functions Core Tools.

Visual Studio Code の開発の場合は、必要に応じてインストールされているツールのバージョンと一致するように azureFunctions.projectRuntime のユーザー設定を更新します。For Visual Studio Code development, you may also need to update the user setting for the azureFunctions.projectRuntime to match the version of the tools installed. この設定で、関数アプリの作成時に使用されるテンプレートと言語も更新されます。This setting also updates the templates and languages used during function app creation. ~3 でアプリを作成するには、azureFunctions.projectRuntime ユーザー設定を ~3 に更新します。To create apps in ~3 you would update the azureFunctions.projectRuntime user setting to ~3.

Azure Functions 拡張機能ランタイム設定

Maven および Java アプリMaven and Java apps

ローカル実行に必要なコア ツールの 3.x バージョンをインストールすることで、Java アプリを 2.x から 3.x に移行できます。You can migrate Java apps from version 2.x to 3.x by installing the 3.x version of the core tools required to run locally. バージョン 3.x でアプリが正しくローカル実行されることを確認したら、アプリの POM.xml ファイルを更新し、次の例のように、FUNCTIONS_EXTENSION_VERSION 設定を ~3 に変更します。After verifying that your app works correctly running locally on version 3.x, update the app's POM.xml file to modify the FUNCTIONS_EXTENSION_VERSION setting to ~3, as in the following example:

<configuration>
    <resourceGroup>${functionResourceGroup}</resourceGroup>
    <appName>${functionAppName}</appName>
    <region>${functionAppRegion}</region>
    <appSettings>
        <property>
            <name>WEBSITE_RUN_FROM_PACKAGE</name>
            <value>1</value>
        </property>
        <property>
            <name>FUNCTIONS_EXTENSION_VERSION</name>
            <value>~3</value>
        </property>
    </appSettings>
</configuration>

バインドBindings

バージョン 2.x から、ランタイムでは、次の利点を提供する新しいバインド拡張モデルが使用されています。Starting with version 2.x, the runtime uses a new binding extensibility model that offers these advantages:

  • サード パーティのバインド拡張のサポート。Support for third-party binding extensions.

  • ランタイムとバインドの分離。Decoupling of runtime and bindings. この変更により、バインド拡張を個別にバージョン管理したり、解放したりできます。This change allows binding extensions to be versioned and released independently. たとえば、基になる SDK の新しいバージョンに依存する拡張のバージョンにアップグレードするよう選択できます。You can, for example, opt to upgrade to a version of an extension that relies on a newer version of an underlying SDK.

  • より軽量な実行環境。ここでは、使用中のバインドのみがランタイムによって識別され、読み込まれます。A lighter execution environment, where only the bindings in use are known and loaded by the runtime.

HTTP とタイマーのトリガーを除き、すべてのバインドを関数アプリ プロジェクトに明示的に追加するか、ポータルで登録する必要があります。With the exception of HTTP and timer triggers, all bindings must be explicitly added to the function app project, or registered in the portal. 詳細については、「バインディング拡張機能を登録する」を参照してください。For more information, see Register binding extensions.

各ランタイム バージョンでサポートされるバインドを次の表に示します。The following table shows which bindings are supported in each runtime version.

この表は、Azure Functions のメジャー バージョンのランタイムでサポートされているバインディングを示しています。This table shows the bindings that are supported in the major versions of the Azure Functions runtime:

種類Type 1.x1.x 2.x 以降12.x and higher1 トリガーTrigger 入力Input OutputOutput
Blob StorageBlob storage
Cosmos DBCosmos DB
Event GridEvent Grid
Event HubsEvent Hubs
HTTP と WebhookHTTP & webhooks
IoT HubIoT Hub
Microsoft Graph
Excel テーブル
Microsoft Graph
Excel tables
Microsoft Graph
OneDrive ファイル
Microsoft Graph
OneDrive files
Microsoft Graph
Outlook メール
Microsoft Graph
Outlook email
Microsoft Graph
イベント
Microsoft Graph
events
Microsoft Graph
Auth トークン
Microsoft Graph
Auth tokens
Mobile AppsMobile Apps
Notification HubsNotification Hubs
Queue StorageQueue storage
SendGridSendGrid
Service BusService Bus
SignalRSignalR
Table StorageTable storage
TimerTimer
TwilioTwilio

1 バージョン 2.x ランタイム以降では、HTTP と Timer を除くすべてのバインドを登録する必要があります。1 Starting with the version 2.x runtime, all bindings except HTTP and Timer must be registered. バインディング拡張機能を登録する」を参照してください。See Register binding extensions.

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

関数アプリのタイムアウト期間は、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 the different runtime versions:

プランPlan ランタイム バージョンRuntime Version DefaultDefault 最大値Maximum
従量課金Consumption 1.x1.x 55 1010
従量課金Consumption 2.x2.x 55 1010
従量課金Consumption 3.x3.x 55 1010
PremiumPremium 1.x1.x 3030 無制限Unlimited
PremiumPremium 2.x2.x 3030 無制限Unlimited
PremiumPremium 3.x3.x 3030 無制限Unlimited
App ServiceApp Service 1.x1.x 無制限Unlimited 無制限Unlimited
App ServiceApp Service 2.x2.x 3030 無制限Unlimited
App ServiceApp Service 3.x3.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.

次のステップNext steps

詳細については、次のリソースを参照してください。For more information, see the following resources: