直近の開発で、Kuduの管理コンソール上からファイルの値を直接変更できるモジュールと、できないモジュールがあり、いろいろとはまってしまいました。 大した内容ではないですが、Azure Functionsの「WEBSITE_RUN_FROM_PACKAGE」設定について、備忘録的な意味合いも込めて内容をまとめます。
設定値について
設定値 | 概要 |
---|---|
1 | C:\home\data\SitePackagesに配置され、次回Function起動時にwwwroot下に最新モジュールが読み取り専用で展開される。 |
<url> | 起動するパッケージが配置されているリモートURLを設定。Linux従量課金の場合は必須。 |
設定されていないか、「0」などが設定されている場合は、wwwrootに直接デプロイされる。
設定するメリットとしては、以下があります。
- ファイル コピー ロック問題のリスクを軽減します。
- 運用環境のアプリにデプロイできます(再起動が必要です)。
- アプリで実行されるファイルを検証します。
- Azure Resource Manager デプロイのパフォーマンスが向上します。
特に大規模な npm パッケージのツリーを利用する JavaScript 関数の場合は、コールド スタート時間を短縮します。
wwwroot下を直接変更するのはFunction再起動時のため、Functionが動作状態にかかわらずモジュールのデプロイなどが行えるため、開発環境などで設定していると非常に便利なものだと思います。
(KuduからのZIPデプロイだと勝手に再起動してしまうため、Function側で中断時のリカバリーなどが入っている必要はありますが)
また上記以外でも、再起動時にwwwroot下をきれいにしてくれるので、誤って別モジュールを上げてしまった場合でも、再起動時に不要なファイルなどを取り除いてくれるため、複数構成がコンタミを起こして起動しないなどということも防げます。
小技
この設定を入れている場合、wwwroot下のリソースはすべて読み取り専用となるため、開発環境で設定ファイルの設定値をちょっと書き換えて動作確認したいという場合は、再度ZIPデプロイとFunctionの再起動が必要となります。
ただし、小技として以下のようなことも可能なようです。
- 設定値[1]でデプロイ&再起動
- 設定値[0]に変更して、Kuduなどで設定ファイルの書き換え
- 動作確認
しかしながら、デプロイ自動化されているところも多いとは思うので、上記を使う機会はほぼないとは思います。
まとめ
上記の通り設定を入れておくと、開発環境のように頻繁にモジュールの入れ替えが起こるような環境では、非常に便利な設定値であるという認識です。
今回の私たちの開発環境のように自動デプロイの環境が未作成であり、モジュールの作成→デプロイという工程が非常に面倒な場合には、この値を設定しなかったり、外したりして直接デプロイモジュールの値を変更して確認するほうが楽だと感じました。