ZIP パッケージから Azure App Service のアプリを直接実行するRun your app in Azure App Service directly from a ZIP package

Azure App Service では、デプロイ ZIP パッケージ ファイルから直接アプリを実行できます。In Azure App Service, you can run your apps directly from a deployment ZIP package file. この記事では、アプリでこの機能を有効にする方法を示します。This article shows how to enable this functionality in your app.

App Service での他のすべてのデプロイ方法には共通点があります。ファイルは、アプリの D:\home\site\wwwroot にデプロイされます (または、Linux アプリの場合は /home/site/wwwroot)。All other deployment methods in App Service have something in common: your files are deployed to D:\home\site\wwwroot in your app (or /home/site/wwwroot for Linux apps). 同じディレクトリが実行時にアプリによって使用されるので、ファイル ロックの競合によってデプロイが失敗する可能性があります。また、一部のファイルがまだ更新されていないため、アプリが予期しない動作をする可能性があります。Since the same directory is used by your app at runtime, it's possible for deployment to fail because of file lock conflicts, and for the app to behave unpredictably because some of the files are not yet updated.

これに対して、パッケージから直接実行すると、パッケージ内のファイルは wwwroot ディレクトリにコピーされません。In contrast, when you run directly from a package, the files in the package are not copied to the wwwroot directory. 代わりに、ZIP パッケージ自体が読み取り専用の wwwroot ディレクトリとして直接マウントされます。Instead, the ZIP package itself gets mounted directly as the read-only wwwroot directory. パッケージから直接実行すると、いくつかのメリットがあります。There are several benefits to running directly from a package:

  • デプロイとランタイムの間でファイル ロックの競合がなくなります。Eliminates file lock conflicts between deployment and runtime.
  • 常に、完全にデプロイされたアプリのみが実行されることが保証されます。Ensures only full-deployed apps are running at any time.
  • 運用環境のアプリにデプロイできます (再起動が必要です)。Can be deployed to a production app (with restart).
  • Azure Resource Manager デプロイのパフォーマンスが向上します。Improves the performance of Azure Resource Manager deployments.
  • 特に大規模な npm パッケージのツリーの JavaScript 関数の場合、コールド スタート時間を減らすことができます。May reduce cold-start times, particularly for JavaScript functions with large npm package trees.

注意

現時点では、ZIP パッケージ ファイルのみがサポートされています。Currently, only ZIP package files are supported.

プロジェクトの ZIP ファイルを作成するCreate a project ZIP file

注意

ファイルを ZIP ファイルでダウンロードした場合は、まずファイルを抽出します。If you downloaded the files in a ZIP file, extract the files first. たとえば、GitHub から ZIP ファイルをダウンロードした場合、そのファイルをそのままデプロイすることはできません。For example, if you downloaded a ZIP file from GitHub, you cannot deploy that file as-is. GitHub では、入れ子になったディレクトリが追加されますが、これらは App Service と連携しません。GitHub adds additional nested directories, which do not work with App Service.

ローカル ターミナル ウィンドウで、アプリ プロジェクトのルート ディレクトリに移動します。In a local terminal window, navigate to the root directory of your app project.

このディレクトリには、Web アプリへの入力ファイルを含める必要があります (index.htmlindex.phpapp.js など)。This directory should contain the entry file to your web app, such as index.html, index.php, and app.js. パッケージ管理ファイルを含めることもできます (project.jsoncomposer.jsonpackage.jsonbower.jsonrequirements.txt など)。It can also contain package management files like project.json, composer.json, package.json, bower.json, and requirements.txt.

デプロイの自動化を App Service で自動的に実行したい場合を除き、すべてのビルド タスク (npmbowergulpcomposerpip など) を実行し、アプリの実行に必要なファイルがすべて揃っていることを確認してください。Unless you want App Service to run deployment automation for you, run all the build tasks (for example, npm, bower, gulp, composer, and pip) and make sure that you have all the files you need to run the app. パッケージを直接実行したい場合、この手順は必須です。This step is required if you want to run your package directly.

プロジェクト内のすべての ZIP アーカイブを作成します。Create a ZIP archive of everything in your project. dotnet プロジェクトの場合、このフォルダーは dotnet publish コマンドの出力フォルダーです。For dotnet projects, this folder is the output folder of the dotnet publish command. 次のコマンドには、お使いの端末の既定のツールを使用します。The following command uses the default tool in your terminal:

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

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

パッケージからの実行を有効にするEnable running from package

WEBSITE_RUN_FROM_PACKAGE アプリ設定により、パッケージから実行できるようになります。The WEBSITE_RUN_FROM_PACKAGE app setting enables running from a package. それを設定するには、Azure CLI で次のコマンドを実行します。To set it, run the following command with Azure CLI.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

