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

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

デプロイ方法

コードを Azure に発行するために使用するデプロイ テクノロジは、通常、アプリの公開方法によって決まります。 適切なデプロイ方法は、具体的なニーズと開発サイクルにおけるポイントによって決まります。 たとえば、開発およびテスト中であれば、Visual Studio Code などの開発ツールから直接配置します。 アプリが運用環境にある場合は、ソース管理から継続的に発行するか、または追加の検証とテストを含む自動化された発行パイプラインを使用する可能性が高くなります。

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

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

特定の関数のデプロイでは、そのコンテキストに基づいて最適なテクノロジが使用されますが、ほとんどのデプロイ方法は zip デプロイに基づいています。

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

Azure Functions は、クロス プラットフォームのローカル開発と、Windows と Linux でのホスティングをサポートしています。 現時点では、次の 3 つのホスティング プランを利用できます。

各プランの動作は異なります。 各種の Azure Functions に対してすべてのデプロイ テクノロジが使用できるわけではありません。 次の表は、オペレーティング システムとホスティング プランの各組み合わせでサポートされるデプロイ テクノロジを示しています。

デプロイ テクノロジ Windows Consumption Windows Premium Windows Dedicated Linux Consumption Linux Premium Linux Dedicated
外部パッケージ URL1
ZIP デプロイ
Docker コンテナー
Web デプロイ
ソース管理
ローカル Git1
クラウドの同期1
FTP1
ポータルでの編集 2 2

1トリガーの手動同期が必要なデプロイ テクノロジ。 2 ポータルでの編集は、Premium プランと専用プランを使用する Linux 上の Functions の HTTP トリガーとタイマー トリガーに対してのみ使用できます。

主要な概念

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

トリガーの同期

トリガーのいずれかを変更する場合、Functions インフラストラクチャにその変更を認識させる必要があります。 同期は、多くのデプロイ テクノロジでは自動的に実行されます。 ただし、場合によっては、トリガーを手動で同期する必要があります。 外部パッケージ URL、ローカル Git、クラウドの同期、または FTP を参照することで更新をデプロイする場合は、トリガーを手動で同期する必要があります。 次の 3 つの方法のいずれかでトリガーを同期できます。

  • Azure portal で関数アプリを再起動する。
  • マスター キーを使用して 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、リソース グループ名、および関数アプリの名前に置き換えてください。

リモート ビルド

Azure Functions では、zip デプロイ後に受け取ったコードのビルドを自動的に実行できます。 これらのビルドの動作は、アプリが Windows と Linux のどちらで実行されているかによって若干異なります。 アプリがパッケージから実行モードに設定されている場合、リモート ビルドは実行されません。 リモート ビルドの使用方法については、「zip デプロイ」を参照してください。

注意

リモート ビルドで問題が発生している場合は、この機能が利用可能になった日 (2019 年8月1日) より前にアプリが作成されている可能性があります。 新しい関数アプリを作成するか、az functionapp update -g <RESOURCE_GROUP_NAME> -n <APP_NAME> を実行して関数アプリを更新してみてください。 このコマンドを正常に実行するには、2 回試行することが必要な場合があります。

Windows でのリモート ビルド

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

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

Linux でのリモート ビルド

Linux でリモート ビルドを有効にするには、次のアプリケーション設定を行う必要があります。

  • ENABLE_ORYX_BUILD=true
  • SCM_DO_BUILD_DURING_DEPLOYMENT=true

既定では、Azure Functions Core ToolsVisual Studio Code 用の Azure Functions 拡張機能の両方で、Linux へのデプロイ時にリモート ビルドが実行されます。 このため、どちらのツールでも、これらの設定は Azure で自動的に作成されます。

Linux 上でリモートでビルドされたアプリは、デプロイ パッケージから実行されます

従量課金プラン

従量課金プランで実行されている Linux 関数アプリには SCM/Kudu サイトがありません。これにより、デプロイ オプションが制限されます。 ただし、従量課金プランで実行されている Linux 上の関数アプリでは、リモート ビルドがサポートされます。

専用プランと Premium プラン

