App Service にファイルをデプロイする

この記事では、コードを ZIP、WAR、JAR、EAR のいずれかのパッケージとして Azure App Service にデプロイする方法について説明します。 また、アプリケーション パッケージとは別に、個々のファイルを App Service にデプロイする方法についても説明します。

前提条件

この記事の手順を完了するには、App Service アプリを作成するか、別のチュートリアルで作成したアプリを使用します。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

プロジェクトの ZIP パッケージを作成する

注意

ファイルを ZIP パッケージでダウンロードした場合は、まずファイルを抽出します。 たとえば、GitHub から ZIP パッケージをダウンロードした場合、そのファイルをそのままデプロイすることはできません。 GitHub では、入れ子になったディレクトリが追加されますが、これらは App Service と連携しません。

ローカル ターミナル ウィンドウで、アプリ プロジェクトのルート ディレクトリに移動します。

このディレクトリには、Web アプリへの入力ファイルを含める必要があります (index.htmlindex.phpapp.js など)。 パッケージ管理ファイルを含めることもできます (project.jsoncomposer.jsonpackage.jsonbower.jsonrequirements.txt など)。

デプロイの自動化を App Service で自動的に実行したい場合を除き、すべてのビルド タスク (npmbowergulpcomposerpip など) を実行し、アプリの実行に必要なファイルがすべて揃っていることを確認してください。 パッケージを直接実行したい場合、この手順は必須です。

プロジェクト内のすべての ZIP アーカイブを作成します。 dotnet プロジェクトの場合、このフォルダーは dotnet publish コマンドの出力フォルダーです。 次のコマンドには、お使いの端末の既定のツールを使用します。

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

ZIP パッケージをデプロイする

ZIP パッケージをデプロイすると、その内容が、App Service によってアプリの既定のパス (Windows の場合は D:\home\site\wwwroot、Linux の場合は /home/site/wwwroot) に展開されます。

この ZIP パッケージ デプロイでは、Kudu サービスを使用することで、継続的インテグレーションベースのデプロイを効率化できます。 Kudu では、ZIP パッケージでのデプロイについて次の機能がサポートされています。

  • 以前のデプロイから残っているファイルの削除。
  • 既定のビルド プロセスを有効にするオプション (パッケージの復元を含む)。
  • デプロイのカスタマイズ (デプロイ スクリプトの実行など)。
  • デプロイ ログ。
  • パッケージ サイズの上限は 2,048 MB です。

詳しくは、Kudu ドキュメントをご覧ください。

注意

ZIP パッケージ内のファイルがコピーされるのは、既にデプロイされているファイルとタイムスタンプが一致しない場合のみです。 出力をキャッシュするビルド プロセスを使用して zip を生成すると、デプロイが高速になる場合があります。 詳細については、「zip ファイルまたは URL からのデプロイ」を参照してください。

ZIP パッケージを Web アプリにデプロイするには、az webapp deploy コマンドを使用します。 この CLI コマンドは、Kudu publish API を使用してファイルをデプロイするもので、完全にカスタマイズすることができます。

次に示したのは、ZIP パッケージを自分のサイトにプッシュする例です。 --src-path に、ローカル ZIP パッケージのパスを指定してください。

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>

このコマンドを実行すると、ZIP パッケージのデプロイ後にアプリが再起動されます。

Web アプリのネットワーク構成によっては、ローカル環境からサイトへの直接アクセスがブロックされる場合があります。 このシナリオでコードをデプロイするには、Web アプリからアクセス可能なストレージ システムに ZIP を公開し、Web アプリに ZIP を push するのではなく、ストレージの場所から ZIP を pull するようにアプリをトリガーするとよいでしょう。 詳細は、「本アーティクルのネットワークで保護された Web アプリへのデプロイ」を参照してください。

次の例では、サイトでどの Azure ストレージ アカウントの URL から ZIP をプルするかを --src-url パラメーターで指定します。

az webapp deploy --resource-group <grou-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3

ZIP デプロイのビルド自動化を有効にする

デプロイ エンジンは、ZIP パッケージがそのまま実行できる状態であることと、ビルド自動化は実行されないことを既定では想定しています。 Git デプロイの場合と同じビルド自動化を有効にするには、Cloud Shell で次のコマンドを実行することで、SCM_DO_BUILD_DURING_DEPLOYMENT アプリ設定を設定します。

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

詳しくは、Kudu ドキュメントをご覧ください。

使用しているアプリはデプロイ中にどうなりますか?

正式にサポートされているすべてのデプロイ メソッドは、アプリの /home/site/wwwroot フォルダー内のファイルに変更を加えます。 アプリの実行には、それらのファイルが使用されます。 したがって、ファイルがロックされていることにより、デプロイに失敗する可能性があります。 すべてのファイルが同時に更新されるわけではないため、アプリはデプロイ中に予期しない動作をすることもあります。 この動作は、顧客向けのアプリでは好ましくありません。 これらの問題を回避するにはいくつかの方法があります。

WAR、JAR、EAR パッケージをデプロイする

Azure CLI、PowerShell、または Kudu publish API を使用して、WARJAREAR のいずれかのパッケージを App Service にデプロイし、Java Web アプリを実行することができます。

