Azure Functions では、言語スタックのサポートは 特定のバージョンに制限されます。 新しいバージョンが利用可能になったら、新機能を利用するために関数アプリを更新することをお勧めします。 Functions でのサポートは、以前のバージョンでも終了し、通常はコミュニティのサポート終了タイムラインに合わせて調整されます。 詳細については、言語ランタイムのサポート ポリシーを参照してください。 さまざまな言語のサポートされているバージョンについては、「言語 (ランタイム バージョン別)」を参照してください。
関数アプリのサポートを引き続き受けられるようにするには、この記事の手順に従って、使用可能な最新バージョンに更新します。 関数アプリの更新方法は、次の複数の要素によって異なります。
- 関数アプリの開発に使用する言語。 この記事の上部にあるプログラミング言語を必ず選択してください。
- Azure で関数アプリが実行されるオペレーティング システム: Windows または Linux。
- ホスティング プラン。
注
この記事では、分離ワーカー モデルを使用する関数アプリの .NET バージョンを更新する方法について説明します。 関数アプリが以前のバージョンの .NET で実行され、インプロセス モデルを使用している場合は、次のオプションを検討してください。
関数アプリを準備する
Azure で関数アプリのスタック構成を更新する前に、次のセクションのタスクを完了してください。
依存関係を確認する
言語バージョンを更新する前に、次の潜在的な依存関係を確認してください。
-
拡張バンドル:
host.jsonファイルが互換性のある 拡張バンドル バージョンを参照していることを確認します。 ほとんどのシナリオでは、バージョン 4.x バンドルをお勧めします。
バインド拡張機能: 新しい言語バージョンと互換性のあるバージョンへの明示的なバインディング拡張機能参照を更新します。
パッケージの依存関係: すべてのパッケージの依存関係を確認し、ターゲット言語バージョンをサポートするバージョンに更新します。
ローカル ツール: Azure Functions Core Tools、SDK、IDE などのローカル開発ツールで、新しい言語バージョンがサポートされていることを確認します。
関数アプリをローカルで確認する
新しいターゲット バージョンで関数アプリ コードをローカルでテストして確認します。
ローカル コンピューターでプロジェクトを更新するには、次の手順に従います。
.NET SDK のターゲット バージョンがインストールされていることを確認します。
プレビュー バージョンを対象としている場合は、プレビュー .NET バージョンの Functions ガイダンス を参照して、バージョンがサポートされていることを確認してください。 .NET プレビューを使用するには、より多くの手順が必要になる場合があります。
Microsoft.Azure.Functions.Worker と Microsoft.Azure.Functions.Worker.Sdk の最新バージョンへの参照を更新します。
プロジェクトのターゲット フレームワークを新しいバージョンに更新してください。 C# プロジェクトの場合は、
<TargetFramework>ファイル内の 要素を更新する必要があります。 バージョンの詳細については、「 ターゲット フレームワーク」を参照してください。プロジェクトのターゲット フレームワークを変更すると、プロジェクト コード以外のツールチェーンの一部にも変更が必要になる場合があります。 たとえば、Visual Studio Code では、ユーザー設定またはプロジェクトの
azureFunctions.deploySubpathファイル内の 拡張機能設定を更新する必要があるかもしれません。 ビルド手順または継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインの一部として、プロジェクト コード外に存在するフレームワーク バージョンへの依存関係があるかどうかを確認します。新しい .NET バージョンに必要なプロジェクト コードを更新します。 特定の情報については、該当バージョンのリリース ノートを確認してください。 .NET アップグレード アシスタントを使用して、メジャー バージョン間の変更に応じてコードを更新することもできます。
これらの変更を行った後、プロジェクトをリビルドしてテストし、関数アプリが期待どおりに実行されていることを確認します。
最新の Functions ランタイムに移動する
関数アプリが最新バージョンの Functions ランタイム (バージョン 4.x) で実行されていることを確認します。 ランタイム バージョンは、Azure portal または Azure CLI を使用して確認できます。
こちらの手順を使用して、Functions ランタイムのバージョンを確認します。
Azure portal で、関数アプリを見つけて選択します。 サイド メニューで、[設定]>[構成] の順に選択します。
[関数ランタイム設定] タブに移動し、[ランタイム バージョン] の値を確認します。 関数アプリは、バージョン 4.x の Functions ランタイム (
~4) で実行する必要があります。
関数アプリをバージョン 4.x に更新する必要がある場合は、「Azure Functions バージョン 1.x からバージョン 4.x にアプリを移行する」または「Azure Functions バージョン 3.x からバージョン 4.x にアプリを移行する」を参照してください。
FUNCTIONS_EXTENSION_VERSION設定を変更するのではなく、これらの記事の指示に従ってください。
関数アプリの更新プログラムを発行する
新しいバージョンで正しく動作するように関数アプリを更新した場合は、関数アプリのスタック構成を更新する前に、関数アプリの更新プログラムを公開します。
ヒント
更新プロセスを効率化し、関数アプリのダウンタイムを最小限に抑え、ロールバックの可能性のあるバージョンを提供するには、更新された関数アプリをステージング スロットに発行します。 詳細については、「Azure Functions のデプロイ スロット」を参照してください。
更新された関数アプリをステージング スロットに発行する場合は、この記事の残りの部分にあるスロット固有の更新手順に従ってください。 後で、更新されたステージング スロットを運用環境にスワップします。
スロットの使用を検討する
関数アプリの言語バージョンを更新する前に、テストとデプロイに使用する デプロイ スロット を作成します。 この方法では、ダウンタイムを最小限に抑え、問題が発生した場合にロールバックオプションを簡単に提供します。 この記事の例では、 stagingという名前のステージング スロットを使用します。
Flex 従量課金プラン: スロットは現在サポートされていません。 最初に、運用以外の関数アプリで更新されたコードを確認する必要があります。 実行中のアプリにデプロイする場合は、ローリング 更新戦略を使用できる場合があります。 詳細については、「 Flex Consumption のサイト更新戦略」を参照してください。
Important
ローリング アップデート戦略は現在プレビュー段階であり、運用アプリには推奨されません。 運用アプリでこの戦略を有効にする前に、現在の 制限事項と考慮事項 を確認してください。
スタック構成を更新する
スタック構成を更新する方法は、関数アプリが Windows 上で実行されるか、Azure の Linux 上で実行されるかによって異なります。
ステージング スロットを使用する場合は、更新プログラムを適切なスロットにターゲットにしてください。
Java バージョンを更新するには、次の手順を実行します。
Azure portal で、関数アプリを見つけて選択します。 サイド メニューで、[設定]>[構成] の順に選択します。 ステージング スロットがある場合は、特定のスロットを選択します。
[全般設定] タブで、[Java バージョン] を目的のバージョンに更新します。
保存 を選択します。 再起動の通知が表示されたら、[続行] を選択します。
.NET のバージョンを更新するには、次の手順を実行してください。
Azure portal で、関数アプリを見つけて選択します。 サイド メニューで、[設定]>[構成] の順に選択します。 ステージング スロットがある場合は、特定のスロットを選択します。
[全般設定] タブで、[.NET バージョン] を希望するバージョンに更新します。
保存 を選択します。 再起動の通知が表示されたら、[続行] を選択します。
Node.js バージョンを変更するには、次の手順に従ってください。
Azure portal で、関数アプリを見つけて選択します。 サイド メニューで、[設定]>[構成] の順に選択します。 ステージング スロットがある場合は、特定のスロットを選択します。
[全般設定] タブで、[Node.js バージョン] を希望するバージョンに更新します。
保存 を選択します。 再起動の通知が表示されたら、[続行] を選択します。 この変更により、
WEBSITE_NODE_DEFAULT_VERSIONアプリケーション設定が更新されます。
PowerShell のバージョンを更新するには、次の手順を実行してください。
Azure portal で、関数アプリを見つけて選択します。 サイド メニューで、[設定]>[構成] の順に選択します。 ステージング スロットがある場合は、特定のスロットを選択します。
[全般設定] タブで、[PowerShell Core バージョン]を希望するバージョンに更新します。
保存 を選択します。 再起動の通知が表示されたら、[続行] を選択します。
ポータルでは、Windows 上の Python アプリはサポートされていません。 代わりに [Linux] タブに移動します。
関数アプリは、バージョンを更新した後に再起動されます。
注
再起動中、関数アプリは短時間 (通常は 30 ~ 60 秒) 使用できません。 運用関数アプリを (ステージング スロットを使用せずに) 直接更新する場合は、メンテナンス期間中にこのダウンタイムを計画します。 再起動により、すべてのインフライト要求が終了し、アプリが正常に再起動されるまで新しい要求は失敗します。
更新プログラムを確認する
関数アプリが再起動したら、言語バージョンの更新が成功したことを確認します。
Azure portal で、関数アプリを見つけて選択します。 サイド メニューで、[設定]>[構成] の順に選択します。
[ 全般設定 ] タブで、選択した新しいバージョンが言語バージョンに表示されることを確認します。
サイド メニューの [ 概要 ] を選択し、[ 状態] が [実行中] と表示されていることを確認します。
バージョンを確認した後、関数が期待どおりに動作することも確認します。
スロットをスワップする
ステージング スロットを使用してコード プロジェクトをデプロイし、設定を更新する場合は、ステージング スロットを運用環境にスワップします。 詳細については、「スロットをスワップする」を参照してください。
トラブルシューティング
言語バージョンの更新後に問題が発生した場合は、次のガイダンスを使用して一般的な問題を解決してください。
関数アプリが起動しない
症状: 関数アプリの状態は 、[停止済み ] または [継続的に再起動] と表示されます。
ソリューション:
Azure portal でアプリケーション ログを確認します。
- 関数アプリに移動し、 監視>Log ストリームを選択します。
- ランタイムまたは言語のバージョンの不一致に関連するエラー メッセージを探します。
すべての依存関係が新しい言語バージョンと互換性があることを確認します。
- .NET の場合は、NuGet パッケージがターゲット フレームワークをサポートしていることを確認します。
- Python の場合は、
requirements.txtのパッケージ バージョンに互換性があることを確認します。 - Node.jsの場合は、依存関係
package.json新しい Node バージョンがサポートされていることを確認します。
ランタイム エラーで関数が失敗する
症状: トリガーされると個々の関数が失敗し、ログにエラーが表示されます。
ソリューション:
使用中の言語バージョンの互換性を壊す変更を確認してください。
- ターゲット バージョンの .NET での破壊的変更 を参照してください。
- 移行ガイダンスについては 、Java リリース ノート を確認してください。
- 重大な変更については、リリース ノートNode.js 確認してください。
- バージョン固有の変更については、 Python の新機能 を参照してください。
- 変更については、PowerShell のリリース ノートを確認してください。
新しい言語バージョンと互換性のあるバージョンにバインド拡張機能を更新します。
再デプロイする前に、新しい言語バージョンで関数をローカルでテストします。
拡張機能のバージョンの競合
症状: "extension" または "binding" バージョンの非互換性に関するエラー。
ソリューション:
の
host.jsonのバージョンをバージョン 4.x 以降に更新します。{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.*, 5.0.0)" } }明示的な拡張機能参照を使用する .NET プロジェクトの場合は、すべての
Microsoft.Azure.WebJobs.Extensions.*パッケージを最新バージョンに更新します。
更新プログラムのロールバック
以前の言語バージョンに戻す必要がある場合:
ステージング スロットを使用した場合:
- ステージング スロットをスワップし、実稼働環境に戻します。
- 今後の試行のために、ステージング スロットを以前のバージョンに更新します。
もし運用環境を直接更新した場合:
- この記事の同じ更新手順に従いますが、以前の言語バージョンを指定してください。
- 以前のコード バージョンを再デプロイします。
関数アプリを監視して、通常の操作に戻っていることを確認します。
ヒント
問題を回避するには、運用環境に適用する前に、必ずステージング スロットで言語バージョンの更新をテストしてください。 変更を行う前に、関数アプリ構成のバックアップを作成します。