専用 (App Service) プランPremium プランで実行されている Linux 上の関数アプリには、制限された SCM/Kudu サイトがあります。

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

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 のみになります。 関数アプリが参照しているパッケージ ファイルを更新する場合、Azure にアプリケーションが変更されたことを通知するために、トリガーを手動で同期する必要があります。

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 で推奨されるデプロイ テクノロジです。

Docker コンテナー

関数アプリが含まれる Linux コンテナー イメージをデプロイできます。

使用方法: Premium プランまたは専用プランで Linux 関数アプリを作成し、実行元のコンテナー イメージを指定します。 次の 2 つの方法で行います。

  • Azure portal を使用して、Azure App Service プランで Linux 関数アプリを作成します。 [発行] で、 [Docker イメージ] を選択し、コンテナーを構成します。 イメージがホストされている場所を入力します。
  • Azure CLI を使用して、App Service プランで Linux 関数アプリを作成します。 作成方法については、「カスタム イメージを使用して Linux で関数を作成する」をご覧ください。

カスタム コンテナーを使用して既存のアプリにデプロイするには、Azure Functions Core Toolsfunc deploy コマンドを使用します。

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

Web デプロイ (MSDeploy)

Web デプロイは、Azure の Windows で実行される関数アプリを含む Windows アプリケーションをパッケージ化し、IIS サーバーにデプロイします。

使用方法: Visual Studio Tools for Azure Functions を使用します。 [パッケージ ファイルから実行します (推奨)] チェック ボックスをオフにします。

また、Web Deploy 3.6 をダウンロードし、MSDeploy.exe を直接呼び出すこともできます。

いつ使用するか: Web デプロイはサポートされており、問題はありませんが、推奨されているメカニズムは、[パッケージから実行する] が有効化された ZIP デプロイです。 詳細については、Visual Studio デプロイ ガイドに関する記事をご覧ください。

ソース管理

ソース管理を使用して、関数アプリを Git リポジトリに接続します。 そのリポジトリ内のコードへの更新が、デプロイをトリガーします。 詳細については、「Kudu Wiki」をご覧ください。

使用方法: ポータルの Functions 領域でデプロイ センターを使用して、ソース管理からのパブリッシュを設定します。 詳細については、「Azure Functions の継続的なデプロイ」を参照してください。

いつ使用するか: 関数アプリで共同作業を行うチームにとっては、ソース管理を使用することがベスト プラクティスです。 ソース管理は、より高度なデプロイ パイプラインを可能にする優れたデプロイ オプションです。

ローカル Git

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

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

いつ使用するか: 一般に、別のデプロイ方法を使用することをお勧めします。 ローカル Git からパブリッシュする場合、トリガーを手動で同期する必要があります。

クラウドの同期

Dropbox および OneDrive から Azure Functions にコンテンツを同期するには、クラウドの同期を使用します。

使用方法:クラウド フォルダーからのコンテンツを同期する」の指示に従ってください。

いつ使用するか: 一般に、他のデプロイ方法をお勧めします。 クラウドの同期を使用してパブリッシュする場合、トリガーを手動で同期する必要があります。

FTP

FTP を使用して、ファイルを Azure Functions に直接転送できます。

使用方法: FTP/S を使用したコンテンツのデプロイの指示に従います。

いつ使用するか: 一般に、他のデプロイ方法をお勧めします。 FTP を使用してパブリッシュする場合、トリガーを手動で同期する必要があります。

ポータルでの編集

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

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

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

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

Language Windows Consumption Windows Premium Windows Dedicated Linux Consumption Linux Premium Linux Dedicated
C#
C# スクリプト * *
F#
Java
JavaScript (Node.js)JavaScript (Node.js) * *
Python (プレビュー)
PowerShell (プレビュー)
TypeScript (Node.js)

* ポータルでの編集は、Premium プランと専用プランを使用する Linux 上の Functions の HTTP トリガーとタイマー トリガーに対してのみ使用できます。

デプロイ動作

デプロイすると、すべての既存実行に完了またはタイムアウトが許可されます。その後、新しいコードが読み込まれ、要求の処理が開始されます。

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

デプロイ スロット

関数アプリを Azure にデプロイする場合、運用環境に直接デプロイする代わりに、個別のデプロイ スロットにデプロイできます。 デプロイ スロットの詳細については、Azure Functions のデプロイ スロットのドキュメントをご覧ください。

次のステップ

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