次の方法で共有


チュートリアル: Azure SQL データベースを使用して ASP.NET アプリを Azure にデプロイする

Azure App Service は、非常にスケーラブルな、自己適用型の Web ホスティング サービスを提供します。 このチュートリアルでは、App Service でデータ主導の ASP.NET アプリをデプロイし、それを Azure SQL Database に接続する方法について説明します。

チュートリアルを完了すると、Azure で実行されている Azure SQL データベースに接続された ASP.NET アプリが作成されます。 次の例は、アプリ インターフェイスを示しています。

Azure App Service で発行された ASP.NET アプリケーションを示すスクリーンショット。

このチュートリアルでは、次の操作を行います。

  • データ ドリブン Web アプリを Azure に発行します。
  • アプリ データを保持する Azure SQL データベースを作成します。
  • ASP.NET アプリを Azure SQL データベースに接続します。
  • データベース接続のマネージド ID と Microsoft Entra ID 認証を構成します。
  • データ モデルを更新し、アプリを再デプロイします。
  • Azure から Visual Studio にアプリケーション ログをストリーミングします。

前提条件

  • Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
  • ASP.NET と Web 開発ワークロードと Azure の開発ワークロードを含めて Visual Studio 2019 をインストールします
    • Visual Studio [ツールと機能の取得] メニューを選択して、既存の Visual Studio インストールにワークロードを追加できます。
    • Visual Studio 2022 の最新の更新プログラムがあることを確認するには、[ヘルプ] を選択し>更新プログラムを確認し、必要に応じて最新バージョンをインストールします。

アプリを作成して実行する

サンプル プロジェクトには、Entity Framework Code First を使用する基本的な ASP.NET MVC create-read-update-delete (CRUD) アプリが含まれています。

  1. サンプル プロジェクトをダウンロードし、dotnet-sqldb-tutorial-master.zip ファイルを抽出します。

  2. Visual Studio で、抽出された dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln ファイルを開きます。

  3. F5 キーを押してアプリを実行し、既定のブラウザーで開きます。

  4. アプリで [ 新規作成 ] を選択し、 いくつかのto-do 項目を作成します。

    ASP.NET Web アプリを示すスクリーンショット。

  5. [編集][詳細][削除] リンクをテストします。

アプリを Azure に発行する

アプリを Azure に発行するには、アプリをホストする Azure App Service と App Service プランを含む発行プロファイルを作成して構成します。 次に、アプリ データを格納する Azure SQL Server と Azure SQL データベースを作成し、アプリをデータベースに接続するようにデータベース コンテキストを構成します。

  1. Visual Studio ソリューション エクスプローラーで、 DotNetAppSqlDb プロジェクトを右クリックし、[発行] を選択 します

    ソリューション エクスプローラーからの発行を示すスクリーンショット。

  2. [ 発行 ] 画面で、ターゲットとして Azure を選択し、[ 次へ] を選択します。

  3. 次の画面で、 Azure App Service (Windows) が選択されていることを確認し、[ 次へ] を選択します。

サインインして Azure App Service を追加する

  1. 次の [発行 ] 画面で、Microsoft アカウントと使用するサブスクリプションにサインインします。

  2. App Service の横にある [新規作成] を選択します。

    [発行] ウィンドウで [App Service の新規作成] を選択しているスクリーンショット。

Azure App Service を構成する

  1. App Service (Windows) 画面で、App Service リソース グループ、ホスティング プランを構成します。

    App Service プランの作成を示すスクリーンショット。

  2. [ 名前] では、生成された Web アプリ名をそのまま使用することも、 a-z0-9-の文字を使用して別の名前に変更することもできます。 Web アプリ名は、すべての Azure アプリで一意である必要があります。

  3. [ リソース グループ] の横にある [ 新規] を選択し、リソース グループ に myResourceGroup という名前を付けます

    リソース グループとは、Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。 たとえば、後から簡単な手順で一度にリソース グループ全体を削除することもできます。

  4. [ホスティング プラン] の隣にある [新規] を選択します。

    App Service プランは、アプリのホストとなる Web サーバー ファームの場所、サイズ、機能を規定します。 1 つの App Service プランを共有するように Web アプリを構成することで、複数のアプリをホストするときのコストを抑えることができます。

    App Service プランには、次の定義があります。

    • リージョン (例: 北ヨーロッパ、米国東部、東南アジア)
    • インスタンス サイズ (S、M、L)
    • スケール カウント (1 ~ 20 インスタンス)
    • SKU (Free、Shared、Basic、Standard、Premium)
  5. [ホスティング プラン] 画面を完了し、[OK] を選択します。

    設定 推奨値 詳細情報
    App Service プラン myAppServicePlan App Service プラン
    場所 米国東部 Azure リージョン
    [サイズ] 無料 価格レベル

    ホスティング プランの作成を示すスクリーンショット。

  6. App Service (Windows) 画面で、[作成] を選択し、Azure リソースが作成されるまで待ちます。

  7. [ 発行] 画面には、構成したリソースが表示されます。 [完了] を選択し、 [閉じる] を選択します。

    作成したリソースを示すスクリーンショット。

