チュートリアル: Azure App Service に ASP.NET Core および Azure SQL Database アプリをデプロイする

このチュートリアルでは、データ ドリブンの ASP.NET Core アプリを Azure App Service にデプロイし、Azure SQL Database に接続する方法について説明します。 また、アプリケーションでキャッシュ コードを有効にする Azure Cache for Redis もデプロイします。 Azure App Service は、高いスケーラビリティを備え、パッチを自己適用する Web ホスティング サービスであり、アプリを Windows または Linux に簡単にデプロイできます。 このチュートリアルでは ASP.NET Core 7.0 アプリを使用しますが、他のバージョンの ASP.NET Core および ASP.NET Framework の場合でもプロセスは同じです。

このチュートリアルには、次のものが必要です。

サンプル アプリケーション

このチュートリアルで使用するサンプル アプリケーションを探索するには、リポジトリ https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore からダウンロードするか、次の Git コマンドを使用して複製します。

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

1. App Service、データベース、キャッシュを作成する

この手順では、Azure リソースを作成します。 このチュートリアルで使用する手順では、App Service、Azure SQL Database、および Azure Cache を含む、既定でセキュリティで保護された一連のリソースを作成します。 作成手順では、次のように指定します。

  • 名前: Web アプリの名前。 Web アプリの DNS 名の一部として https://<app-name>.azurewebsites.net の形式で使われる名前です。
  • 世界でアプリを物理的に実行するためのリージョン
  • アプリのランタイム スタック。 ここで、アプリに使う .NET のバージョンを選びます。
  • アプリのホスティング プラン。 これは、アプリの一連の機能と容量のスケーリングを含む価格レベルです。
  • アプリのリソース グループ。 リソース グループを使うと、アプリケーションに必要なすべての Azure リソースを (論理コンテナーに) グループ化できます。

Azure portal にサインインし、以下の手順に従って Azure App Service リソースを作成します。

手順 1: Azure portal 内で次を実行します。

  1. Azure portal の上部にある検索バーに「Web app database」と入力します。
  2. [Marketplace] の見出しの下にある [Web アプリとデータベース] というラベルの付いた項目を選びます。 作成ウィザードに直接移動することもできます。

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

手順 2:[Web アプリとデータベースの作成] ページ内で、このフォームに次のように入力します。

  1. [リソース グループ][新規作成] を選び、名前として msdocs-core-sql-tutorial を使います。
  2. リージョン → 任意の近くの Azure リージョン。
  3. [名前]msdocs-core-sql-XYZ。ここで XYZ は任意のランダムな 3 文字です。 この名前は Azure 全体で一意である必要があります。
  4. [ランタイム スタック].NET 7 (STS)
  5. Add Azure Cache for Redis? (Azure Cache for Redis を追加しますか?)はい
  6. ホスティング プラン → Basic 準備ができたら、後で運用価格レベルにスケールアップできます。
  7. SQLAzure は、データベース エンジンとして既定で選択されています。 Azure SQL Database は、フル マネージドのサービスとしてのプラットフォーム (PaaS) データベース エンジンであり、安定した最新バージョンの SQL Server で常に実行されています。
  8. [Review + create](レビュー + 作成) を選択します。
  9. 検証が完了した後、 [作成] を選択します。

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

手順 3: このデプロイは完了するまでに数分かかります。 デプロイが完了したら、[リソースに移動] ボタンを選択します。 App Service アプリに直接移動しますが、次のリソースが作成されます。

  • リソース グループ → 作成されたすべてのリソースのコンテナーです。
  • App Service プラン → App Service のコンピューティング リソースを定義します。 Basic レベルの Linux プランが作成されます。
  • App Service → アプリを表し、App Service プランで実行されます。
  • 仮想ネットワーク → App Service アプリと統合され、バックエンドのネットワーク トラフィックを分離します。
  • プライベート エンドポイント → 仮想ネットワーク内のデータベース サーバーと Redis キャッシュのアクセス エンドポイント。
  • ネットワーク インターフェイス → プライベート エンドポイントごとに 1 つのプライベート IP アドレスを表します。
  • Azure SQL データベース サーバー → プライベート エンドポイントの背後からのみアクセスできます。
  • Azure SQL Database →サーバー上にデータベースとユーザーが作成されます。
  • Azure Cache for Redis → プライベート エンドポイントの背後からのみアクセスできます。
  • プライベート DNS ゾーン → 仮想ネットワーク内のデータベース サーバーと Redis キャッシュの DNS 解決を有効にします。

