Azure Functions の zip デプロイZip deployment for Azure Functions

この記事では、関数アプリ プロジェクト ファイルを .zip (圧縮) ファイルから Azure にデプロイする方法について説明します。This article describes how to deploy your function app project files to Azure from a .zip (compressed) file. Azure CLI を使用する方法と REST API を使用する方法の両方について、プッシュ デプロイの方法を学習します。You learn how to do a push deployment, both by using Azure CLI and by using the REST APIs. Azure Functions Core Tools は、ローカル プロジェクトを Azure に発行するときにも、このようなデプロイメント API を使用します。Azure Functions Core Tools also uses these deployment APIs when publishing a local project to Azure.

Azure Functions には、Azure App Service によって提供されている、さまざまな継続的デプロイと統合オプションが含まれています。Azure Functions has the full range of continuous deployment and integration options that are provided by Azure App Service. 詳細については、「Azure Functions の継続的なデプロイ」を参照してください。For more information, see Continuous deployment for Azure Functions.

開発にかかる時間を短縮するには、関数アプリ プロジェクト ファイルを .zip ファイルから直接デプロイするのが手軽であると考えられます。To speed development, you may find it easier to deploy your function app project files directly from a .zip file. .zip デプロイ API は、.zip ファイルの内容を取得して、関数アプリの wwwroot フォルダーに抽出します。The .zip deployment API takes the contents of a .zip file and extracts the contents into the wwwroot folder of your function app. この .zip ファイル デプロイでは、Kudu サービスを使用することで、継続的な統合ベース デプロイを効率化できます。たとえば、次のような作業を効率化できます。This .zip file deployment uses the same Kudu service that powers continuous integration-based deployments, including:

  • 以前のデプロイから残っているファイルの削除。Deletion of files that were left over from earlier deployments.
  • デプロイのカスタマイズ (デプロイ スクリプトの実行など)。Deployment customization, including running deployment scripts.
  • デプロイ ログ。Deployment logs.
  • 従量課金プラン関数アプリ内の関数トリガーの同期。Syncing function triggers in a Consumption plan function app.

詳細については、.zip デプロイのリファレンスに関するページをご覧ください。For more information, see the .zip deployment reference.

デプロイ .zip ファイルの要件Deployment .zip file requirements

プッシュ デプロイに使用する .zip ファイルには、関数の実行に必要なすべてのファイルを含める必要があります。The .zip file that you use for push deployment must contain all of the files needed to run your function.

重要

.zip デプロイを実行した場合、既存のデプロイに含まれているファイルのうち、.zip ファイルに含まれていないものはすべて、関数アプリから削除されます。When you use .zip deployment, any files from an existing deployment that aren't found in the .zip file are deleted from your function app.

特定の関数アプリ内のすべての関数のコードは、ホスト構成ファイルと 1 つ以上のサブフォルダーを含むルート プロジェクト フォルダーにあります。The code for all the functions in a specific function app is located in a root project folder that contains a host configuration file and one or more subfolders. 各サブフォルダーには、個別の関数のコードが含まれています。Each subfolder contains the code for a separate function. フォルダー構造は、次の図のように表示されます。The folder structure is shown in the following representation:

FunctionApp
 | - host.json
 | - Myfirstfunction
 | | - function.json
 | | - ...  
 | - mysecondfunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

Functions ランタイムのバージョン 2.x では、関数アプリ内のすべての関数が同じ言語スタックを共有する必要があります。In version 2.x of the Functions runtime, all functions in the function app must share the same language stack.

host.json ファイルにはランタイム固有の構成が含まれています。このファイルは関数アプリのルート フォルダーにあります。The host.json file contains runtime-specific configurations and is in the root folder of the function app. bin フォルダーには、関数アプリに必要なパッケージやその他のライブラリ ファイルが含まれています。A bin folder contains packages and other library files that the function app requires. 関数アプリ プロジェクトの言語固有の要件を参照してください。See the language-specific requirements for a function app project:

関数アプリには、wwwroot ディレクトリ内のすべてのファイルとフォルダーが含まれています。A function app includes all of the files and folders in the wwwroot directory. .zip ファイルの展開には、wwwroot ディレクトリの内容が含まれますが、ディレクトリ自体は含まれません。A .zip file deployment includes the contents of the wwwroot directory, but not the directory itself. C# クラス ライブラリ プロジェクトをデプロイするときは、コンパイル済みのライブラリ ファイルと依存関係を .zip パケージの bin サブフォルダーに含める必要があります。When deploying a C# class library project, you must include the compiled library files and dependencies in a bin subfolder in your .zip package.

関数アプリ ファイルをダウンロードするDownload your function app files

開発作業をローカル コンピューター上で行う場合は、開発用コンピューター上の関数アプリ プロジェクト フォルダー内に .zip ファイルを作成すると、作業が簡単です。When you are developing on a local computer, it's easy to create a .zip file of the function app project folder on your development computer.

