概要
Node.js 20 LTS のサポートが2026年4月30日までのため、サポート期間内に Node.js 22 LTS へ移行する必要がある。
Azure Functions では、デプロイスロットを用いることで、ダウンタイムを最小限に抑えて移行できる。デプロイスロットを用いた移行手順を備忘録として簡単にまとめる
(今回は関数アプリの OS が Windows の場合を例にしている。Linux の場合は環境変数名が一部異なるため、適宜読み替えること)
構成
- 前提: HTTPトリガーの関数をデプロイした関数アプリが既に作成済み
- スタック: Node.js 20 LTS
- OS: Windows
- ランタイム バージョン: 4.1043.200.25453
公式ドキュメントによれば、Node.js 22 を使用する場合は、ランタイム バージョン 4.25 以降が必要とされている。
ランタイムバージョンの指定は既に 4 以上を指定している。
4.25 以上のバージョンを使う場合は、環境変数に正確なバージョンを指定する必要があると推測している。
Node.js 22 準拠のスクリプトをデプロイした後もランタイムバージョンは変化せず、テンプレートから生成したスクリプトは問題なく動作した。
手順
1. デプロイスロットの作成
2. デプロイスロットのスタックを Node.js 22 に変更する
-
デプロイスロット一覧から、先ほど作成したデプロイスロットを選択する
一覧における名称は、<関数アプリ名>-<デプロイスロット名>で表記されるため注意

-
-
-
環境変数一覧に遷移したら、下記項目の値を確認する
「値を表示する」を選択することで値が確認できる-
FUNCTIONS_EXTENSION_VERSION: ~4 -
FUNCTIONS_WORKER_RUNTIME: node -
WEBSITE_NODE_DEFAULT_VERSION: ~20
-
-
-
-
-
Node.js バージョンが
Node.js 20 LTSであることを確認する

-
Node.js バージョンを
Node.js 22に変更する

-
-
-
「Web アプリ設定が正常に更新されました」という通知を確認する

-
環境変数の一覧に移動し、
WEBSITE_NODE_DEFAULT_VERSIONが~22であることを確認する

3. Node.js 22 準拠の関数をデプロイ
-
ローカル開発環境で Node.js 22 に準拠した関数を作成し、デプロイスロットにデプロイする
今回は、
func new --name httpTrigger2 --template "HTTP trigger" --authlevel anonymousで HTTPトリガーのサンプルスクリプトを生成し、func azure functionapp publish func-app2 --slot codingでデプロイした。デプロイ完了時に URL が出力されるため、アクセス可能か確認する。
HTTP トリガーではない場合、デプロイが完了した時点で関数が実行されるため、多重実行の可能性がある点に注意する。これを避けるには、デプロイ前に開発用のデプロイスロットの関数アプリの動作を停止させる必要がある。
停止中にデプロイを行うと、コンソールではエラーが発生するが、デプロイ自体は問題なくできているようで、デプロイ後に関数アプリを開始し、関数のテストを行ったところ問題なく実行できた。
-
デプロイが完了したら、概要の画面に戻り、デプロイした関数が追加されていることを確認する

4. デプロイスロットと本番環境をスワップする
-
-
Sourceは修正後の関数を含むデプロイスロットを、Targetは 修正対象の関数アプリを選択する

-
-
-
「Successfully swapped slots...」という通知を確認する

-
関数アプリの概要に戻り、関数名がデプロイコンテナにデプロイした関数と同じであることを確認する

-






