A screenshot showing the deployment process completed.

2. デバイスの接続文字列を確認する

作成ウィザードによって、SQL データベースと Redis キャッシュの接続文字列が既に生成されています。 この手順では、生成された接続文字列を後の手順のために確認します。

手順 1: [App Service] ページ内の左側のメニュー内で、[構成] を選びます。

A screenshot showing how to open the configuration page in App Service.

手順 2:

  1. ページの一番下までスクロールし、[接続文字列] セクションで AZURE_SQL_CONNECTIONSTRING を見つけます。 この文字列は、作成ウィザードによって新しい SQL データベースから生成されました。 アプリケーションを設定するには、この名前が必要になります。
  2. また、[アプリケーションの設定] セクションで AZURE_REDIS_CONNECTIONSTRING を見つけます。 この文字列は、作成ウィザードによって新しい Redis キャッシュから生成されました。 アプリケーションを設定するには、この名前が必要になります。
  3. 必要に応じて、各設定の右側にある [編集] ボタンを選択し、その値を表示またはコピーできます。 後で、AZURE_SQL_CONNECTIONSTRING および AZURE_REDIS_CONNECTIONSTRING を使用するようにアプリケーションを変更します。

A screenshot showing how to create an app setting.

3. サンプル コードのデプロイ

この手順では、GitHub Actions を使って GitHub のデプロイを構成します。 これは、App Service にデプロイする多くの方法の 1 つにすぎませんが、デプロイ プロセスで継続的インテグレーションを実現する優れた方法でもあります。 既定では、GitHub リポジトリに git push があるたびにビルドとデプロイのアクションが起動されます。

手順 1: 新しいブラウザー ウィンドウ内で次を実行します。

  1. GitHub アカウントにサインインします。
  2. https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore に移動します。
  3. [Fork] を選択します。
  4. [Create fork] (フォークの作成) を選択します。

A screenshot showing how to create a fork of the sample GitHub repository.

手順 2: [App Service] ページ内の左側のメニュー内で [デプロイ センター] を選びます。

A screenshot showing how to open the deployment center in App Service.

手順 3: [デプロイ センター] ページ内で次を実行します。

  1. [ソース] で、[GitHub] を選びます。 既定では、ビルド プロバイダーとして GitHub Actions が選ばれます。
  2. GitHub アカウントにサインインし、プロンプトに従って Azure を承認します。
  3. [組織] で、自分のアカウントを選びます。
  4. [リポジトリ] で、[msdocs-app-service-sqldb-dotnetcore] を選びます。
  5. [ブランチ][main] を選びます。
  6. 上部のメニューから、[保存] を選択します。 App Service は、選んだ GitHub リポジトリの .github/workflows ディレクトリに、ワークフロー ファイルをコミットします。

A screenshot showing how to configure CI/CD using GitHub Actions.

手順 4: そのフォークされたサンプルの GitHub ページに戻り、. キーを押して、ブラウザー内で Visual Studio Code を開きます。

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

手順 5: ブラウザー内の Visual Studio Code 内で次を実行します。

  1. エクスプローラーで DotNetCoreSqlDb/appsettings.json を開きます。
  2. 接続文字列名 MyDbConnectionAZURE_SQL_CONNECTIONSTRING に変更します。これは、前に App Service で作成した接続文字列と一致します。

A screenshot showing connection string name changed in appsettings.json.

手順 6:

  1. エクスプローラーで DotNetCoreSqlDb/Program.cs を開きます。
  2. options.UseSqlServer メソッドで、接続文字列名 MyDbConnectionAZURE_SQL_CONNECTIONSTRING に変更します。 ここで、接続文字列がサンプル アプリケーションによって使用されます。
  3. builder.Services.AddDistributedMemoryCache(); メソッドを削除し、以下のコードで置き換えます。 これは、メモリ内キャッシュから Azure の Redis キャッシュを使用するようにコードを変更します。これを行うには、前の AZURE_REDIS_CONNECTIONSTRING を使用します。
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