パッケージは、デプロイ プロセスによって共有ファイル ドライブに正しく配置されます (Kudu publish API のリファレンスを参照)。 そのため、FTP や WebDeploy を使用して WAR、JAR、EAR の各パッケージをデプロイすることは推奨されません。

WAR パッケージを Tomcat または JBoss EAP にデプロイするには、az webapp deploy コマンドを使用します。 --src-path に、ローカル Java パッケージのパスを指定してください。

az webapp deploy --resource-group <group-name> --name <app-name> --src-path ./<package-name>.war

Web アプリのネットワーク構成によっては、ローカル環境からサイトへの直接アクセスがブロックされる場合があります。 このシナリオでコードをデプロイするには、Web アプリからアクセス可能なストレージ システムに ZIP を公開し、Web アプリに ZIP を push するのではなく、ストレージの場所から ZIP を pull するようにアプリをトリガーするとよいでしょう。 詳細は、「本アーティクルのネットワークで保護された Web アプリへのデプロイ」を参照してください。

次の例では、Web アプリでどの Azure ストレージ アカウントの URL から ZIP をプルするかを --src-url パラメーターで指定します。

az webapp deploy --resource-group <grou-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.war?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3

この CLI コマンドは、Kudu publish API を使用してパッケージをデプロイするもので、完全にカスタマイズすることができます。

個々のファイルをデプロイする

スタートアップ スクリプト、ライブラリ、静的ファイルを Web アプリにデプロイするには、--type パラメーターを指定して az webapp deploy コマンドを使用します。

この方法でスタートアップ スクリプトをデプロイした場合、App Service が自動的にそのスクリプトを使用してアプリを起動します。

この CLI コマンドは、Kudu publish API を使用してファイルをデプロイするもので、完全にカスタマイズすることができます。

スタートアップ スクリプトをデプロイする

az webapp deploy --resource group <group-name> --name <app-name> --src-path scripts/startup.sh --type=startup

ライブラリ ファイルをデプロイする

az webapp deploy --resource group <group-name> --name <app-name> --src-path driver.jar --type=lib

静的ファイルをデプロイする

az webapp deploy --resource group <group-name> --name <app-name> --src-path config.json --type=static

Kudu publish API リファレンス

publish Kudu API では、CLI コマンドと同じパラメーターを URL のクエリ パラメーターとして指定できます。 Kudu API に対して認証を行うには、アプリのデプロイ資格情報による基本認証を使用できます。

以下の表に、使用可能なクエリ パラメーターとパラメーターに指定できる値、および説明を示します。

キー 使用できる値 説明 必須
type war|jar|ear|lib|startup|static|zip デプロイする成果物の種類。これによって既定のターゲット パスが設定され、デプロイの処理方法が Web アプリに伝えられます。
- type=zip: ZIP パッケージの内容を /home/site/wwwroot に解凍することでパッケージをデプロイします。 path パラメーターは省略可能です。
- type=war: WAR パッケージをデプロイします。 既定では、WAR パッケージが /home/site/wwwroot/app.war にデプロイされます。 ターゲット パスは、path で指定できます。
- type=jar: JAR パッケージを /home/site/wwwroot/app.jar にデプロイします。 path パラメーターは無視されます
- type=ear: EAR パッケージを /home/site/wwwroot/app.ear にデプロイします。 path パラメーターは無視されます
- type=lib: JAR ライブラリ ファイルをデプロイします。 既定では、ファイルが /home/site/libs にデプロイされます。 ターゲット パスは、path で指定できます。
- type=static: 静的ファイル (スクリプトなど) をデプロイします。 既定では、ファイルが /home/site/scripts にデプロイされます。 ターゲット パスは、path で指定できます。
- type=startup: App Service によってアプリのスタートアップ スクリプトとして自動的に使用されるスクリプトをデプロイします。 既定では、D:\home\site\scripts\<name-of-source> (Windows の場合) および home/site/wwwroot/startup.sh (Linux の場合) にスクリプトがデプロイされます。 ターゲット パスは、path で指定できます。
はい String
restart true|false 既定では、デプロイ操作の後に API によってアプリが再起動されます (restart=true)。 複数の成果物をデプロイする場合は、最後のデプロイ以外はいずれも restart=false を設定して再起動を禁止します。 いいえ Boolean
clean true|false 成果物をデプロイする前に、ターゲット デプロイをクリーン (削除) するかどうかを指定します。 いいえ Boolean
ignorestack true|false publish API は WEBSITE_STACK 環境変数を使用し、実際のサイトの言語スタックに応じて安全な既定値を選択します。 このパラメーターを false に設定すると、言語固有の既定値が無効になります。 いいえ Boolean
path "<absolute-path>" 成果物のデプロイ先の絶対パス。 たとえば、"/home/site/deployments/tools/driver.jar""/home/site/scripts/helper.sh" のようになります。 いいえ String

次のステップ

高度なデプロイ シナリオの詳細については、Git を使用した Azure へのデプロイに関するページをご覧ください。 Azure への Git ベース デプロイでは、バージョン管理、パッケージの復元、MSBuild などが可能です。

その他のリソース