App Serviceにデプロイする際の自動ビルドを抑止する

このエントリは2022/02/21現在の情報に基づいています。将来の機能追加や変更に伴い記載内容との乖離が発生する可能性があります。

問い合わせ

以下のような問い合わせをもらった。

Angularで作ったアプリケーションをAzure App Service (Node.jsランタイム) にデプロイしようとしたところエラーが出た。どうしたらよいか?

よくわからないのでもう少し尋ねてみた。

  • 利用しようとしているApp Serviceはnode.js
  • OSはLinux
  • 作成したAngularアプリケーションはローカルで動作確認済み
  • <App>/dist/<App> 配下のファイルをZipで固めてAzure CLIでデプロイしたところ、エラーが発生
  • エラーの内容をチェックしたところ、デプロイ時にビルドしようとしているがビルド対象のソースがない旨のエラーが出ていた

つまり、ビルド成果物をデプロイしているにも関わらず、デプロイ中にさらにビルドしようとしているため、このデプロイ中のビルドを無効にしたい、ということ。

2. 原因

Oryxが動作していたことが原因。Azure使いの方であればすぐに想像できたかもしれない。

3. 背景

App Service(ならびに同一プラットフォームであるFunctions)には、デプロイ時にソースを自動ビルドを実施する仕組み (Oryx) が組み込まれている。

Oryx
https://github.com/Microsoft/Oryx

このOryxを利用する・しないはアプリケーション設定でENABLE_ORYX_BUILDにてtrue/falseで指定できるが、デフォルト値はtrueである。下図はアプリケーション設定のデフォルト値(一部)であるが、しっかりtrueになっていることがわかる。

通常、以下のアプリケーション設定を構成していれば、Oryxの利用は間接的に無効化される(デプロイ時のビルドをやらない、という設定)。

SCM_DO_BUILD_DURING_DEPLOYMENT=FALSE

なお以下のドキュメントに記述の通り、この設定のデフォルトはfalseなので、通常はこの設定を入れておく必要はない。

展開のカスタマイズ / Deployment customization
https://docs.microsoft.com/azure/azure-functions/deployment-zip-push#deployment-customization

ところが、うっかりこの設定をtrueにしてしまうと、ENABLE_ORYX_BUILDのデフォルト値はtrueなので、デプロイ時に自動ビルドが走ってしまう可能性がある。そのため、Oryxを使わないよう

ENABLE_ORYX_BUILD=FALSE

明示的に指定しておけば、デプロイ時のビルドは抑止され、成果物をデプロイできる。

4. リモートビルドを有効化したい場合

リモートビルド(サーバーサイドでのビルド)を有効にするには、明示的に両者をtrueにする必要がある。

SCM_DO_BUILD_DURING_DEPLOYMENT=true
ENABLE_ORYX_BUILD=true

このあたりは以下のFunctionsのドキュメントにも記載がある。FunctionsのOSをLinuxにした場合、Core Toolsなどを使ってリモートビルドする挙動がデフォルトであるが、この挙動はApp Serviceへのデプロイの場合でも同様である。

Linux でのリモート ビルド / Remote build on Linux
https://docs.microsoft.com/zure/azure-functions/functions-deployment-technologies#remote-build-on-linux

Linux でリモート ビルドを有効にするには、次のアプリケーション設定を行う必要があります。
To enable remote build on Linux, the following application settings must be set:
ENABLE_ORYX_BUILD=true
SCM_DO_BUILD_DURING_DEPLOYMENT=true

Linux でのリモート ビルド / Remote build on Linux

で今回のような、ビルド済みの成果物をデプロイする場合は、両方をfalseにしておくのが確実、ということ。

4. 結果

この内容をお伝えしたところ、問題なくデプロイできて稼働した、との連絡をもらった。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中