Azure Functions のデプロイ テクノロジ

各種のテクノロジを使用して、Azure Functions プロジェクト コードを Azure にデプロイすることができます。 この記事では、使用可能なデプロイ方法の概要と、さまざまなシナリオで推奨される最適な方法について説明します。 また、基になるデプロイ テクノロジについての完全な一覧とその主要な詳細情報も提供します。

デプロイ方法

Azure の関数アプリにコードを発行するために使うデプロイ テクノロジは、特定のニーズと開発サイクルの時点によって異なります。 たとえば、開発およびテスト中であれば、Visual Studio Code などの開発ツールから直接配置します。 アプリが運用環境にある場合は、ソース管理から、または検証やテストを含む自動化された発行パイプラインを使って継続的に発行する可能性が高くなります。

次の表では、コード プロジェクトで使用できるデプロイ方法について説明します。

デプロイの種類 メソッド 最適なシナリオ
ツールベース Visual Studio Code による発行
Visual Studio による発行
Core Tools による発行
開発中のデプロイ、およびその他の即席のデプロイ。 ローカル開発ツールを使ったコードのオンデマンドのデプロイ。
App Service マネージド デプロイ センター (CI/CD)
コンテナーのデプロイ
ソース管理またはコンテナー レジストリからの継続的配置 (CI/CD)。 デプロイは、App Service プラットフォーム (Kudu) によって管理されます。
外部パイプライン Azure Pipelines
GitHub Actions
自動化されたデプロイの一部として実行する必要がある検証、テスト、その他のアクションを含む運用環境パイプライン。 デプロイはパイプラインによって管理されます。

特定のデプロイでは、特定のシナリオに基づいて最適なテクノロジを使う必要があります。 デプロイ方法の多くは、デプロイに推奨される zip デプロイに基づいています。

デプロイ テクノロジの利用可否

デプロイ方法は、関数アプリを実行するホスティング プランとオペレーティング システムによっても異なります。
現在、Functions には次の 3 つのホスティング プランが用意されています。

各プランの動作は異なります。 すべてのデプロイ テクノロジが各ホスティング プランやオペレーティング システムで使用できるわけではありません。 このグラフでは、サポートされているデプロイ テクノロジに関する情報を提供します。

デプロイ テクノロジ Windows Consumption Windows Premium Windows Dedicated Linux Consumption Linux Premium Linux Dedicated
外部パッケージ URL1
Zip デプロイ
Docker コンテナー
ソース管理
ローカル Git1
FTPS1
ポータル内編集2

1トリガーを手動で同期する必要があるデプロイ テクノロジは推奨されません。
2 コードがポータルの外部から関数アプリにデプロイされる場合、ポータル内編集は無効になります。 ポータル内編集の言語サポートの詳細など、詳細については、「言語サポートの詳細」を参照してください。

主要な概念

Azure Functions でのデプロイの動作を理解するために重要な概念がいくつかあります。

トリガーの同期

トリガーのいずれかを変更する場合、Functions インフラストラクチャにその変更を認識させる必要があります。 同期は、多くのデプロイ テクノロジでは自動的に実行されます。 ただし、場合によっては、トリガーを手動で同期する必要があります。

以下のデプロイ オプションを使用する場合は、トリガーを手動で同期する必要があります。

次の 3 つの方法のいずれかでトリガーを同期できます。

  • Azure portal で関数アプリを再起動する。
  • https://{functionappname}.azurewebsites.net/admin/host/synctriggers?code=<API_KEY>を使用して HTTP POST 要求を https://{functionappname}.azurewebsites.net/admin/host/synctriggers?code=<API_KEY> に送信する。
  • HTTP POST 要求を https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.Web/sites/<FUNCTION_APP_NAME>/syncfunctiontriggers?api-version=2016-08-01 に送信する。 プレースホルダーは、ご使用のサブスクリプション ID、リソース グループ名、および関数アプリの名前に置き換えてください。 この要求には、Authorization 要求ヘッダーアクセス トークンが必要です。

外部パッケージ URL を使用してデプロイを行う場合、パッケージが URL の変化なしで変更されたときにデプロイを完全に同期するには関数アプリを手動で再起動する必要があり、これは初期デプロイでも同様です。