サーバーとデータベースを作成する

データベースを作成する前に、 論理 SQL サーバーが必要です。 論理 SQL サーバーは、1 つのグループとして管理される一連のデータベースを含む論理コンストラクトです。

  1. DotNetAppSqlDb アプリの発行画面の [サービスの依存関係] セクションで、SQL Server データベースの横にある省略記号 ... を選択し、[接続] を選択します。

    [接続済みサービス] タブではなく、[発行] タブから SQL Database を構成してください。

    SQL Database の依存関係の構成を示すスクリーンショット。

  2. [ 依存関係への接続 ] 画面で、[ Azure SQL Database ] を選択し、[ 次へ] を選択します。

  3. [ Azure SQL Database の構成 ] 画面で、[ 新規作成] を選択します。

  4. Azure SQL Database 画面の [データベース サーバー] の横にある [新規] を選択します。

  5. サーバー名を目的の値に変更します。 サーバー名は、Azure SQL 内のすべてのサーバーで一意である必要があります。

  6. [OK] を選択.

    サーバーの作成を示すスクリーンショット。

  7. Azure SQL Database 画面で、既定で生成されたデータベース名をそのまま使用します。 [作成] を選択して、データベース リソースが作成されるまで待ちます。

    データベースの構成を示すスクリーンショット。

  8. データベース リソースが作成されたら、[ 次へ] を選択します。

  9. [ Azure SQL Database への接続 ] 画面で、[ 完了] を選択します。

    接続が機能するためのマネージド ID の構成に関するメッセージが表示された画面のスクリーンショット。

    代わりにローカル ユーザー シークレット ファイルが表示される場合は、[接続済みサービス] ページではなく [発行] ページを使用して SQL Database を構成していることを確認してください。

これで、Azure サービスにマネージド ID を使用するように Azure SQL Database 接続が設定されました。これは、シークレットやパスワードを使用しない Azure リソースにアプリを接続する安全な方法です。 接続を機能させるには、このマネージド ID に対応する SQL ユーザーに適切なアクセス許可を設定する必要があります。

マネージド ID を構成する