A screenshot showing connection string name changed in Program.cs.

手順 7:

  1. エクスプローラーで .github/workflows/main_msdocs-core-sql-XYZ を開きます。 このファイルは、App Service の作成ウィザードによって作成されました。
  2. dotnet publish のステップで、コマンド dotnet tool install -g dotnet-ef --version 7.0.14 を使用して、Entity Framework Core ツールをインストールするためのステップを追加します。
  3. 新しいステップで、デプロイ パッケージにデータベース移行バンドル (dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate) を生成するための別のステップを追加します。 移行バンドルは自己完結型の実行可能ファイルであり、.NET SDK を必要とせずに運用環境で実行できます。 App Service linux コンテナーには .NET ランタイムのみ含まれており、.NET SDK は含まれていません。

A screenshot showing steps added to the GitHub workflow file for database migration bundle.

手順 8:

  1. [ソース管理] 拡張機能を選びます。
  2. テキスト ボックスに、Configure DB & Redis & add migration bundle のようなコミット メッセージを入力します。
  3. [コミットしてプッシュ] を選択します。

A screenshot showing the changes being committed and pushed to GitHub.

手順 9: Azure portal 内の [デプロイ センター] ページ内に戻り、次を実行します。

  1. [ログ] を選択します。 新しいデプロイの実行が、コミットされた変更から既に開始されています。
  2. デプロイの実行のログ項目で、最新のタイムスタンプを持つ [ビルドまたはデプロイ ログ] エントリを選びます。

A screenshot showing how to open deployment logs in the deployment center.

手順 10: GitHub リポジトリに移動し、その GitHub アクションが実行されていることを確認します。 ワークフロー ファイルでは、ビルドとデプロイという 2 つの異なるステージを定義します。 GitHub が実行されて、[完了] の状態が表示されるまで待ちます。 これには数分かかります。

A screenshot showing a GitHub run in progress.

4. データベース スキーマを生成する

SQL Database は仮想ネットワークによって保護されているため、dotnet データベースの移行を実行する最も簡単な方法は、SSH セッション内で App Service コンテナーを使うことです。

手順 1: [App Service] ページに戻り、左側のメニュー内で [SSH] を選びます。

A screenshot showing how to open the SSH shell for your app from the Azure portal.

手順 2: SSH ターミナル内で次を実行します。

  1. cd /home/site/wwwroot を実行します。 デプロイされたすべてのファイルがここにあります。
  2. ./migrate を使用して、GitHub ワークフローによって生成された移行バンドルを実行します。 それに成功すると、App Service は SQL Database に正常に接続した状態になります。 /home 内のファイルへの変更のみが、アプリの再起動後も保持されます。 /home の外部の変更は永続化されません。

A screenshot showing the commands to run in the SSH shell and their output.

5.アプリの参照

手順 1: [App Service] ページ内で、次を実行します。

  1. 左側のメニューから [概要] を選びます。
  2. アプリの URL を選びます。 直接、https://<app-name>.azurewebsites.net に移動することもできます。

A screenshot showing how to launch an App Service from the Azure portal.

手順 2: この一覧にいくつかのタスクを追加します。 セキュリティで保護されたデータ ドリブンの ASP.NET Core アプリが Azure App Service で実行されるようになりました。

A screenshot of the .NET Core app running in App Service.

ヒント

サンプル アプリケーションでは、キャッシュ アサイド パターンが実装されています。 2 回目にデータ ビューにアクセスしたとき、またはデータを変更した後に同じページを再度読み込む場合、データベースではなくキャッシュからデータを読み込むため、Web ページの処理時間には、はるかに短い時間が表示されます。

6.診断ログをストリーミングする

Azure App Service は、アプリケーションの問題を診断するために、コンソールに記録されたすべてのメッセージをキャプチャします。 サンプル アプリは、この機能を示すために、各エンドポイントにコンソール ログ メッセージを出力します。

