Azure App Service に ASP.NET Core アプリを展開する

Azure App Service は ASP.NET Core を含む Web アプリをホストするための Microsoft クラウド コンピューティング プラットフォーム サービスです。

信頼性の高い Web アプリ パターン

.NET 用の信頼性の高い Web アプリ パターンYouTube のビデオ記事を参照して、ゼロからでも既存のアプリをリファクタリングしても、信頼性が高く、パフォーマンスが高く、テスト可能で、コスト効率が高く、スケーラブルな ASP.NET Core アプリを作成する方法に関するガイダンスを参照してください。

便利なリソース

App Service のドキュメント」は、Azure アプリのドキュメント、チュートリアル、サンプル、ハウツー ガイド、その他のリソースのホームです。 ASP.NET Core アプリのホスティングに関連する次の 2 つのチュートリアルは特に重要です。

Azure に ASP.NET Core Web アプリを作成する
Visual Studio を使用して ASP.NET Core Web アプリを作成し、Windows の Azure App Service に配置します。

App Service on Linux で ASP.NET Core アプリを作成する
コマンド ラインを使用して ASP.NET Core Web アプリを作成し、Linux の Azure App Service に配置します。

Azure App Service で利用可能な ASP.NET Core のバージョンについては、「App Service ダッシュボードの ASP.NET Core」を参照してください。

Azure App Service のお知らせリポジトリをサブスクライブして、イシューを監視します。 App Service チームは、App Service に届いたお知らせやシナリオを定期的に投稿しています。

ASP.NET Core のドキュメントでは、次の記事を参照できます。

Visual Studio を使用して Azure に ASP.NET Core アプリを発行する
Visual Studio を使用して Azure App Service に ASP.NET Core アプリを発行する方法を説明します。

最初のパイプラインを作成する
ASP.NET Core アプリ用に CI ビルドを設定し、Azure App Service に継続的配置リリースを作成します。

Azure Web アプリのサンドボックス
Azure アプリのプラットフォームで適用される Azure App Service ランタイム実行の制限事項について説明します。

ASP.NET Core プロジェクトのトラブルシューティングとデバッグ
ASP.NET Core プロジェクトでの警告とエラーについて説明し、トラブルシューティングを行います。

アプリケーションの構成

プラットフォーム

A シリーズ コンピューティング (Basic) 以上のホスティング階層でホストされているアプリに対して、App Services アプリのプラットフォーム アーキテクチャ (x86/x64) を Azure portal のアプリの設定で設定できます。 アプリの発行の設定 (たとえば、Visual Studio 発行プロファイル (.pubxml)) が、Azure portal におけるそのアプリのサービス構成の設定と一致していることを確認します。

64 ビット (x64) と 32 ビット (x86) アプリ用のランタイムは、Azure App Service 上に存在します。 App Service で使用できる .NET Core SDK は 32 ビットですが、Kudu コンソールまたは Visual Studio の発行プロセスを使用すれば、ローカルでビルドされた 64 ビット アプリを展開できます。 詳細については、「アプリを発行および配置する」セクションを参照してください。

ネイティブの依存関係を含むアプリのため、32 ビット (x86) アプリ用のランタイムが Azure App Service 上に存在します。 App Service で使用できる .NET Core SDK は 32 ビットです。

.Net Core ランタイムおよび .NET Core SDK に関する情報など、.NET Core フレームワーク コンポーネントおよび配布メソッドの詳細については、「.NET Core: コンポジション」を参照してください。

パッケージ

次の NuGet パッケージを、Azure App Service にデプロイされたアプリ用の自動ログ記録機能を提供するために含めます。

上記のパッケージは、アプリのプロジェクト ファイルで明示的に参照する必要があります。

Azure Portal を使用してアプリの構成をオーバーライドする

Azure Portal のアプリの設定により、アプリの環境変数の設定が許可されます。 環境変数は、環境変数構成プロバイダーで使用できます。

Azure Portal でアプリの設定が作成または変更され、[保存] ボタンが選択された場合、Azure アプリは再起動されます。 環境変数は、サービスが再起動された後にアプリに適用されます。

アプリで汎用ホストを使用する場合、ホストをビルドするために CreateDefaultBuilder が呼び出されると、環境変数がアプリの構成に読み込まれます。 詳細については、「ASP.NET Core の .NET 汎用ホスト」および環境変数の構成プロバイダーに関するページを参照してください。