WEBSITE_RUN_FROM_PACKAGE="1" を使用すると、アプリに対してローカルなパッケージからアプリを実行できます。WEBSITE_RUN_FROM_PACKAGE="1" lets you run your app from a package local to your app. リモート パッケージから実行することもできます。You can also run from a remote package.

パッケージの実行Run the package

App Service でパッケージを実行する最も簡単な方法は、Azure CLI の az webapp deployment source config-zip コマンドを使用することです。The easiest way to run a package in your App Service is with the Azure CLI az webapp deployment source config-zip command. 次に例を示します。For example:

az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <filename>.zip

WEBSITE_RUN_FROM_PACKAGE アプリ設定が設定されているため、このコマンドではパッケージの内容がアプリの D:\home\site\wwwroot ディレクトリに抽出されません。Because the WEBSITE_RUN_FROM_PACKAGE app setting is set, this command doesn't extract the package content to the D:\home\site\wwwroot directory of your app. 代わりに、ZIP ファイルがそのまま D:\home\data\SitePackages にアップロードされ、同じディレクトリに packagename が作成されます。それには、実行時に読み込む ZIP パッケージの名前が含まれています。Instead, it uploads the ZIP file as-is to D:\home\data\SitePackages, and creates a packagename.txt in the same directory, that contains the name of the ZIP package to load at runtime. ZIP パッケージを別の方法 (FTP など) でアップロードした場合は、D:\home\data\SitePackages ディレクトリと packagename ファイルを手動で作成する必要があります。If you upload your ZIP package in a different way (such as FTP), you need to create the D:\home\data\SitePackages directory and the packagename.txt file manually.

また、このコマンドではアプリが再起動されます。The command also restarts the app. WEBSITE_RUN_FROM_PACKAGE が設定されているため、App Service では、アップロードされたパッケージが読み取り専用の wwwroot ディレクトリとしてマウントされ、そのマウントされたディレクトリからアプリが直接実行されます。Because WEBSITE_RUN_FROM_PACKAGE is set, App Service mounts the uploaded package as the read-only wwwroot directory and runs the app directly from that mounted directory.

代わりに外部 URL から実行するRun from external URL instead

Azure Blob Storage などの外部 URL からパッケージを実行することもできます。You can also run a package from an external URL, such as Azure Blob Storage. Azure Storage Explorer を使用して、パッケージ ファイルを Blob Storage アカウントにアップロードします。You can use the Azure Storage Explorer to upload package files to your Blob storage account. Shared Access Signature (SAS) 付きのプライベート ストレージ コンテナーを使用して、App Service ランタイムがパッケージに安全にアクセスできるようにする必要があります。You should use a private storage container with a Shared Access Signature (SAS) to enable the App Service runtime to access the package securely.

ファイルを Blob Storage にアップロードし、ファイルの SAS URL を取得したら、WEBSITE_RUN_FROM_PACKAGE アプリ設定を URL に設定します。Once you upload your file to Blob storage and have an SAS URL for the file, set the WEBSITE_RUN_FROM_PACKAGE app setting to the URL. 次の例では、Azure CLI を使用してそれを行っています。The following example does it by using Azure CLI:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="https://myblobstorage.blob.core.windows.net/content/SampleCoreMVCApp.zip?st=2018-02-13T09%3A48%3A00Z&se=2044-06-14T09%3A48%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=bNrVrEFzRHQB17GFJ7boEanetyJ9DGwBSV8OM3Mdh%2FM%3D"

更新されたパッケージを同じ名前で Blob Storage に発行する場合は、更新されたパッケージが App Service に読み込まれるように、アプリを再起動する必要があります。If you publish an updated package with the same name to Blob storage, you need to restart your app so that the updated package is loaded into App Service.

トラブルシューティングTroubleshooting

  • パッケージから直接実行すると、wwwroot は読み取り専用になります。Running directly from a package makes wwwroot read-only. アプリがこのディレクトリにファイルを書き込もうとすると、エラーが発生します。Your app will receive an error if it tries to write files to this directory.
  • TAR および GZIP 形式はサポートされていません。TAR and GZIP formats are not supported.
  • この機能は、ローカル キャッシュと互換性がありません。This feature is not compatible with local cache.
  • コールドスタートのパフォーマンスを向上するには、ローカルの Zip オプション (WEBSITE_RUN_FROM_PACKAGE = 1) を使用します。For improved cold-start performance, use the local Zip option (WEBSITE_RUN_FROM_PACKAGE=1).

その他のリソースMore resources