🤺

Azure Functions のデプロイテクノロジ

2024/07/13に公開

Azure Functions のデプロイテクノロジについて公開ドキュメントにまとまっていますが、実際に手を動かして触ってみようと思います。

deploy-method-table

deploy-table

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 作成

関数アプリの [構成] ブレードより、アプリケーソン設定を確認した。
Alt text
Alt text

アプリケーションにアクセスすると以下のエラーが出る。
Alt text

kudu の scm サイトを確認すると "Run From Package Initialization failed." というエラーが出力されている。
Alt text
Alt text

アプリケーション設定の WEBSITE_RUN_FROM_PACKAGE=1 を削除すると動く。
Alt text
kudu の scm サイトを確認すると、host.json があることが確認できる。
Alt text

関数を関数アプリにデプロイする。
Alt text

WEBSITE_RUN_FROM_PACKAGE 設定を削除し、ファイル共有から過去のデプロイファイルを消した。
Alt text

勝手に 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