Azure Portal のアプリの設定により、アプリの環境変数の設定が許可されます。 環境変数は、環境変数構成プロバイダーで使用できます。

Azure Portal でアプリの設定が作成または変更され、[保存] ボタンが選択された場合、Azure アプリは再起動されます。 環境変数は、サービスが再起動された後にアプリに適用されます。

アプリで Web ホストを使用する場合、ホストをビルドするために CreateDefaultBuilder が呼び出されると、環境変数がアプリの構成に読み込まれます。 詳細については、「ASP.NET Core の Web ホスト」および環境変数の構成プロバイダーに関するページを参照してください。

プロキシ サーバーとロード バランサーのシナリオ

要求が発生したスキーム (HTTP/HTTPS) とリモート IP アドレスを転送するために、アウトプロセスをホストするときに Forwarded Headers Middleware を構成する IIS 統合ミドルウェアと、ASP.NET Core モジュールが構成されます。 追加のプロキシ サーバーとロード バランサーの背後でホストされているアプリでは、追加の構成が必要になる場合があります。 詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。

監視およびログ記録

App Service にデプロイされる ASP.NET Core アプリは、App Service の拡張機能、ASP.NET Core ログ記録の統合を自動的に受け取ります。 拡張機能は、Azure App Service での ASP.NET Core アプリの統合のログ記録を有効にします。

App Service にデプロイされる ASP.NET Core アプリは、App Service の拡張機能、ASP.NET Core ログ記録の拡張機能を自動的に受け取ります。 拡張機能は、Azure App Service での ASP.NET Core アプリの統合のログ記録を有効にします。

監視、ログ記録、トラブルシューティングに関する情報は、次の記事を参照してください。

Azure App Service でアプリを監視する
アプリと App Service プランに関するクォータとメトリックを確認する方法を説明します。

Azure App Service のアプリの診断ログの有効化
HTTP 状態コード、失敗した要求、Web サーバー アクティビティの診断ログを有効にしてアクセスする方法を説明します。

ASP.NET Core のエラーを処理する
ASP.NET Core アプリでエラーを処理するための一般的な手法について理解します。

Azure App Service および IIS での ASP.NET Core のトラブルシューティング
ASP.NET Core アプリを使用した Azure App Service の配置に関する問題を診断する方法を説明します。

ASP.NET Core を使用した Azure App Service および IIS の一般的なエラーのトラブルシューティング
Azure App Service/IIS によってホストされるアプリの一般的な配置の構成エラーのトラブルシューティングに関するアドバイスを参照してください。

データ保護キー リングとデプロイ スロット

データ保護キー%HOME%\ASP.NET\DataProtection-Keys フォルダーに保存されます。 このフォルダーはネットワーク ストレージにバックアップされ、アプリをホストしているすべてのマシンで同期されています。 保存中のキーは保護されていません。 このフォルダーから、単一のデプロイ スロットのアプリのすべてのインスタンスにキー リングが提供されます。 ステージングや運用などの別のデプロイ スロットでは、キー リングが共有されません。

デプロイ スロットを切り替えると、データ保護を使用しているすべてのシステムが前のスロット内のキー リングを使用して格納されたデータを復号化できなくなります。 ASP.NET Cookie ミドルウェアは、その cookie の保護にデータ保護を使用します。 これにより、ユーザーが標準の ASP.NET Cookie ミドルウェアを使用するアプリからサインアウトします。 スロットに依存しないキー リング ソリューションの場合、次のような外部キー リング プロバイダーを使用します。

  • Azure Blob Storage
  • Azure Key Vault
  • SQL ストア
  • Redis Cache

詳細については、「ASP.NET Core でのキー ストレージ プロバイダー」を参照してください。

.NET Core プレビューを使用する ASP.NET Core アプリをデプロイする

.NET Core のプレビュー リリースを使用するアプリをデプロイするには、次のリソースを参照してください。 また、ランタイムは使用できるが SDK が Azure App Service にインストールされていない場合にも、これらの方法を使うことができます。

Azure App Service で利用可能な ASP.NET Core のバージョンについては、「App Service ダッシュボードの ASP.NET Core」を参照してください。

自己完結型の展開に対応した .NET SDK のバージョンを選択する方法については、「使用する .Net Core バージョンを選択する」を参照してください。

Azure Pipelines を使用して .NET Core SDK のバージョンを指定する

Azure App Service の CI/CD シナリオを使用して、Azure DevOps を使用した継続的インテグレーション ビルドを設定します。 Azure DevOps ビルドが作成されたら、必要に応じて、特定の SDK バージョンを使うようにビルドを構成します。

