複数の異なるテクノロジを使用して、Azure Functions プロジェクト コードをAzureにデプロイできます。 この記事では、使用可能なデプロイ方法の概要と、さまざまなシナリオで推奨される最適な方法について説明します。 また、基になるデプロイ テクノロジに関する包括的な一覧と重要な詳細も提供します。
デプロイ方法
Azureでコードを関数アプリに発行するために使用するデプロイ テクノロジは、開発サイクルの特定のニーズとポイントによって異なります。 たとえば、開発中やテスト中に、Visual Studio Codeなどの開発ツールから直接デプロイできます。 アプリが運用環境にある場合は、ソース管理から、または検証やテストを含む自動化された発行パイプラインを使って継続的に発行する可能性が高くなります。
次の表では、コード プロジェクトで使用できるデプロイ方法について説明します。
| デプロイの種類 | メソッド | 最適なシナリオ |
|---|---|---|
| ツールベース | • Azure CLI • Visual Studio Code publish • Visual Studio publish • Core Tools による発行 |
開発中のデプロイ、およびその他の即席のデプロイ。 ローカル開発ツールを使用してコードをオンデマンドでデプロイする。 |
| App Service マネージド | • デプロイ センター (CI/CD) • コンテナーのデプロイ |
ソース管理またはコンテナー レジストリからの継続的配置 (CI/CD)。 App Service プラットフォーム (Kudu) によってデプロイが管理されます。 |
| 外部パイプライン | • Azure Pipelines • GitHub Actions |
自動デプロイの一部として実行する必要がある検証、テスト、その他のアクションを含む運用パイプライン。 パイプラインによってデプロイが管理されます。 |
特定のシナリオに最適なテクノロジを使用します。 デプロイ方法の多くは、デプロイに推奨される zip デプロイに基づいています。
デプロイ テクノロジの利用可否
デプロイ方法は、関数アプリを実行するホスティング プランとオペレーティング システムによっても異なります。
現在、Functions には、関数アプリをホストするための 5 つのオプションが用意されています。
各プランの動作は異なります。 すべてのデプロイ テクノロジが各ホスティング プランやオペレーティング システムで使用できるわけではありません。 このグラフに、サポートされているデプロイ テクノロジに関する情報を示します。
| デプロイ テクノロジ | Flex 従量課金 | 従量課金 | エラスティック Premium | Dedicated | Container Apps |
|---|---|---|---|---|---|
| OneDeploy | ✔ | ||||
| Zip デプロイ | ✔ | ✔ | ✔ | ||
| 外部パッケージ URL1 | ✔ | ✔ | ✔ | ||
| Docker コンテナー | Linux のみ | Linux のみ | Linux のみ | ✔ | |
| ソース管理 | Windowsのみ | ✔ | ✔ | ||
| ローカル Git1 | Windowsのみ | ✔ | ✔ | ||
| FTPS1 | Windowsのみ | ✔ | ✔ | ||
| ポータル内編集2 | ✔ | ✔ | ✔ |
1トリガーを手動で同期する必要があるデプロイ テクノロジは推奨されません。
2 コードがポータルの外部から関数アプリにデプロイされる場合、ポータル内編集は無効になります。 ポータル内編集の言語サポートの詳細など、詳細については、「言語サポートの詳細」を参照してください。
主要な概念
Azure Functionsでのデプロイのしくみを理解するには、いくつかの重要な概念が重要です。
トリガーの同期
トリガーのいずれかを変更する場合、Functions インフラストラクチャにその変更を認識させる必要があります。 同期は、多くのデプロイ テクノロジでは自動的に実行されます。 ただし、場合によっては、トリガーを手動で同期する必要があります。
これらのデプロイ オプションを使用する場合は、常にトリガーを手動で同期する必要があります。
トリガーは、次のいずれかの方法で手動で同期できます。
Azure ポータルで関数アプリを再起動します。 Functions ホストは、アプリケーションの起動後にバックグラウンド トリガー同期を実行します。
次の例のように、
az restコマンドを使用して、syncfunctiontriggersAPI を呼び出す HTTP POST 要求を送信します。az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
同期トリガー操作では、次の考慮事項に注意してください。
- 同じ外部パッケージ URL を使用して、更新されたバージョンのデプロイ パッケージをデプロイするたびに、関数アプリを手動で再起動する必要があります。
- 従量課金プランまたは Elastic Premium プランで実行されているアプリの場合は、次のシナリオでも トリガーを手動で同期する 必要があります。
- ARM テンプレート、Bicep、または Terraform ファイルを使用したリソースマネージャーに基づくデプロイメントで外部パッケージのURLを使用する場合。
- 同じ外部パッケージ URL を使用して、インプレースで配置パッケージを更新する場合。
- 既存の関数アプリにネットワーク制限を追加する場合は、
AzureWebJobsStorageアプリ設定で設定された既定のホスト ストレージ アカウントへの接続を保証する必要があります。 詳細については、「Azure Functions を参照してください。
リモート ビルド
配置中にコード プロジェクトのリモート ビルドを実行するようにAzure Functionsを要求できます。 これらのシナリオでは、ローカルでビルドするのではなく、リモート ビルドを要求します。
- Windows コンピューターで開発した Linux ベースの関数アプリにアプリをデプロイします。 この状況は、一般的にPythonアプリ開発の場合です。 Windowsでローカルに配置パッケージをビルドすると、最終的に不適切なライブラリが発生する可能性があります。
- プロジェクトに、カスタム パッケージ インデックスへの依存関係がある。
- 展開パッケージのサイズを小さくする必要がある。
リモート ビルドを要求する方法は、アプリが Windows または Linux でAzureで実行されているかどうかによって異なります。
Windowsで実行されているすべての関数アプリには、scm によって提供される サイトという小規模な管理アプリがあります。 このサイトでは、Azure Functionsのデプロイとビルド ロジックの多くを処理します。
Windowsにアプリをデプロイすると、dotnet restore (C#) や npm install (JavaScript) など、言語固有のコマンドが実行されます。
次の考慮事項は、デプロイ時にリモート ビルドを使用する場合に適用されます。
- 従量課金プランの Linux 上で実行されている関数アプリでは、リモート ビルドがサポートされます。 ただし、これらのアプリには
scm(Kudu) サイトがないため、デプロイ オプションは制限されます。 Premium プラン またはDedicated (App Service) プラン で Linux 上で実行される関数アプリには(Kudu) サイトがありますが、Windows に比べて制限があります。 - アプリで パッケージからの実行を使用する場合、リモート ビルドは発生しません。 このような場合にリモート ビルドを使用する方法については、「Zip デプロイ」を参照してください。
- 機能が利用可能になる前にアプリが作成されたときに、リモート ビルドに問題が発生する可能性があります (2019 年 8 月 1 日)。 古いアプリの場合は、新しい関数アプリを作成するか、
az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME>を実行して関数アプリを更新します。 このコマンドを正常に実行するには、2 回試行することが必要な場合があります。
アプリ コンテンツ ストレージ
パッケージ ベースのデプロイメソッドは、 AzureWebJobsStorage 設定で定義されている関数アプリに関連付けられたストレージ アカウントにパッケージを格納します。 使用可能な場合、従量課金プランアプリと Elastic Premium プラン アプリは、このアカウントからAzure Files コンテンツ共有を使用しようとしますが、別の場所でパッケージを維持することもできます。 Flex Consumption プラン アプリでは、デプロイに使用する別のストレージ アカウントを構成しない限り、既定 のストレージ アカウントでストレージ コンテナーが使用されます。 詳細については、次のセクションの中で説明する各デプロイ テクノロジの「アプリ コンテンツが格納される場所」の詳細を確認してください。
重要
ストレージ アカウントは、重要なアプリ データを格納するために使用されます。このデータには、アプリケーション コード自体が含まれることがあります。 他のアプリやユーザーによるストレージ アカウントへのアクセスを制限する必要があります。
セキュリティで保護された仮想ネットワーク
関数アプリで プライベート エンドポイント が有効になっていて、パブリック ネットワーク アクセスが無効になっている場合、 scm (Kudu) 展開サイトにパブリックに到達できません。 関数アプリで使用されるストレージ アカウントもプライベート エンドポイントの背後で保護されている場合、ストレージにアクセスする必要があるテクノロジも同様にブロックされます。 これらの制限により、この記事で説明するデプロイ テクノロジは、仮想ネットワークの外部から完全にネットワークで保護された関数アプリに到達できません。
ネットワークで保護された関数アプリにコードをデプロイするには、デプロイ ツールに仮想ネットワークへの接続が必要です。 この接続は、次の方法で実現できます。
- Azure パイプラインからデプロイする場合は、仮想ネットワークにアクセスできる自身でホストされるエージェントを使用するか管理された DevOps エージェント プールをネットワークで構成します。
- GitHub ワークフローからデプロイする場合は、
自身がホストするランナー を使用して仮想ネットワークにアクセスするか、Azure仮想ネットワークでGitHub ホストランナーを構成します。 - ポイント対サイト VPN または ExpressRoute を使用して、開発マシンを仮想ネットワークに接続します。
仮想ネットワークで関数アプリを構成する方法の詳細については、「仮想ネットワークを使用してAzure Functionsを構成する方法を参照してください。
デプロイ テクノロジの詳細
Azure Functionsでは、次のデプロイ方法を使用できます。 各ホスティング プランでサポートされるテクノロジを決定するには、 デプロイ テクノロジの可用性 の表を参照してください。
OneDeploy
1 つのデプロイは、 Flex Consumption プランのアプリでサポートされている唯一のデプロイ テクノロジです。 最終的な結果は、関数アプリがその上で実行される、すぐに実行できる .zip パッケージです。
Visual Studio Code 発行機能を使用してデプロイするか、Azure Functions Core Tools またはAzure CLI を使用してコマンド ラインからデプロイします。Azure DevOps タスク とGitHub Actions は同様に、Flex Consumption アプリにデプロイが検出されると、1 回のデプロイを活用します。Flex Consumption アプリを作成するときは、デプロイ ストレージ (BLOB) コンテナーと、それに対する認証方法を指定する必要があります。 既定では、
AzureWebJobsStorage接続と同じストレージ アカウントが使用され、認証方法として接続文字列が使用されます。 したがって、デプロイ設定は、アプリケーション設定を必要とせず、アプリの作成時に構成されます。
使用するタイミング: 1 つのデプロイは、Flex 従量課金プランで実行されている関数アプリで使用できる唯一のデプロイ テクノロジです。
アプリ コンテンツが格納される場所: Flex 従量課金関数アプリを作成する際に、デプロイ ストレージ コンテナーを指定します。 この BLOB コンテナーは、デプロイしたアプリ コンテンツをツールがアップロードする場所です。 場所を変更するには、Azure ポータルの [展開設定] ブレードにアクセスするか、Azure CLIを使用します。
ヒント
Flex Consumption Deployment 診断ツールは、Azure ポータルで使用できます。 Flex Consumption アプリを開き、[ 問題の診断と解決] を選択して、 Flex Consumption Deploymentを検索します。 このツールには、デプロイ履歴、パッケージの状態、トラブルシューティングの推奨事項など、デプロイに関する詳細情報が表示されます。
ZIP デプロイ
Zip デプロイは、従量課金、Elastic Premium、App Service (Dedicated) プラン上の関数アプリで、既定かつおすすめのデプロイ テクノロジです。 最終的な結果は、関数アプリがその上で実行される、すぐに実行できる .zip パッケージです。 外部 パッケージの URL とは異なり、プラットフォームはアプリ コンテンツのリモートビルドと格納を担当します。
それを使用する方法: お気に入りのクライアント ツールを使用してデプロイする: Visual Studio CodeVisual Studio、または Azure Functions Core Tools または Azure CLI を使用してコマンド ラインから実行します。
Azure Dev Ops タスク とGitHub Action 同様に zip デプロイを活用します。zip デプロイを使用してデプロイする場合は、パッケージから実行 するようにアプリを設定できます。 パッケージから実行するには、
WEBSITE_RUN_FROM_PACKAGEアプリケーション設定の値を1に設定します。 ZIP デプロイをお勧めします。 アプリケーションの読み込み時間が短縮され、VS Code、Visual Studio、およびAzure CLIの既定値になります。
使用する場合: Zip デプロイは、Windows従量課金プラン、Windows および Linux Elastic Premium プラン、および Windows および Linux App Service (Dedicated) プランの関数アプリの既定の推奨デプロイ テクノロジです。
アプリのコンテンツが格納されている場所: zip デプロイによるアプリ コンテンツは、既定でファイル システムに格納されます。Azureがストレージ アカウントからAzure Filesを通じてこれをサポートする可能性がありますが、これは関数アプリの作成時に指定したアカウントです。 Linux Consumption では、アプリのコンテンツは代わりに、
AzureWebJobsStorageアプリ設定で指定されたストレージ アカウント内の BLOB に保持され、アプリ設定WEBSITE_RUN_FROM_PACKAGEは BLOB URL の値を受け取ります。
外部パッケージ URL
外部パッケージ URL は、デプロイの実行方法を手動で制御する場合のオプションです。 ビルドされたアプリ コンテンツを含む、すぐに実行できる .zip パッケージを Blob Storage にアップロードし、この外部 URL を関数アプリ上のアプリケーション設定として参照するのは、ユーザーの責任になります。 アプリは、再起動するたびにそのパッケージをフェッチしてマウントし、パッケージから実行モードで実行します。
使用方法: アプリケーション設定に
WEBSITE_RUN_FROM_PACKAGEを追加します。 この設定の値は、アプリが実行する特定のパッケージの場所を指す、BLOB URL である必要があります。 ポータルまたはAzure CLIを使用して設定を追加できます。Azure Blob Storageを使用する場合、関数アプリはマネージド ID ベースの接続を使用するか、共有アクセス署名 (SAS)を使用してコンテナーにアクセスできます。 選択するオプションは、
WEBSITE_RUN_FROM_PACKAGEの値として使用する URL の種類に影響します。 全体的なセキュリティのためには、マネージド ID がおすすめです。SAS トークンでは有効期限が切れて、手動で管理する必要があるためです。関数アプリが参照するパッケージ ファイルをデプロイするときは常に、初期デプロイを含め、トリガーを手動で同期する必要があります。 パッケージ ファイルの内容を変更して URL 自体は変更しない場合も、関数アプリを再起動してトリガーを同期する必要があります。 このデプロイ テクノロジに関する構成については、使用法ガイドを参照してください。
使用するタイミング:リモート ビルドを実行したくない場合、Linux 従量課金プラン上で実行されているアプリでサポートされているデプロイ方法は外部パッケージ URL のみです。 この方法は、Azure Files を使用せずにアプリを作成><場合にも推奨されるデプロイ テクノロジです。 Linux 上で実行されているスケーラブルなアプリの場合は、代わりに Flex 従量課金プラン ホスティングを検討する必要があります。
アプリ コンテンツが格納される場所: アプリコンテンツを BLOB ストレージにアップロードするのはユーザーの責任になります。 Azure Blob Storageをお勧めしますが、任意の BLOB ストレージ アカウントを使用できます。
Docker コンテナー
Linux コンテナーで実行されている関数アプリをデプロイできます。
それを使用する方法: Linux コンテナーに関数を作成しAzure Functionsまたは別のコンテナー ホストの Premium または Dedicated プランにコンテナーをデプロイします。 Azure Functions Core Tools を使用して、コンテナー化された関数アプリのビルドに使用するプロジェクト用にカスタマイズされた Dockerfile を作成します。 コンテナーは、次のデプロイで使用できます。
- Azure ポータルで作成したAzure Functionsリソースにデプロイします。 詳細については、「Azure コンテナーを使用したポータルの作成を参照してください。
- コマンド ラインから作成Azure Functionsリソースにデプロイします。 Premium または Dedicated (App Service) プランが必要です。 方法については、「最初のコンテナー化された Azure Functions を作成する」をご覧ください。
- Azure Container Appsにデプロイします。 その方法については、「 Azure Container Appsで最初のコンテナー化されたAzure Functionsを作成する」を参照してください。
- Kubernetes クラスターへのデプロイ。 Azure Functions Core Tools を使用してクラスターにデプロイできます。 コマンド
func kubernetes deployを使用します。
使用するタイミング: Docker コンテナー オプションは、関数アプリが実行され、コンテナーがホストされる Linux 環境をより詳細に制御する必要がある場合に使用します。 このデプロイ メカニズムは、Linux 上で実行されている関数に対してのみ使用できます。
アプリのコンテンツが格納される場所: イメージの一部として、指定したコンテナー レジストリにアプリのコンテンツを格納します。
ソース管理
関数アプリとソース コード リポジトリの間で継続的インテグレーションを実現することができます。 ソース管理を有効にすると、接続されたソース リポジトリ内のコードに対する更新によって、リポジトリからの最新のコードのデプロイがトリガーされます。 詳細については、Azure Functions の継続的デプロイを参照してください。
使用方法: ソース管理からの発行を設定する最も簡単な方法は、ポータルの Functions 領域のデプロイ センターを利用することです。 詳細については、Azure Functions の継続的デプロイメントを参照してください。
使用するタイミング: 関数アプリで共同作業を行うチームにとっては、ソース管理を使用することがベスト プラクティスです。 ソース管理は、より高度なデプロイ パイプラインを可能にする優れたデプロイ オプションです。 通常、ステージング スロットでソース管理を有効にします。これは、リポジトリからの更新の検証後に運用環境にスワップできます。 詳細については、「Azure Functions デプロイ スロットを参照してください。
アプリのコンテンツが格納される場所: ソース管理システムには、アプリのコンテンツが格納されます。 アプリ ファイル システムには、ローカルに複製およびビルドされたアプリ コンテンツ フォームが格納されます。このフォームは、関数アプリの作成時に指定されたストレージ アカウントからAzure Files戻される可能性があります。
ローカル Git
ローカル Git を使って、ローカルマシンから Azure Functions にコードをプッシュします。
使用するタイミング: エラーの可能性を減らすために、 トリガーを手動で同期する追加の手順を必要とするデプロイ方法を使用しないようにします。 可能な場合は、zip デプロイを使います。
アプリのコンテンツが格納される場所:アプリのコンテンツはファイル システムに格納されます。これは、関数アプリの作成時に指定したストレージ アカウントからAzure Filesによってサポートされる場合があります。
FTP/S
FTP/S を使用してファイルをAzure Functionsに直接転送できますが、このデプロイ方法は使用しないでください。 FTP の使用を計画していない場合は、無効にします。 FTP を使用する場合は、FTPS を適用します。 Azure ポータルの方法については、Enforce FTPS を参照してください。
使用方法:FTPS デプロイ設定の手順に従って、FTPS を使用して関数アプリにデプロイするために使用できる URL と資格情報を取得します。
使用するタイミング: エラーの可能性を減らすために、 トリガーを手動で同期する追加の手順を必要とするデプロイ方法を使用しないようにします。 可能な場合は、zip デプロイを使います。
アプリのコンテンツが格納される場所: アプリのコンテンツはファイル システムに格納されます。 アプリのファイル システムが既定のホスト ストレージ アカウントのAzure Filesによってサポートされている場合、FTP/FTPS デプロイは失敗します。 FTP/FTPS は、FTP の制限が原因で、マウントされたストレージとしてAzure Filesで失敗します。
ポータルでの編集
ポータルベースのエディターでは、関数アプリ内のファイルを直接編集できます (基本的には、変更内容を保存するたびにデプロイされます)。
それを使用する方法:Azure portal で関数を編集するにはポータルで関数を作成する必要があります。 単一の信頼できるソースを保持するため、他のデプロイ方法を使用して、関数を読み取り専用にし、ポータルで編集できないようにします。 Azure ポータルでファイルを編集できる状態に戻すには、編集モードを
Read/Writeに手動で戻し、展開関連のアプリケーション設定 (WEBSITE_RUN_FROM_PACKAGEなど) を削除します。
それを使用する場合: ポータルは、Azure Functionsの使用を開始するのに適した方法です。 Azure ポータルでは開発の制限があるため、より高度な開発作業には次のいずれかのクライアント ツールを使用する必要があります。
アプリのコンテンツが格納される場所:アプリのコンテンツはファイル システムに格納されます。これは、関数アプリの作成時に指定したストレージ アカウントからAzure Filesによってサポートされる場合があります。
デプロイ動作
関数アプリ コードに更新プログラムをデプロイする場合、デプロイの動作はホスティング プランによって異なります。
従量課金プラン、Elastic Premium プラン、専用プラン: 現在実行中の関数は、新しいコードがデプロイされると終了します。 デプロイが完了すると、新しいコードが読み込まれ、要求の処理が開始されます。 この強制終了動作は、再作成戦略と呼ばれます。 従量課金プラン、Elastic Premium プラン、Dedicated プランでのほぼダウンタイムなしのデプロイでは、 デプロイ スロットを使用します。
Azure Functions のパフォーマンスと信頼性を向上させる方法を調べ、ステートレスおよび防御的な機能を記述する方法を学びます。
Flex 従量課金プラン: 既定の動作では再作成戦略も使用され、デプロイ中に現在実行中の関数が終了します。 ただし、Flex Consumption では、2 つの異なるサイト更新戦略が一意にサポートされています。 ダウンタイムなしのデプロイ用に ローリング更新プログラムを構成 できます。
デプロイ スロット
Azureに関数アプリをデプロイする場合は、運用環境に直接デプロイするのではなく、別のデプロイ スロットにデプロイできます。 デプロイ スロットにデプロイしてから、検証後に運用環境にスワップすることが、継続的デプロイを構成するための推奨方法です。
スロットにデプロイする方法は、使用する具体的なデプロイ ツールによって異なります。 たとえば、Azure Functions Core Tools を使用する場合は、--slot オプションを指定して、func azure functionapp publish コマンドの特定のスロットの名前を指定します。
デプロイ スロットの詳細については、Azure Functions Deployment Slots のドキュメントを参照してください。
次のステップ
関数アプリのデプロイの詳細については、次の記事を参照してください。