App Service にファイルをデプロイする
Note
2024 年 6 月 1 日より、新しく作成されたすべての App Service アプリには、名前付け規則 <app-name>-<random-hash>.<region>.azurewebsites.net
を使用して一意の既定のホスト名を生成するオプションがあります。 既存のアプリ名は変更されません。
例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
詳細については、App Service リソースの一意の既定のホスト名に関するページを参照してください。
この記事では、コードを ZIP、WAR、JAR、EAR のいずれかのパッケージとして Azure App Service にデプロイする方法について説明します。 また、アプリケーション パッケージとは別に、個々のファイルを App Service にデプロイする方法についても説明します。
前提条件
この記事の手順を完了するには、App Service アプリを作成するか、別のチュートリアルで作成したアプリを使用します。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
プロジェクトの ZIP パッケージを作成する
重要
デプロイ用の ZIP パッケージを作成するときは、ルート ディレクトリは含めず、その中のファイルとディレクトリのみを含めるようにしてください。 GitHub リポジトリを ZIP ファイル形式でダウンロードした場合、そのファイルをそのまま App Service にデプロイすることはできません。 GitHub によって ZIP 内に追加されるディレクトリ入れ子構造が App Service に適合しないためです。
ローカル ターミナル ウィンドウで、アプリ プロジェクトのルート ディレクトリに移動します。
このディレクトリには、Web アプリへの入力ファイルを含める必要があります (index.html、 index.php、app.js など)。 パッケージ管理ファイルを含めることもできます (project.json、composer.json、package.json、bower.json、requirements.txt など)。
デプロイの自動化を App Service で自動的に実行したい場合を除き、すべてのビルド タスク (npm
、bower
、gulp
、composer
、pip
など) を実行し、アプリの実行に必要なファイルがすべて揃っていることを確認してください。 パッケージを直接実行したい場合、この手順は必須です。
プロジェクト内のすべての ZIP アーカイブを作成します。 dotnet
プロジェクトの場合、これは、dotnet publish
コマンドの出力ディレクトリ内に含まれる内容全体 (出力ディレクトリ自体を除く) を意味します。 たとえば、現在のディレクトリに含まれる内容から ZIP パッケージを作成するには、ターミナルで以下のコマンドを実行します。
# 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 です。
Note
ZIP パッケージ内のファイルがコピーされるのは、既にデプロイされているファイルとタイムスタンプが一致しない場合のみです。
Kudu の ZIP デプロイ UI を使用する
ブラウザーで、https://<app_name>.scm.azurewebsites.net/ZipDeployUI
に移動します (上部の注を参照)。
「プロジェクトの ZIP パッケージを作成する」で作成した ZIP パッケージを、Web ページ上のエクスプローラー領域にドラッグしてアップロードします。
デプロイの進行中、右上隅のアイコンにその進行状況がパーセンテージで表示されます。 また、ページのエクスプローラー領域の下に、操作に関する詳細なメッセージも表示されます。 デプロイが完了すると、最後に Deployment successful
というメッセージが表示されるはずです。
現在、上記のエンドポイントは Linux App Services では機能しません。 代わりに、FTP または ZIP デプロイ API の使用を検討してください。
Kudu の ZIP デプロイ UI を使用しない
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 パッケージのデプロイ後にアプリが再起動されます。
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 ドキュメントをご覧ください。
WAR、JAR、EAR パッケージをデプロイする
Azure CLI、PowerShell、または Kudu publish API を使用して、WAR、JAR、EAR のいずれかのパッケージを 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
この 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
ネットワークで保護されたアプリにデプロイする
Web アプリのネットワーク構成によっては、開発環境からアプリへの直接アクセスがブロックされる場合があります (「ネットワークで保護されたサイトへのデプロイ」と「ネットワークで保護されたサイトへのデプロイ、パート 2」をご覧ください)。 パッケージまたはファイルを Web アプリに直接プッシュする代わりに、Web アプリからアクセスできるストレージ システムにそれを発行し、アプリをトリガーしてストレージの場所から ZIP をプルできます。
リモート URL はパブリックにアクセスできるどのような場所でもかまいませんが、BLOB ストレージ コンテナーを使い、SAS キーでそれを保護するのが最善です。
他のセクションと同様に az webapp deploy
コマンドを使いますが、--src-path
ではなく --src-url
を使います。 次の例では、--src-url
パラメーターを使って、Azure ストレージ アカウントでホストされている ZIP ファイルの URL を指定します。
az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3 --type zip
Kudu publish API リファレンス
publish
Kudu API では、CLI コマンドと同じパラメーターを URL のクエリ パラメーターとして指定できます。 Kudu REST API で認証を行うには、トークン認証を使うのが最善ですが、アプリのデプロイ資格情報を使って基本認証を使うこともできます。
次の表では、使用できるクエリ パラメーター、指定できる値、説明を示します。
キー | 使用できる値 | 説明 | 必須 | 型 |
---|---|---|---|---|
type |
war |jar |ear |lib |startup |static |zip |
デプロイする成果物の種類。これによって既定のターゲット パスが設定され、デプロイの処理方法が Web アプリに伝えられます。 - type=zip : ZIP パッケージの内容を /home/site/wwwroot に解凍することでパッケージをデプロイします。 target-path パラメーターは省略可能です。 - type=war : WAR パッケージをデプロイします。 既定では、WAR パッケージが /home/site/wwwroot/app.war にデプロイされます。 ターゲット パスは、target-path で指定できます。 - type=jar : JAR パッケージを /home/site/wwwroot/app.jar にデプロイします。 target-path パラメーターは無視されます - type=ear : EAR パッケージを /home/site/wwwroot/app.ear にデプロイします。 target-path パラメーターは無視されます - type=lib : JAR ライブラリ ファイルをデプロイします。 既定では、ファイルが /home/site/libs にデプロイされます。 ターゲット パスは、target-path で指定できます。 - type=static : 静的ファイル (スクリプトなど) をデプロイします。 既定では、ファイルが /home/site/wwwroot にデプロイされます。 - type=startup : App Service によってアプリのスタートアップ スクリプトとして自動的に使用されるスクリプトをデプロイします。 既定では、D:\home\site\scripts\<name-of-source> (Windows の場合) および home/site/wwwroot/startup.sh (Linux の場合) にスクリプトがデプロイされます。 ターゲット パスは、target-path で指定できます。 |
はい | String |
restart |
true |false |
既定では、デプロイ操作の後に API によってアプリが再起動されます (restart=true )。 複数の成果物をデプロイする場合は、最後のデプロイ以外はいずれも restart=false を設定して再起動を禁止します。 |
いいえ | Boolean |
clean |
true |false |
成果物をデプロイする前に、ターゲット デプロイをクリーン (削除) するかどうかを指定します。 | いいえ | Boolean |
ignorestack |
true |false |
publish API は WEBSITE_STACK 環境変数を使用し、実際のサイトの言語スタックに応じて安全な既定値を選択します。 このパラメーターを false に設定すると、言語固有の既定値が無効になります。 |
いいえ | Boolean |
target-path |
絶対パス | 成果物のデプロイ先の絶対パス。 たとえば、"/home/site/deployments/tools/driver.jar" 、"/home/site/scripts/helper.sh" のようになります。 |
いいえ | String |
次のステップ
高度なデプロイ シナリオの詳細については、Git を使用した Azure へのデプロイに関するページをご覧ください。 Azure への Git ベース デプロイでは、バージョン管理、パッケージの復元、MSBuild などが可能です。