App Service にファイルをデプロイする
この記事では、コードを ZIP、WAR、JAR、EAR のいずれかのパッケージとして Azure App Service にデプロイする方法について説明します。 また、アプリケーション パッケージとは別に、個々のファイルを App Service にデプロイする方法についても説明します。
前提条件
この記事の手順を完了するには、App Service アプリを作成するか、別のチュートリアルで作成したアプリを使用します。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
プロジェクトの ZIP パッケージを作成する
Note
ファイルを ZIP パッケージでダウンロードした場合は、まずファイルを抽出します。 たとえば、GitHub から ZIP パッケージをダウンロードした場合、そのファイルをそのままデプロイすることはできません。 GitHub では、入れ子になったディレクトリが追加されますが、これらは 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
コマンドの出力フォルダーです。 次のコマンドには、お使いの端末の既定のツールを使用します。
# 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 ドキュメントをご覧ください。
Note
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 をプルするようにアプリをトリガーするとよいでしょう。 詳細は、「本アーティクルのネットワークで保護された Web アプリへのデプロイ」を参照してください。
次の例では、サイトでどの Azure ストレージ アカウントの URL から ZIP をプルするかを --src-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
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 フォルダー内のファイルに変更を加えます。 アプリの実行には、それらのファイルが使用されます。 したがって、ファイルがロックされていることで、デプロイに失敗する場合があります。 すべてのファイルが同時に更新されるわけではないため、アプリはデプロイ中に予期しない動作をすることもあります。 この動作は、顧客向けのアプリでは好ましくありません。 これらの問題を回避するにはいくつかの方法があります。
- ZIP パッケージ を展開せず、ZIP パッケージから直接アプリを実行します。
- デプロイ中に、アプリを停止するか、またはアプリのオフライン モードを有効にします。 詳細については、「Dealing with locked files during deployment」 (デプロイ中にロックされているファイルに対処する) を参照してください。
- 自動スワップを有効にした状態で、ステージング スロットにデプロイします。
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
Web アプリのネットワーク構成によっては、ローカル環境からサイトへの直接アクセスがブロックされる場合があります。 このシナリオでコードをデプロイするには、Web アプリからアクセス可能なストレージ システムに ZIP を公開し、Web アプリに ZIP を push するのではなく、ストレージの場所から ZIP をプルするようにアプリをトリガーするとよいでしょう。 詳細は、「本アーティクルのネットワークで保護された Web アプリへのデプロイ」を参照してください。
次の例では、Web アプリでどの Azure ストレージ アカウントの URL から WAR をプルするかを --src-url
パラメーターで指定します。
az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.war?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3 --type 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
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/wwwroot にデプロイされます。 - 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 などが可能です。