.NET Core SDK のバージョンを指定する

App Service デプロイ センターを使用して Azure DevOps ビルドを作成する場合、既定のビルド パイプラインには RestoreBuildTest、および Publish のためのステップが含まれています。 SDK のバージョンを指定するには、エージェント ジョブの一覧で [追加] (+) ボタンを選択して、新しいステップを追加します。 検索バーで「.NET Core SDK」を検索します。

Add the .NET Core SDK step

このステップをビルドの先頭に移動し、これに続くステップで指定したバージョンの .NET Core SDK が使われるようにします。 .NET Core SDK のバージョンを指定します。 この例では、SDK は 3.0.100 に設定されています。

Completed SDK step

自己完結型のデプロイ (SCD) を発行するには、Publish ステップで SCD を構成し、ランタイム識別子 (RID) を指定します。

Self-contained publish

自己完結型のプレビュー アプリをデプロイする

プレビュー ランタイムを対象とする自己完結型の展開 (SCD) では、展開でプレビュー ランタイムを保持します。

自己完結型アプリを展開する場合:

自己完結型アプリを展開する」セクションのガイダンスに従ってください。

コンテナー用の Web アプリで Docker を使用する

https://hub.docker.com/_/microsoft-dotnet の Docker Hub には最新のプレビュー Docker イメージが含まれています。 イメージを基本イメージとして使用できます。 通常は、イメージを使用して、Web App for Containers に展開します。

プレビュー サイト拡張機能をインストールする

プレビュー サイト拡張機能の使用に関する問題が発生した場合は、dotnet/AspNetCore issue を作成してください。

  1. Azure Portal から App Service に移動します。
  2. Web アプリを選択します。
  3. 検索ボックスに「拡張」と入力して "拡張機能" にフィルターするか、管理ツールの一覧をスクロール ダウンします。
  4. 拡張子を選択します。
  5. [追加] を選択します。
  6. [ASP.NET Core {X.Y} ({x64|x86}) ランタイム] の拡張機能を一覧から選択します。{X.Y} は ASP.NET Core のプレビュー バージョンで、{x64|x86} はプラットフォームを指定します。
  7. [OK] を選んで法的条項に同意します。
  8. [OK] を選択し、拡張機能をインストールします。

操作が完了すると、最新の .NET Core プレビューがインストールされます。 次のようにしてインストールを検証します。

  1. [高度なツール] を選択します。

  2. [高度なツール][移動] を選択します。

  3. [デバッグ コンソール]>[PowerShell] のメニュー項目を選択します。

  4. PowerShell のプロンプトで次のコマンドを実行します。 コマンドの {X.Y} を ASP.NET Core ランタイム バージョンに、{PLATFORM} をプラットフォームに置き換えます。

    Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.{PLATFORM}\
    

    x64 プレビューのランタイムがインストールされていると、コマンドで True が返されます。

Note

A シリーズ コンピューティング (Basic) 以上のホスティング階層でホストされているアプリに対して、App Services アプリのプラットフォーム アーキテクチャ (x86/x64) を Azure portal のアプリの設定で設定できます。 アプリの発行の設定 (たとえば、Visual Studio 発行プロファイル (.pubxml)) が、Azure portal におけるそのアプリのサービス構成の設定と一致していることを確認します。

アプリがインプロセス モードで実行されていて、プラットフォーム アーキテクチャが 64 ビット (x64) 向けに構成されている場合は、ASP.NET Core モジュールで 64 ビット プレビュー ランタイム (ある場合) が使用されます。 Azure portal を使って、ASP.NET Core {X.Y} (x64) ランタイムの拡張機能をインストールします。

x64 プレビュー ランタイムをインストールしたら、Azure Kudu PowerShell コマンド ウィンドウで次のコマンドを実行して、インストールを確認します。 次のコマンドの {X.Y} を、ASP.NET Core ランタイム バージョンに置き換えてください。

Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64\

x64 プレビューのランタイムがインストールされていると、コマンドで True が返されます。

Note

ASP.NET Core 拡張機能によって、たとえば Azure のログ記録など、Azure App Services での ASP.NET Core の追加機能が有効になります。 この拡張機能は、Visual Studio からデプロイするときに自動的にインストールされます。 拡張機能がインストールされていない場合は、アプリにインストールします。

ARM テンプレートでプレビュー サイト拡張機能を使用する

