Azure Functions のデプロイテクノロジ
Azure Functions のデプロイテクノロジについて公開ドキュメントにまとまっていますが、実際に手を動かして触ってみようと思います。
Zip デプロイ
リモートビルド
Azure Functions では、zip デプロイ後に受け取ったコードのビルドを自動的に実行できます。これらのビルドの動作は、アプリが Windows と Linux のどちらで実行されているかによって異なります。
Windows
Windows 上で実行されている全ての関数アプリには、小規模な管理アプリがあり、これは Kudu によって提供される SCM サイトです。このサイトで、Azure Functions のデプロイとビルドのロジックの多くが処理されます。
アプリが Windows にデプロイされると、dotnet restore (C#) や npm install (JavaScript) などの言語固有のコマンドが実行されます。
Linux
Linux 上のリモートビルドを有効にするには、アプリケーション設定で次のものを設定する必要があります。
・ENABLE_ORYX_BUILD=true
・SCM_DO_BUILD_DURING_DEPLOYMENT=true
既定では、Azure Functions Core Tools と Visual Studio Code 用の Azure Functions 拡張機能の両方で、Linux へのデプロイ時にリモートビルドが実行されます。このため、どちらのツールでも、これらの設定は Azure で自動的に作成されます。
Linux 上でリモートビルドされたアプリは、デプロイパッケージから実行されます。
外部パッケージ URL
外部パッケージ URL を使用して、関数アプリが含まれるリモートパッケージ (.zip) ファイルを参照でできます。
デプロイテクノロジ
- ZIP デプロイ
- Docker コンテナー
- Web デプロイ
- ソース管理
- ローカル Git
- クラウドの同期
- FTP
- ポータル内編集
デプロイ方法
- Visual Studio Code による発行
- Visual Studio による発行
- Core Tools による発行
- デプロイセンター (CI/CD)
- コンテナーのデプロイ
- Azure Pipelines
- Github Actions
Visual Studio Code による発行
Consumption Plan
まずはローカルでプロジェクト作成
- JavaScript
- Model V3
- HTTP trigger
- Anonymous
Windows
v10001
Azure に 関数アプリを作成する
- runtime stack: Node.js 18 LTS
- OS: Windows
- Japan East
- Consumption
- Storage Account, Application Insights 作成
関数アプリの [構成] ブレードより、アプリケーソン設定を確認した。
アプリケーションにアクセスすると以下のエラーが出る。
kudu の scm サイトを確認すると "Run From Package Initialization failed." というエラーが出力されている。
アプリケーション設定の WEBSITE_RUN_FROM_PACKAGE=1 を削除すると動く。
kudu の scm サイトを確認すると、host.json があることが確認できる。
関数を関数アプリにデプロイする。
WEBSITE_RUN_FROM_PACKAGE 設定を削除し、ファイル共有から過去のデプロイファイルを消した。
勝手に WEBSITE_RUN_FROM_PACKAGE が追加されているので消した。
メモ (WEBSITE_RUN_FROM_PACKAGE を指定しているのに、対象の場所に zip ファイルがないと500系のエラーが出る)
Linux
疑問点たち
- リモートビルドは Zip デプロイ特有の話?
- Visual Studio 2022 については、Linux へのデプロイ時にリモートビルドが実行されるなどの言及はないがどうなの?またツールベースのデプロイ以外の App Service マネージドデプロイや外部パイプラインデプロイの際はリモートビルドが実行されるかはどうなの?
- →そもそもツールベースのデプロイ以外の App Service マネージドデプロイや外部パイプラインデプロイを使用したことが無いので触ってみる。
- Run From Package モード と リモートビルドの関係。
リモートビルドはどのタイミングで使用する必要があるの?
Zip デプロイした際に、リモートビルドされるというのはどのような挙動ですかね?
→実際にzipデプロイして試してみる。Windowsだとzipデプロイしたものが必ず、dotnet restore や npm install などの言語固有のコマンドが実行される。
Discussion