ただし、Azure Portal 内のエディターを使用して関数を作成した場合、However, you might have created your functions by using the editor in the Azure portal. 既存の関数アプリ プロジェクトは、次のいずれかの方法でダウンロードできます。You can download an existing function app project in one of these ways:

  • Azure portal から:From the Azure portal:

    1. Azure Portal にサインインし、関数アプリに移動します。Sign in to the Azure portal, and then go to your function app.

    2. [概要] タブで、 [アプリのコンテンツのダウンロードド] を選択します。On the Overview tab, select Download app content. ダウンロード オプションを選択し、 [ダウンロード] を選択します。Select your download options, and then select Download.

      関数アプリ プロジェクトのダウンロード

      ダウンロードした .zip ファイルは、.zip プッシュ デプロイを使用して関数アプリに再発行するための適切な形式になっています。The downloaded .zip file is in the correct format to be republished to your function app by using .zip push deployment. ポータルのダウンロードでは、Visual Studio で関数アプリを直接開くために必要なファイルを追加することもできます。The portal download can also add the files needed to open your function app directly in Visual Studio.

  • REST API の使用:Using REST APIs:

    <function_app> プロジェクトからファイルをダウンロードするには、以下の展開の GET API を使用します。Use the following deployment GET API to download the files from your <function_app> project:

      https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    /site/wwwroot/ を含めると、zip ファイルには関数アプリ プロジェクト ファイルのみが含まれ、サイト全体は含まれません。Including /site/wwwroot/ makes sure your zip file includes only the function app project files and not the entire site. Azure にまだサインインしていない場合は、サインインするように求められます。If you are not already signed in to Azure, you will be asked to do so.

.zip ファイルは GitHub リポジトリからダウンロードすることもできます。You can also download a .zip file from a GitHub repository. GitHub リポジトリを .zip ファイルとしてダウンロードする場合は、分岐用のフォルダー レベルが追加されます。When you download a GitHub repository as a .zip file, GitHub adds an extra folder level for the branch. この追加のフォルダー レベルは、.zip ファイルを GitHub からダウンロードする際、その .zip ファイルを直接デプロイすることはできないということを意味します。This extra folder level means that you can't deploy the .zip file directly as you downloaded it from GitHub. GitHub リポジトリを使用して関数アプリを管理している場合は、継続的インテグレーションを使用してアプリをデプロイする必要があります。If you're using a GitHub repository to maintain your function app, you should use continuous integration to deploy your app.

Azure CLI を使用したデプロイDeploy by using Azure CLI

プッシュ デプロイは、Azure CLI を使用してトリガーすることもできます。You can use Azure CLI to trigger a push deployment. その場合は、az functionapp deployment source config-zip コマンドを使用して、.zip ファイルを関数アプリにプッシュ デプロイします。Push deploy a .zip file to your function app by using the az functionapp deployment source config-zip command. このコマンドを使用するには、Azure CLI バージョン 2.0.21 以降を使用する必要があります。To use this command, you must use Azure CLI version 2.0.21 or later. 使用している Azure CLI のバージョンを確認するには、az --version コマンドを使用します。To see what Azure CLI version you are using, use the az --version command.

次のコマンドでは、<zip_file_path> プレース ホルダーを .zip ファイルの場所へのパスに置き換えてください。In the following command, replace the <zip_file_path> placeholder with the path to the location of your .zip file. また、<app_name> を、お使いの関数アプリの一意の名前に置き換えてください。Also, replace <app_name> with the unique name of your function app.

az functionapp deployment source config-zip  -g myResourceGroup -n \
<app_name> --src <zip_file_path>

このコマンドを実行すると、ダウンロードした .zip ファイル内のプロジェクト ファイルが、Azure 内の関数アプリにデプロイされます。This command deploys project files from the downloaded .zip file to your function app in Azure. その後、アプリが再起動されます。It then restarts the app. この関数アプリに対するデプロイの一覧を表示するには、REST API を使用する必要があります。To view the list of deployments for this function app, you must use the REST APIs.

Azure CLI をローカル コンピューター上で使用している場合、<zip_file_path> にはお使いのコンピューター上の .zip ファイルへのパスを指定します。When you're using Azure CLI on your local computer, <zip_file_path> is the path to the .zip file on your computer. Azure CLI は Azure Cloud Shell 内で実行することもできます。You can also run Azure CLI in Azure Cloud Shell. Cloud Shell を使用する場合は、まず、Cloud Shell に関連付けられた Azure Files アカウントに .zip ファイルをアップロードする必要があります。When you use Cloud Shell, you must first upload your deployment .zip file to the Azure Files account that's associated with your Cloud Shell. その場合は、<zip_file_path> には、Cloud Shell アカウントで使用している保存場所を指定します。In that case, <zip_file_path> is the storage location that your Cloud Shell account uses. 詳細については、「Azure Cloud Shell でファイルを永続化する」をご覧ください。For more information, see Persist files in Azure Cloud Shell.

REST API を使って ZIP ファイルを展開するDeploy ZIP file with REST APIs