ARM テンプレートを使用してアプリを作成し、展開する場合は、リソースの種類として Microsoft.Web/sites/siteextensions を使用してサイト拡張機能を Web アプリに追加することができます。 次の例では、ASP.NET Core 5.0 (x64) ランタイムのサイト拡張機能 (AspNetCoreRuntime.5.0.x64) がアプリに追加されます。

{
    ...
    "parameters": {
        "site_name": {
            "defaultValue": "{SITE NAME}",
            "type": "String"
        },
        ...
    },       
    ...
    "resources": [
        ...
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2018-11-01",
            "name": "[concat(parameters('site_name'), '/AspNetCoreRuntime.5.0.x64')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ]
        }
    ]
}
    

プレースホルダー {SITE NAME} には、Azure App Service のアプリ名を指定します (例: contoso)。

アプリを発行および配置する

64 ビット配置の場合:

  • 64 ビットのアプリをビルドするには、64 ビットの .NET Core SDK を使用します。
  • App Service の [構成]>[全般設定] で、[プラットフォーム][64 ビット] に設定します。 アプリでは、プラットフォームのビット数の選択を有効にするために、Basic 以上のサービス プランを使用する必要があります。

フレームワークに依存するアプリを展開する

  1. ソリューション エクスプローラーで、プロジェクトを右クリックして [発行] をクリックします。 または、Visual Studio ツール バーから [ビルド]>[発行 {アプリケーション名}] の順に選択します。
  2. [発行] ダイアログで、[Azure]>[次へ] を選択します。
  3. Azure サービスを選択します。
  4. [Advanced] \(詳細設定) を選択します。 [発行] ダイアログが開きます。
  5. [リソース グループ] と [ホスティング プラン] を選択するか、新規に作成します。
  6. [完了] を選択します。
  7. [発行] ページで、以下を実行します。
    • [構成] では、ペン アイコン [構成の編集] を選択します。
      • [リリース] の構成が選択されていることを確認します。
      • [配置モード] ドロップダウン リストで、[フレームワーク依存] を選択します。
      • [ターゲット ランタイム] ドロップダウン リストで、目的のランタイムを選択します。 既定値は、win-x86 です。
    • 展開時に追加のファイルを削除するには、[ファイル発行オプション] を開き、転送先で追加のファイルを削除するチェック ボックスをオンにします。
    • [保存] を選択します。
    • 公開を選択します。

自己完結型アプリを展開する

自己完結型の展開 (SCD) には、Visual Studio または .NET Core CLI を使用します。

  1. ソリューション エクスプローラーで、プロジェクトを右クリックして [発行] をクリックします。 または、Visual Studio ツール バーから [ビルド]>[発行 {アプリケーション名}] の順に選択します。
  2. [発行] ダイアログで、[Azure]>[次へ] を選択します。
  3. Azure サービスを選択します。
  4. [Advanced] \(詳細設定) を選択します。 [発行] ダイアログが開きます。
  5. [リソース グループ] と [ホスティング プラン] を選択するか、新規に作成します。
  6. [完了] を選択します。
  7. [発行] ページで、以下を実行します。
    • [構成] では、ペン アイコン [構成の編集] を選択します。
      • [リリース] の構成が選択されていることを確認します。
      • [展開モード] ドロップダウン リストで、[自己完結] を選択します。
      • [ターゲット ランタイム] ドロップダウン リストで、目的のランタイムを選択します。 既定値は、win-x86 です。
    • 展開時に追加のファイルを削除するには、[ファイル発行オプション] を開き、転送先で追加のファイルを削除するチェック ボックスをオンにします。
    • [保存] を選択します。
    • 公開を選択します。

プロトコル設定 (HTTPS)

セキュリティで保護されたプロトコル バインディングを使うと、HTTPS 経由で要求に応答するときに使用する証明書を指定できます。 バインディングには、特定のホスト名に向けて発行された有効なプライベート証明書 (.pfx) が必要です。 詳細については、「チュートリアル: 既存のカスタム SSL 証明書を Azure App Service にバインドする」をご覧ください。

web.config を変換する

発行時に web.config を変換する必要がある場合 (たとえば、構成、プロファイル、環境に基づいて環境変数を設定する場合) は、「web.config を変換する」を参照してください。

その他のリソース

Windows Server の Azure App Service ではインターネット インフォメーション サービス (IIS) が使用されます。 Kestrel とフロントエンドの YARP によってロード バランサーが提供されます。 次のトピックは、基になる IIS テクノロジと関連しています。