関数アプリが受信ネットワーク制限によって保護されている場合、同期トリガー エンドポイントを呼び出すことができるのは、仮想ネットワーク内のクライアントだけです。

リモート ビルド

Azure Functions では、zip デプロイ後に受け取ったコードのビルドを自動的に実行できます。 これらのビルドは、アプリが Windows と Linux のどちらで実行されているかによって異なります。

Windows 上で実行されるすべての関数アプリには、小規模な管理アプリがあり、これは Kudu によって提供される scm サイトです。 このサイトで、Azure Functions のデプロイとビルドのロジックの多くが処理されます。

アプリが Windows にデプロイされると、dotnet restore (C#) や npm install (JavaScript) などの言語固有のコマンドが実行されます。

次の考慮事項は、デプロイ時にリモート ビルドを使用する場合に適用されます。

  • 従量課金プランの Linux 上で実行されている関数アプリでは、リモート ビルドがサポートされます。 ただし、これらのアプリには scm (Kudu) サイトがないため、デプロイ オプションは制限されます。
  • Premium プランまたは Dedicated (App Service) プランの Linux 上で実行されている関数アプリには、scm (Kudu) サイトがありますが、Windows と比較すると制限があります。
  • アプリが run-from-package を使用している場合は、リモート ビルドは実行されません。 このような場合にリモート ビルドを使用する方法については、「Zip デプロイ」を参照してください。
  • アプリがこの機能が利用可能になった日 (2019 年 8 月 1 日) より前に作成されている場合、リモート ビルドで問題が発生する可能性があります。 古いアプリの場合は、新しい関数アプリを作成するか、az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME> を実行して関数アプリを更新します。 このコマンドを正常に実行するには、2 回試行することが必要な場合があります。

アプリ コンテンツ ストレージ

いくつかのデプロイ方法では、関数アプリに関連付けられているストレージ アカウントに、デプロイ済みまたはビルド済みのアプリケーション ペイロードが格納されます。 Functions は構成時に Azure Files コンテンツ共有を使おうとしますが、一部のメソッドでは代わりに、AzureWebJobsStorage 接続に関連付けられた BLOB ストレージ インスタンスにペイロードを格納します。 詳細については、次のセクションで説明する各デプロイ テクノロジの "アプリ コンテンツが格納される場所" の段落を参照してください。

重要

ストレージ アカウントは、アプリケーション コード自体を含む重要なアプリ データを格納するために使用されます。 他のアプリやユーザーからのアクセスをストレージ アカウントに制限する必要があります。

デプロイ テクノロジの詳細

Azure Functions では、次のデプロイ方法が使用できます。

外部パッケージ URL

外部パッケージ URL を使用して、関数アプリが含まれるリモート パッケージ (.zip) ファイルを参照できます。 このファイルは、指定の URL からダウンロードされます。アプリは Run From Package モードで実行されます。

使用方法: アプリケーション設定に WEBSITE_RUN_FROM_PACKAGE を追加します。 この設定では、値として URL (実行する特定のパッケージ ファイルの場所) を指定する必要があります。 ポータルで、または Azure CLI を使用して設定を追加できます。

Azure Blob Storage を使用する場合は、Shared Access Signature (SAS) を備えたプライベート コンテナーを使用して、Functions にパッケージへのアクセス権を付与します。 アプリケーションが再起動されるたびに、コンテンツのコピーがフェッチされます。 アプリケーションの有効期間中は、参照が有効である必要があります。

いつ使用するか: ユーザーがリモート ビルドの発生を望まない場合、従量課金プランの Linux 上で実行される Azure Functions でサポートされるデプロイ方法は、外部パッケージ URL のみになります。 関数アプリが参照するパッケージ ファイルをデプロイするときは常に、初期デプロイを含め、トリガーを手動で同期する必要があります。 パッケージ ファイルの内容を変更して URL 自体は変更しない場合も、関数アプリを再起動してトリガーを同期する必要があります。

アプリ コンテンツが格納される場所: アプリのコンテンツは、指定された URL に格納されます。 これは、AzureWebJobsStorage 接続で指定されたストレージ アカウント内の Azure BLOB 上にある可能性があります。 一部のクライアント ツールでは、既定でこのアカウント内の BLOB にデプロイされる場合があります。 たとえば、Linux 従量課金プラン アプリの場合、Azure CLI は、AzureWebJobsStorage で指定されたアカウントの BLOB に格納されているパッケージを介してデプロイを試みます。

ZIP デプロイ

ZIP デプロイを使用して、関数アプリが含まれる ZIP ファイルを Azure にプッシュします。 必要に応じて、パッケージから実行を開始するようにアプリを設定するか、リモート ビルドを実行するように指定することができます。

使用方法: 次のお気に入りのクライアント ツールを使用してデプロイします。Visual Studio CodeVisual Studio、またはコマンド ラインを使用した Azure Functions Core Tools。 既定では、これらのツールは zip デプロイを使用し、パッケージから実行されます。 Core Tools と Visual Studio Code 拡張機能の両方で、Linux へのデプロイ時にリモート ビルドが有効になります。 .zip ファイルを関数アプリに手動でデプロイするには、.zip ファイルまたは URL からのデプロイに関する記事の指示に従います。

zip デプロイを使用してデプロイする場合は、パッケージから実行 するようにアプリを設定できます。 パッケージから実行するには、WEBSITE_RUN_FROM_PACKAGE アプリケーション設定の値を 1 に設定します。 ZIP デプロイをお勧めします。 これによりアプリケーションの読み込み時間が短縮されます。これは VS Code、Visual Studio、および Azure CLI の既定値になります。

いつ使用するか: zip デプロイは、Azure Functions で推奨されるデプロイ テクノロジです。

アプリ コンテンツが格納される場所: 既定では、zip デプロイからのアプリ コンテンツはファイル システムに格納されます。このファイル システムは、関数アプリの作成時に指定されたストレージ アカウントから Azure Files によってバックアップされる場合があります。 Linux 従量課金プランでは、アプリのコンテンツは AzureWebJobsStorage 接続で指定されたストレージ アカウントの BLOB に保持されます。

Docker コンテナー

Linux コンテナーで実行されている関数アプリをデプロイできます。

使用方法:Linux コンテナーに関数を作成し、そのコンテナーを Azure Functions または別のコンテナー ホストの Premium プランまたは Dedicated プランにデプロイします。 Azure Functions Core Tools を使用して、コンテナー化された関数アプリのビルドに使用するプロジェクトの カスタム Dockerfile を作成します。 コンテナーは、次のデプロイで使用できます。

使用するタイミング: Docker コンテナー オプションは、関数アプリが実行され、コンテナーがホストされる Linux 環境をより詳細に制御する必要がある場合に使用します。 このデプロイ メカニズムは、Linux 上で実行されている関数に対してのみ使用できます。

アプリ コンテンツが格納される場所: アプリのコンテンツは、イメージの一部として、指定されたコンテナー レジストリに格納されます。

ソース管理

関数アプリとソース コード リポジトリの間で継続的インテグレーションを実現することができます。 ソース管理が有効であると、接続されたソース リポジトリ内のコードに対する更新によって、リポジトリの最新コードのデプロイがトリガーされます。 詳細については、「Azure Functions の継続的デプロイ」を参照してください。

使用方法: ソース管理からの発行を設定する最も簡単な方法は、ポータルの Functions 領域のデプロイ センターを利用することです。 詳細については、「Azure Functions の継続的なデプロイ」を参照してください。

いつ使用するか: 関数アプリで共同作業を行うチームにとっては、ソース管理を使用することがベスト プラクティスです。 ソース管理は、より高度なデプロイ パイプラインを可能にする優れたデプロイ オプションです。 ソース管理は通常、ステージング スロットで有効にされますが、これは、リポジトリの更新の検証後に運用環境へとスワップできます。 詳細については、「Azure Functions のデプロイ スロット」を参照してください。

アプリ コンテンツが格納される場所: アプリ コンテンツはソース管理システムにありますが、ローカルに複製およびビルドされたアプリ コンテンツはアプリ ファイル システムに格納されます。これは、関数アプリの作成時に指定されたストレージ アカウントの Azure Files によってサポートされる場合があります。

ローカル Git

ローカル Git は、Git を使用して、ローカル コンピューターから Azure Functions にコードをプッシュするのに使用できます。

使用方法:Azure App Service へのローカル Git デプロイ」の指示に従ってください。

いつ使用するか: エラーの可能性を減らすために、トリガーを手動で同期するという追加の手順を必要とするデプロイ方法の使用は避けてください。 可能な場合は、zip デプロイを使います。

アプリ コンテンツが格納される場所: アプリのコンテンツはファイル システムに格納され、関数アプリの作成時に指定されたストレージ アカウントから Azure Files によってサポートされる場合があります。

FTP/S

FTP/S を使って Azure Functions にファイルを直接転送できますが、このデプロイ方法は推奨されません。 FTP を使う予定がない場合は、無効にしてください。 FTP を使用する場合は、FTPS を強制してください。 Azure portal での方法については、「FTPS を適用する」を参照してください。

使用方法:FTPS デプロイ設定の手順に従って、FTPS を使って関数アプリにデプロイするために使用できる URL と資格情報を取得します。

いつ使用するか: エラーの可能性を減らすために、トリガーを手動で同期するという追加の手順を必要とするデプロイ方法の使用は避けてください。 可能な場合は、zip デプロイを使います。

アプリ コンテンツが格納される場所: アプリのコンテンツはファイル システムに格納され、関数アプリの作成時に指定されたストレージ アカウントから Azure Files によってサポートされる場合があります。

ポータルでの編集

ポータルベースのエディターでは、関数アプリ内のファイルを直接編集できます (基本的には、変更内容を保存するたびにデプロイされます)。

使用方法:Azure portal で関数を編集できるようにするために、ポータルで関数を作成しておく必要があります。 単一の信頼できるソースを保持するため、他のデプロイ方法を使用して、関数を読み取り専用にし、ポータルで編集できないようにします。 Azure portal でファイルを編集できる状態に戻すには、編集モードを Read/Write に手動で戻し、デプロイ関連のアプリケーション設定 (WEBSITE_RUN_FROM_PACKAGE など) をすべて削除します。

いつ使用するか: Azure Functions の使用を開始するには、ポータルが適しています。 より高度な開発作業を行うには、次のクライアント ツールのいずれかを使用することをお勧めします。

アプリ コンテンツが格納される場所: アプリのコンテンツはファイル システムに格納され、関数アプリの作成時に指定されたストレージ アカウントから Azure Files によってサポートされる場合があります。

次の表に、ポータル内編集をサポートしているオペレーティング システムと言語を示します。

Language Windows Consumption Windows Premium Windows Dedicated Linux Consumption Linux Premium Linux Dedicated
C#1
Java
JavaScript (Node.js)JavaScript (Node.js)
Python2
PowerShell
TypeScript (Node.js)

1 ポータル内編集がサポートされているのは C# スクリプト ファイルだけであり、これらはホストでのインプロセスで実行されます。 詳細については、Azure Functions C# スクリプト (.csx) 開発者向けリファレンスを参照してください。
2 ポータル内編集は、v1 Python プログラミング モデルでのみサポートされます。

デプロイ動作

関数アプリ コードに更新プログラムをデプロイすると、現在実行中の関数は終了します。 デプロイが完了すると、新しいコードが読み込まれ、要求の処理が開始されます。 ステートレスな関数と防御的な関数を記述する方法については、「Azure Functions のパフォーマンスと信頼性の向上」を参照してください。

この移行をさらに制御する必要がある場合、デプロイ スロットを使用してください。

デプロイ スロット

関数アプリを Azure にデプロイする場合、運用環境に直接デプロイする代わりに、個別のデプロイ スロットにデプロイできます。 デプロイ スロットにデプロイしてから、検証後に運用環境にスワップすることが、継続的デプロイを構成するための推奨方法です。

スロットにデプロイする方法は、使用する具体的なデプロイ ツールによって異なります。 たとえば、Azure Functions Core Tools を使用する場合は、func azure functionapp publish コマンドに対して特定のスロットの名前を指定するために --slot オプションを含めます。

デプロイ スロットの詳細については、Azure Functions のデプロイ スロットのドキュメントをご覧ください。

次のステップ

関数アプリのデプロイの詳細については、次の記事を参照してください。