展開サービス REST API を使って、.zip ファイルを Azure 内のアプリに展開できます。You can use the deployment service REST APIs to deploy the .zip file to your app in Azure. 展開するには、POST 要求を https://<アプリ名>.scm.azurewebsites.net/api/zipdeploy に送信します。To deploy, send a POST request to https://<app_name>.scm.azurewebsites.net/api/zipdeploy. POST 要求のメッセージの本文に .zip ファイルを含める必要があります。The POST request must contain the .zip file in the message body. アプリの展開資格情報は、HTTP 基本認証を使って要求で提供します。The deployment credentials for your app are provided in the request by using HTTP BASIC authentication. 詳しくは、.zip のプッシュ展開に関するページをご覧ください。For more information, see the .zip push deployment reference.

HTTP BASIC 認証では、App Service 展開資格情報が必要です。For the HTTP BASIC authentication, you need your App Service deployment credentials. 自分の展開資格情報を設定する方法については、「ユーザー レベルの資格情報の設定とリセット」を参照してください。To see how to set your deployment credentials, see Set and reset user-level credentials.

cURL を使用するWith cURL

次の例は cURL ツールを使用して .zip ファイルを展開します。The following example uses the cURL tool to deploy a .zip file. プレースホルダー <username><password><zip_file_path><app_name> を置き換えます。Replace the placeholders <username>, <password>, <zip_file_path>, and <app_name>. cURL によって要求されたら、パスワードを入力します。When prompted by cURL, type in the password.

curl -X POST -u <deployment_user> --data-binary @"<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

この要求により、アップロードされた .zip ファイルからのプッシュ展開がトリガーされます。This request triggers push deployment from the uploaded .zip file. 次の cURL の例で示すように、https://<app_name>.scm.azurewebsites.net/api/deployments エンドポイントを使うことにより、現在および過去の展開を確認できます。You can review the current and past deployments by using the https://<app_name>.scm.azurewebsites.net/api/deployments endpoint, as shown in the following cURL example. やはり、<app_name> はアプリの名前に置き換え、<deployment_user> は展開資格情報のユーザー名に置き換えます。Again, replace <app_name> with the name of your app and <deployment_user> with the username of your deployment credentials.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

PowerShell の場合With PowerShell

次の例では、Publish-AzWebapp を使用して .zip ファイルをアップロードします。The following example uses Publish-AzWebapp upload the .zip file. プレースホルダー <group-name><app-name><zip-file-path> を置き換えます。Replace the placeholders <group-name>, <app-name>, and <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

この要求により、アップロードされた .zip ファイルからのプッシュ展開がトリガーされます。This request triggers push deployment from the uploaded .zip file.

現在と過去の展開を確認するには、次のコマンドを実行します。To review the current and past deployments, run the following commands. ここでも、<deployment-user><deployment-password>、および <app-name> の各プレースホルダーを置き換えます。Again, replace the <deployment-user>, <deployment-password>, and <app-name> placeholders.

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

展開パッケージから関数を実行するRun functions from the deployment package

展開パッケージのファイルから直接関数を実行することもできます。You can also choose to run your functions directly from the deployment package file. この方法では、パッケージから関数アプリの wwwroot ディレクトリにファイルをコピーする手順がスキップされます。This method skips the deployment step of copying files from the package to the wwwroot directory of your function app. 代わりに、パッケージ ファイルが Functions ランタイムによってマウントされ、wwwroot ディレクトリの内容が読み取り専用になります。Instead, the package file is mounted by the Functions runtime, and the contents of the wwwroot directory become read-only.

zip デプロイとこの機能は統合されており、関数アプリの設定 WEBSITE_RUN_FROM_PACKAGE の値を 1 に設定することで有効にできます。Zip deployment integrates with this feature, which you can enable by setting the function app setting WEBSITE_RUN_FROM_PACKAGE to a value of 1. 詳しくは、展開パッケージ ファイルからの関数の実行に関するページをご覧ください。For more information, see Run your functions from a deployment package file.

展開のカスタマイズDeployment customization

展開プロセスでは、プッシュする .zip ファイルにはすぐに実行できる状態のアプリが含まれるものと想定されています。The deployment process assumes that the .zip file that you push contains a ready-to-run app. 既定では、カスタマイズは実行されません。By default, no customizations are run. 継続的インテグレーションで取得するものと同じビルド プロセスを有効にするには、アプリケーションの設定に以下を追加します。To enable the same build processes that you get with continuous integration, add the following to your application settings:

SCM_DO_BUILD_DURING_DEPLOYMENT=true 

.zip プッシュ展開を使うときのこの設定の既定値は false です。When you use .zip push deployment, this setting is false by default. 継続的インテグレーション展開の場合の既定値は true です。The default is true for continuous integration deployments. true に設定すると、展開の間にユーザーの展開関連の設定が使われます。When set to true, your deployment-related settings are used during deployment. これらの設定は、アプリ設定として、または .zip ファイルのルートに存在する .deployment 構成ファイルで、構成できます。You can configure these settings either as app settings or in a .deployment configuration file that's located in the root of your .zip file. 詳しくは、展開リファレンスの「Repository and deployment-related settings」(リポジトリと展開関連の設定) をご覧ください。For more information, see Repository and deployment-related settings in the deployment reference.

次の手順Next steps