Azure SQL Database 作成ウィザードでマネージド ID と Entra ID の既定の認証を使用して Azure SQL サーバーを設定すると、Azure SQL 管理者として Entra ID アカウントが追加されました。Visual Studio で同じアカウントにサインインしている場合は、同じ接続文字列を使用して、Visual Studio と Azure の両方のデータベースに接続できます。

  1. [ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。

  2. パッケージ マネージャー コンソールで、次のパッケージをインストールします。

    Install-Package Microsoft.Data.SqlClient
    Install-Package Microsoft.EntityFramework.SqlServer
    
  3. PowerShell コマンド ラインで、次のコマンドを実行して SQL Database にサインインします。 <server-name> はサーバー名に置き換え、 <entra-id-user> は Visual Studio でデータベースを設定するために使用した Microsoft Entra ユーザー名に置き換えます。 その Entra ユーザーは、既定でデータベース サーバーへの管理者アクセス権を持っています。

    sqlcmd -S <servername>.database.windows.net -d DotNetAppSqlDb_db -U <entra-id-user> -G -l 30
    

    画面の指示に従ってサインインします。

  4. SQL プロンプトで、次のコマンドを実行して、アプリに必要な最小限のアクセス許可を付与し、 <app-name> をアプリ名に置き換えます。

    CREATE USER [<app-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<app-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<app-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<app-name>];
    GO
    

データベース コンテキストを更新する

このアプリでは、データベース コンテキストを使用してデータベースに接続します。データベースは Models /MyDatabaseContext.cs ファイルで参照されます。 このセクションでは、最新の Microsoft.Data.SqlClient ADO.NET プロバイダーに依存する Entity Framework 6 SQL Server プロバイダーを参照するようにコードを更新します。

Entity Framework 6 プロバイダーは、組み込みの System.Data.SqlClient SQL Server プロバイダーに代わるものであり、Microsoft Entra ID 認証方法のサポートが含まれています。 詳細については、「 Microsoft.EntityFramework.SqlServer}」を参照してください。

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))]はデータベース コンテキストにMicrosoft.Data.SqlClientを使用するためにローカルで動作しますが、System.Data.SqlClientは Azure App Service のプロバイダーとしてハードコーディングされているため、System.Data.SqlClientへの参照をMicrosoft.Data.SqlClientにリダイレクトするには、MicrosoftSqlDbConfigurationを拡張する必要があります。

  1. web.configで、entityFramework/providers/providerセクションと行: <provider invariantName="System.Data.SqlClient" .../>を削除します。

  2. Models/MyDatabaseContext.cs で、次のクラスを追加します。

        public class AppServiceConfiguration : MicrosoftSqlDbConfiguration
        {
            public AppServiceConfiguration()
            {
                SetProviderFactory("System.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance);
                SetProviderServices("System.Data.SqlClient", MicrosoftSqlProviderServices.Instance);
                SetExecutionStrategy("System.Data.SqlClient", () => new MicrosoftSqlAzureExecutionStrategy());
            }
        }
    
  3. MyDatabaseContext クラス宣言に次の属性を追加します。

    [DbConfigurationType(typeof(AppServiceConfiguration))]
    

ASP.NET アプリをデプロイする

  1. [ 発行 ] タブの上部にある [ 発行] を選択します。 ASP.NET アプリが Azure にデプロイされ、既定のブラウザーがデプロイされたアプリの URL に起動します。

  2. アプリをテストするには、いくつかの to-do 項目を追加します。

    Azure App Service で発行された ASP.NET アプリケーションを示すスクリーンショット。

お疲れさまでした。 データ主導の ASP.NET アプリケーションを Azure App Services でライブ実行することができました。

SQL Server オブジェクト エクスプローラーを使用する

Visual Studio SQL Server オブジェクト エクスプローラー を使用して、Azure SQL データベースを簡単に探索および管理できます。 SQL Server オブジェクト エクスプローラーでは、クエリの実行やテーブル、ビュー、ストアド プロシージャの作成など、最も一般的なデータベース操作を実行できます。

コンピューターからのクライアント接続を許可する

既定では、Azure サーバーは、Azure アプリなどの Azure サービスからのみデータベースへの接続を許可します。 新しいデータベースは、作成した App Service アプリに対してファイアウォールを開きました。

Visual Studio などのローカル コンピューターからデータベースにアクセスするには、Azure サーバーがファイアウォールを開いて、マシンのパブリック IP アドレスへのアクセスを許可する必要があります。

ローカル クライアントへのアクセスを追加するように求められたら、[ コンピューターのパブリック IP アドレスを許可する] オプションを選択してください。 このオプションでは、ローカル コンピューターのパブリック IP アドレスを許可するファイアウォール規則が作成されます。 ダイアログ ボックスには、コンピューターの現在の IP アドレスが既に設定されています。

ローカル コンピューターへのアクセスを追加するように求めるメッセージが表示されない場合は、Azure portal で Azure SQL データベースに移動し、上部のメニュー バーで [サーバー ファイアウォールの設定 ] を選択できます。 [ファイアウォール規則] の [ネットワーク] ページで、[クライアント IPv4 アドレスの追加] オプションを選択します。

お使いのパブリック IP アドレスがインターネット サービス プロバイダーによって変更された場合、Azure データベースに再度アクセスするためには、ファイアウォールを再構成する必要があります。

Azure SQL データベースにローカルで接続する

  1. [表示] メニューの [SQL Server オブジェクト エクスプローラー] を選択します。

  2. SQL Server オブジェクト エクスプローラー ウィンドウの上部で、アイコンを選択して SQL Server を追加します

  3. 接続 画面で、Azure ノードの下に接続が表示されます。 サーバー名ユーザー名、パスワードデータベース名の情報を入力し、[接続] を選択します。

    Visual Studio からのデータベース接続の構成を示すスクリーンショット。

  4. Visual Studio で SQL Database インスタンスの接続の構成が完了すると、 SQL Server オブジェクト エクスプローラーにデータベースが表示されます。 接続名 <>>Databases><データベース名>>を展開して、データを表示します。

  5. [ テーブル] を展開し、 ToDoes テーブルを右クリックし、[ データの表示 ] を選択してデータベース データを操作します。

    SQL Database オブジェクトの探索を示すスクリーンショット。

Code First Migrations を使用してアプリを更新する

Visual Studio で使い慣れたツールを使用して、Azure のデータベースとアプリを更新できます。 この手順では、Entity Framework で Code First Migrations を使用してデータベース スキーマを変更し、変更を Azure に発行します。

Entity Framework Code First Migrations の使用方法の詳細については、「Getting Started with Entity Framework 6 Code First using MVC 5 (MVC 5 を使用した Entity Framework 6 Code First の概要)」をご覧ください。

データ モデルを更新する

コード エディターで Models\Todo.cs を開きます。 ToDo クラスに次のプロパティを追加します。

public bool Done { get; set; }

Code First Migrations をローカルで実行する

いくつかのコマンドを実行して、ローカル データベースを更新します。

  1. [ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。

  2. [パッケージ マネージャー コンソール] ウィンドウで、Code First Migrations を有効にします。

    Enable-Migrations
    
  3. 移行を追加します。

    Add-Migration AddProperty
    
  4. ローカル データベースを更新します。

    Update-Database
    
  5. Ctrl+F5 キーを押してアプリを実行します。 [編集]、[詳細]、[新規作成] の各リンクをテストします。

アプリケーションがエラーなしで読み込まれた場合、Code First Migrations は成功しました。 ただし、アプリケーション ロジックでこの新しいプロパティがまだ使用されていないため、ページは引き続き同じように見えます。

新しいプロパティを使用する

コードに変更を加えて、 Done プロパティの動作を確認します。 このチュートリアルでは、新しいプロパティを使用するように Index ビューと Create ビューのみを変更します。

  1. Controllers\TodosController.cs を開き、52 行目の Create() メソッドで、Bind 属性のプロパティの一覧にDoneを追加します。 Create() メソッドシグネチャは、次のコードのようになります。

    public ActionResult Create([Bind(Include = "Description,CreatedDate,Done")] Todo todo)
    
  2. Views\Todos\Create.cshtml を開き、Razor コードで、model.Descriptionを使用する<div class="form-group">要素と、model.CreatedDateを使用する<div class="form-group">要素に注意してください。

    これら 2 つの要素の後に、model.Doneを使用する次の<div class="form-group">要素を追加します。

    <div class="form-group">
        @Html.LabelFor(model => model.Done, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            <div class="checkbox">
                @Html.EditorFor(model => model.Done)
                @Html.ValidationMessageFor(model => model.Done, "", new { @class = "text-danger" })
            </div>
        </div>
    </div>
    
  3. Views\Todos\Index.cshtml を開き、空の<th></th>要素のすぐ上に、次の Razor コードを追加します。

    <th>
        @Html.DisplayNameFor(model => model.Done)
    </th>
    
  4. Html.ActionLink() ヘルパー メソッドを含む<td>要素の上に、次の Razor コードを含む別の<td>要素を追加します。

    <td>
        @Html.DisplayFor(modelItem => item.Done)
    </td>
    
  5. すべてのファイルを保存し、 Ctrl+F5 キーを押してアプリを実行します。

  6. アプリで、to-do 項目を追加し、[ 完了] を選択します。 アイテムは、完了したアイテムとしてホーム ページに表示されます。 編集ビューを変更していないため、[編集] ビューには[完了] フィールドは表示されません。

Azure で Code First Migrations を有効にする

データベースの移行を含むコードの変更が機能したら、それを Azure アプリに発行し、Code First Migrations を使用して Azure SQL データベースを更新することもできます。

  1. Visual Studio ソリューション エクスプローラーで、プロジェクトを右クリックし、[発行] を選択 します

  2. [ その他のアクション>編集 ] を選択して発行設定を開きます。

    発行設定を開く画面を示すスクリーンショット。

  3. [MyDatabaseContext] ドロップダウンで、Azure SQL データベースのデータベース接続を選択します。

  4. コード の最初の移行の実行 (アプリケーションの起動時に実行) を選択し、[保存] を選択 します

    Azure アプリで Code First Migrations を有効にするを示すスクリーンショット。

変更を発行する

Azure アプリで Code First Migrations を有効にしたので、コードの変更を発行します。

  1. [発行] ページで [発行] を選択します。

  2. 発行された Web アプリで、もう一度 to-do 項目を追加して「完了」を選択してみてください。それにより、項目は完了したアイテムとしてホームページに表示されます。

    既存のすべての To Do 項目がまだ表示されています。 ASP.NET アプリケーションを再発行しても、Azure SQL データベース内の既存のデータは失われません。 また、Code First Migrations はデータ スキーマのみを変更し、データはそのまま残します。

    Code First Migration の後の Azure アプリを示すスクリーンショット。

アプリケーション ログをストリーミングする

Azure アプリから Visual Studio に、トレース メッセージを直接ストリーム配信することができます。

Controllers\TodosController.cs を開き、各アクションは Trace.WriteLine() メソッドで始まる点に注意してください。 このコードでは、Azure アプリにトレース メッセージを追加する方法を示します。

ログ ストリーミングを有効にする

  1. Visual Studio の [発行] ページで、[ ホスティング ] セクションまで下にスクロールします。

  2. 右上にある省略記号 ... を選択し、[ ストリーミング ログの表示] を選択します。

    ログ ストリーミングを有効にするを示すスクリーンショット。

    ログが [出力] ウィンドウにストリーミングされるようになりました。

    [出力] ウィンドウのログ ストリーミングを示すスクリーンショット。

    トレース メッセージはまだ表示されません。最初に [ ストリーミング ログの表示] を選択すると、Azure アプリによってトレース レベルが Error に設定され、 Trace.TraceError() メソッドを使用してエラー イベントのみがログに記録されるためです。

トレース レベルを変更する

  1. トレース レベルを変更して他のトレース メッセージを出力するには、[発行] ページの [ホスティング] セクションで、右上にある [... ] を選択し、[Azure portal で開く] を選択します。

  2. アプリの Azure portal ページで、左側のメニューの [監視] の下にある App Service ログを選択します。

  3. [Application logging (Filesystem)] で、[詳細]を選択し、[レベル][保存] を選択します。

    ヒント

    異なるトレース レベルを試しながら、各レベルでどのような種類のメッセージが表示されるかを確認することができます。 たとえば、[情報] レベルを指定した場合、Trace.TraceInformation()Trace.TraceWarning()Trace.TraceError() で作成されたすべてのログが表示されますが、Trace.WriteLine() で作成されたログは除外されます。

  4. ブラウザーで、Azure to-do リスト アプリケーションにもう一度移動し、アプリ内を移動します。 次の例のようなトレース メッセージは、Visual Studio の [出力 ] ウィンドウにストリーミングされるようになりました。

    Application:2025-05-12T23:41:11  PID[17108] Verbose     GET /Todos/Index
    Application:2025-05-12T23:42:04  PID[17108] Verbose     GET /Todos/Index
    Application:2025-05-12T23:42:06  PID[17108] Verbose     POST /Todos/Create
    Application:2025-05-12T23:42:07  PID[17108] Verbose     GET /Todos/Index
    

ログ ストリーミングを停止する

ログ ストリーミング サービスを停止するには、[出力] ウィンドウで [監視の停止] アイコンを選択します。

ログ ストリーミングの停止を示すスクリーンショット。

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

前の手順では、リソース グループ内に Azure リソースを作成しました。 これらのリソースが将来必要になると思わない場合は、リソース グループを削除してリソースを削除できます。

  1. Azure Portal の Web アプリの [概要] ページで、[リソース グループ] の下の myResourceGroup リンクを選択します。
  2. リソース グループのページで、一覧表示されたリソースが、削除しようとするリソースであることを確認します。
  3. [リソース グループの削除] を選び、テキスト ボックスに「myResourceGroup」と入力して、[削除] を選びます。
  4. もう一度 [削除] を選んで確定します。

次のチュートリアルに進み、マネージド ID を使用して Azure SQL Database 接続のセキュリティを強化する方法について説明します。