手順 1: [App Service] ページ内で、次を実行します。

  1. 左側のメニューから、[App Service ログ] を選びます。
  2. [アプリケーション ログ記録][ファイル システム] を選びます。

A screenshot showing how to enable native logs in App Service in the Azure portal.

手順 2:左側のメニューから [ログ ストリーム] を選択します。 プラットフォーム ログとコンテナー内のログを含む、アプリのログが表示されます。

A screenshot showing how to view the log stream in the Azure portal.

7.リソースをクリーンアップする

完了したら、リソース グループを削除することで、Azure サブスクリプションからすべてのリソースを削除できます。

手順 1: Azure portal の上部にある検索バーで次を行います。

  1. リソース グループ名を入力します。
  2. リソース グループを選択します。

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

手順 2: [リソース グループ] ページ内で、[リソース グループの削除] を選びます。

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

ステップ 3:

  1. リソース グループの名前を入力して、削除を確定します。
  2. [削除] を選択します。

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal. :

よく寄せられる質問

この設定にはいくらかかりますか。

作成リソースの価格は次のとおりです。

  • App Service プランは Basic レベルで作成され、スケールアップまたはスケールダウンできます。 「App Service の価格」をご覧ください。
  • Azure SQL Database は、最小限のコアを持つ Standard シリーズ ハードウェア上の汎用サーバーレス層で作成されます。 コストは少額であり、他のリージョンに配布することもできます。 最大サイズを小さくすることでコストをさらに最小化することも、サービス レベル、コンピューティング レベル、ハードウェア構成、コア数、データベース サイズ、ゾーン冗長性を調整してスケールアップすることもできます。 「Azure SQL Database の価格」を参照してください。
  • Azure Cache for Redis は、最小キャッシュ サイズの Basic レベルで作成されます。 このレベルには少ないコストがかかります。 高い可用性、クラスタリング、およびその他の機能のために、より高いパフォーマンス レベルにスケールアップできます。 「Azure Cache for Redis の価格」を参照してください。
  • 仮想ネットワークでは、ピアリングなどの追加機能を構成しない限り、料金は発生しません。 「Azure Virtual Network の価格」を参照してください。
  • プライベート DNS ゾーンでは、少額の料金が発生します。 「Azure DNS の価格」を参照してください。

仮想ネットワークの背後でセキュリティで保護されている Azure SQL Database サーバーに他のツールで接続するにはどうすればよいですか?

  • コマンドライン ツールからの基本的なアクセスには、アプリの SSH ターミナルから sqlcmd を実行できます。 アプリのコンテナーには sqlcmd が付属していないため、手動でインストールする必要があります。 インストールされたクライアントは、アプリの再起動後は保持されない点に注意してください。
  • SQL Server Management Studio クライアントまたは Visual Studio から接続するには、お使いのマシンが仮想ネットワーク内にある必要があります。 たとえば、サブネットの 1 つに接続されている Azure VM、または Azure 仮想ネットワークとサイト間 VPN で接続されているオンプレミス ネットワーク内のマシンが該当します。

GitHub Actions でのローカル アプリの開発はどのように行いますか。

App Service から自動生成されたワークフロー ファイルを例にとると、git push ごとに新しいビルドとデプロイの実行が起動されます。 GitHub リポジトリのローカル クローンから、必要な更新を行い、それを GitHub にプッシュします。 次に例を示します。

git add .
git commit -m "<some-message>"
git push origin main

GitHub Actions のデプロイ中に発生したエラーをデバッグする方法を教えてください

自動生成された GitHub ワークフロー ファイルでステップが失敗した場合は、失敗したコマンドを変更して、より詳細な出力を生成してみてください。 たとえば、dotnet オプションを追加することで、任意の -v コマンドからより多くの出力を取得できます。 変更をコミットおよびプッシュして、App Service への別のデプロイをトリガーします。

次のステップ

次のチュートリアルに進み、カスタム ドメインと証明書を使用してアプリをセキュリティで保護する方法を学習してください。

または、他のリソースを参照してください。