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

Azure App Service は、非常にスケーラブルな、自己適用型の Web ホスティング サービスを提供します。 このチュートリアルでは、App Service でデータ主導の ASP.NET アプリをデプロイし、それを [Azure SQL Database](../azure-sql/database/sql-database-paas-overview.md) に接続する方法について説明します。 これが完了すると、ASP.NET アプリは Azure 内で実行され、SQL Database に接続された状態になります。

Azure App Service に発行された ASP.NET アプリケーション

このチュートリアルでは、以下の内容を学習します。

  • Azure SQL Database でデータベースを作成する
  • ASP.NET アプリを SQL Database に接続する
  • Azure にアプリケーションをデプロイする
  • データ モデルを更新し、アプリを再デプロイする
  • Azure からターミナルにログをストリーミングする

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

前提条件

このチュートリアルを完了するには、以下が必要です。

ASP.NET と Web 開発ワークロードと Azure の開発ワークロードを含めて Visual Studio 2019 をインストールします

既に Visual Studio をインストールしている場合は、 ツール > [Get Tools and Features](ツールと機能の取得) の順にクリックして、Visual Studio 内でワークロードを追加します。

サンプルのダウンロード

  1. [サンプル プロジェクトをダウンロードします](https://github.com/Azure-Samples/dotnet-sqldb-tutorial/archive/master.zip)

  2. dotnet-sqldb-tutorial-master.zip ファイルを抽出 (解凍) します。

このサンプル プロジェクトには、[Entity Framework Code First](/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application) を使用した基本的な [ASP.NET MVC](https://www.asp.net/mvc) "作成、読み取り、更新、削除" (CRUD) アプリが含まれています。

アプリを実行する

  1. Visual Studio で *dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln* ファイルを開きます。

  2. `Ctrl+F5` キーを押してアプリを実行します。 アプリが既定のブラウザーに表示されます。

    Note

    Visual Studio のみをインストールし、前提条件を満たす場合は、NuGet を使用して不足しているパッケージのインストールが必要になる場合があります。

  3. [新規作成] リンクを選択し、いくつかの To Do アイテムを作成します。

    [新しい ASP.NET プロジェクト] ダイアログ ボックス

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

アプリはデータベース コンテキストを使用してデータベースに接続します。 このサンプルでは、データベース コンテキストは `MyDbConnection` という接続文字列を使用します。 この接続文字列は *Web.config* ファイルで設定され、*Models/MyDatabaseContext.cs* ファイルで参照されます。 この接続文字列名は、このチュートリアルの後半で Azure アプリを Azure SQL Database に接続するために使用します。

ASP.NET アプリケーションを Azure に発行する

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

    ソリューション エクスプローラーから発行する

  2. ターゲットとして Azure を選択し、 次へ をクリックします。

  3. Azure App Service (Windows) が選択されていることを確認し、 次へ をクリックします。

サインインしてアプリを追加する

  1. 発行 ダイアログの サインイン をクリックします。

  2. Azure サブスクリプションにサインインします。 既に Microsoft アカウントにサインインしている場合は、アカウントが Azure サブスクリプションを保持していることを確認します。 サインインしている Microsoft アカウントが Azure サブスクリプションを備えていない場合は、正しいアカウントをクリックして追加します。

  3. App Service インスタンス ペインで + をクリックします。

    Azure へのサインイン

Web アプリ名を構成する

生成された Web アプリ名をそのまま使用するか、別の一意の名前に変更することができます (有効な文字は `a-z``0-9`、および `-` です)。 この Web アプリ名は、アプリの既定の URL の一部として使用されます (既定の URL は `.azurewebsites.net` で、`` が Web アプリ名です)。 この Web アプリ名は、Azure のすべてのアプリで一意である必要があります。

Note

まだ 作成 は選択しないでください。

[App Service の作成] ダイアログ

リソース グループを作成する

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

  1. リソース グループ の横にある 新規 をクリックします。

    [リソース グループ] の横にある [新規] をクリックする

  2. リソース グループに myResourceGroup という名前を付けます。

App Service プランを作成する

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

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

  • リージョン (例: 北ヨーロッパ、米国東部、東南アジア)
  • インスタンス サイズ (S、M、L)
  • スケール カウント (1 ~ 20 インスタンス)
  • SKU (Free、Shared、Basic、Standard、Premium)
  1. ホスティング プラン の隣にある 新規] をクリックします。

  2. App Service プランの構成 ダイアログ ボックスで、新しい App Service プランを次の設定で構成し、 OK をクリックします。

    設定 推奨値 詳細情報
    App Service プラン myAppServicePlan App Service プラン
    場所 西ヨーロッパ Azure リージョン
    [サイズ] Free 価格レベル

    Create App Service plan

  3. 作成 をクリックして、Azure リソースが作成されるまで待ちます。

  4. 構成したリソースが 発行 ダイアログに表示されます。 [完了] をクリックします。

    作成したリソース

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

データベースを作成するには、[論理 SQL サーバー](../azure-sql/database/logical-servers.md)が必要です。 論理 SQL サーバーは、1 つのグループとして管理される一連のデータベースを含む論理コンストラクトです。

  1. 発行 ダイアログで、下の サービスの依存関係 セクションまでスクロールします。 SQL Server データベース の横にある 構成 をクリックします。

    Note

    SQL Database は、必ず 接続済みサービス ページではなく、 発行 ページから構成してください。

    SQL Database の依存関係を構成する

  2. Azure SQL Database を選択し、 次へ をクリックします。

  3. [Configure Azure SQL Database](Azure SQL Database の構成) ダイアログで [+] をクリックします。

  4. データベース サーバー の横にある 新規 をクリックします。

    このサーバー名はサーバーの既定の URL (<server_name>.database.windows.net) の一部として使用されます。 これは、Azure SQL のすべてのサーバーで一意である必要があります。 サーバー名を目的の値に変更します。

  5. 管理者のユーザー名とパスワードを追加します。 パスワードの複雑さの要件については、「[パスワード ポリシー](/sql/relational-databases/security/password-policy)」をご覧ください。

    このユーザー名とパスワードを覚えておいてください。 これらは、後でサーバーを管理する際に必要になります。

    Create server

    重要

    (Visual Studio および App Service で) 接続文字列のパスワードがマスクされていても、それがどこかに保持されているのは事実であり、アプリの攻撃対象領域が増えることになります。 App Service では、[マネージド サービス ID](overview-managed-identity.md) を使用して、コードやアプリの構成にシークレットを保持する必要性をなくすことで、このリスクを排除できます。 詳細については、「次のステップ」を参照してください。

  6. [OK] をクリックします。

  7. Azure SQL Database ダイアログの データベース名 は、生成された既定の名前のままにします。 作成 を選択して、データベース リソースが作成されるまで待ちます。

    データベースを構成する

データベース接続を構成する

  1. ウィザードでデータベース リソースの作成が完了したら、 次へ をクリックします。

  2. データベース接続文字列名 に「_MyDbConnection_」と入力します。 この名前は、_Models/MyDatabaseContext.cs_ で参照されている接続文字列と一致する必要があります。

  3. データベース接続ユーザー名データベース接続パスワード に、[サーバーの作成](#create-a-server-and-database)で使用した管理者のユーザー名とパスワードを入力します。

  4. Azure アプリの設定 が選択されていることを確認し、 完了 をクリックします。

    Note

    ローカル ユーザー シークレット ファイルが表示される場合は、 発行 ページではなく、 接続済みサービス ページから SQL Database を構成しておく必要があります。

    データベース接続文字列を構成する

  5. 構成ウィザードの完了を待って 閉じる をクリックします。

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

  1. 発行 タブで再び上へスクロールし、発行 をクリックします。 ASP.NET アプリが Azure にデプロイされると、 既定のブラウザーが、デプロイされたアプリの URL を参照した状態で起動します。

  2. いくつかの To Do アイテムを追加します。

    Azure アプリに発行された ASP.NET アプリケーション

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

データベースにローカルでアクセスする

Visual Studio では、SQL Server オブジェクト エクスプローラーを使用して、Azure の新しいデータベースの確認と管理を簡単に行うことができます。 新しいデータベースは、作成した App Service アプリへのファイアウォールを既に開いています。 ただし、ローカルコンピューター (Visual Studio など) からアクセスするには、ローカルコンピューターのパブリック IP アドレス用のファイアウォールを開く必要があります。 お使いのパブリック IP アドレスがインターネット サービス プロバイダーによって変更された場合、Azure データベースに再度アクセスするためには、ファイアウォールを再構成する必要があります。

データベース接続を作成する

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

  2. SQL Server オブジェクト エクスプローラーの上部で、 SQL Server の追加 ボタンをクリックします。

データベース接続を構成する

  1. 接続 ダイアログで、Azure ノードを展開します。 Azure 上のすべての SQL Database が一覧表示されます。

  2. 前に作成したデータベースを選択します。 前に作成した接続が、一番下に自動的に入力されます。

  3. 前に作成したデータベース管理者のパスワードを入力し、 接続 をクリックします。

    Visual Studio からデータベース接続を構成する

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

新しいファイアウォール規則の作成 ダイアログが開かれています。 既定では、サーバーはお使いの Azure アプリなどの Azure サービスからデータベースへの接続のみを許可します。 Azure の外部からデータベースに接続するには、サーバー レベルでファイアウォール規則を作成します。 ファイアウォール規則で、ローカル コンピューターのパブリック IP アドレスを許可します。

ダイアログには、既にコンピューターのパブリック IP アドレスが入力されています。

  1. クライアント IP を追加するための項目が選択されていることを確認し、 OK をクリックします。

    ファイアウォール規則の作成

    Visual Studio で SQL データベース インスタンスのファイアウォール設定の作成が完了すると、SQL Server オブジェクト エクスプローラーに接続が表示されます。

    ここでは、クエリの実行やビューとストアド プロシージャの作成など、最も一般的なデータベース操作を実行できます。

  2. 接続を展開し、データベース>[<お使いのデータベース>]>[テーブル] の順に選択します。 `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 の概要)](/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application)」をご覧ください。

データ モデルを更新する

コード エディターで _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_ を開きます。

  2. 52 行目にある `Create()` メソッドを探し、`Bind` 属性内のプロパティの一覧に `Done` を追加します。 完了すると、Create() メソッドのシグネチャは次のコードのようになります。

    public ActionResult Create([Bind(Include = "Description,CreatedDate,Done")] Todo todo)
    
  3. _Views\Todos\Create.cshtml_ を開きます。

  4. Razor コードでは、`model.Description` を使用する `

    ` 要素、`model.CreatedDate` を使用する別の `
    ` 要素が表示されます。 これら 2 つの要素の直後に、次のように、`model.Done` を使用する別の `
    ` 要素を追加します。

    <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>
    
  5. _Views\Todos\Index.cshtml_ を開きます。

  6. 空の <th></th> 要素を探します。 この要素のすぐ上に、次の Razor コードを追加します。

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

    <td>
        @Html.DisplayFor(modelItem => item.Done)
    </td>
    

    これだけで、Index ビューと Create ビューの変更を確認できます。

  8. `Ctrl+F5` キーを押してアプリを実行します。

これで、To Do 項目を追加し、 完了 チェック ボックスをオンにすることができるようになります。 そうすると、完了済みの項目としてホームページに表示されます。 Edit ビューを変更していないため、Edit ビューには Done フィールドが表示されないことに注意してください。

Azure で Code First Migrations を有効にする

データベースの移行を含むコードの変更に成功したので、Azure アプリに発行し、SQL Database も Code First Migrations を使用して更新します。

  1. 前と同じように、プロジェクトを右クリックし、 発行 を選択します。

  2. その他の操作 > 編集 をクリックして発行設定を開きます。

    発行の設定を開く

  3. MyDatabaseContext ボックスの一覧で、Azure SQL Database のデータベース接続を選択します。

  4. Code First Migrations を実行する (アプリケーション開始時に実行) チェック ボックスをオンにし、 保存 をクリックします。

    Azure アプリで Code First Migrations を有効にする

変更を発行する

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

  1. 発行ページで 発行 をクリックします。

  2. 再度、To Do 項目を追加してみてください。その後、 完了 を選択すると、完了済みの項目としてホームページに表示されます。

    Code First Migration の手順後の Azure アプリ

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

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

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

_Controllers\TodosController.cs_ を開きます。

各アクションが `Trace.WriteLine()` メソッドで開始されます。 このコードは、Azure アプリにトレース メッセージを追加する方法を示すために追加されています。

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

  1. 公開 ページで、ホスティング セクションまで下にスクロールします。

  2. 右上隅にある [...>ストリーミングログを表示] をクリックします。

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

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

    出力ウィンドウでのログ ストリーミング

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

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

  1. トレース レベルを変更して別のトレース メッセージを出力するには、パブリック ページに戻ります。

  2. ホスティングセクションで、[...>Azure portal で開く] をクリックします。

  3. アプリのポータル管理ページで、左側のメニューから App Service ログ を選択します。

  4. Application Logging (File System)(アプリケーション ログ記録 (ファイル システム))レベル から 詳細 を選択します。 [保存] をクリックします。

    ヒント

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

  5. ブラウザーでアプリにもう一度アクセスし (http://<アプリ名>.azurewebsites.net)、Azure の To Do リスト アプリケーションの周囲をクリックしてみます。 Visual Studio の 出力 ウィンドウにトレース メッセージがストリーミングされます。

    Application: 2017-04-06T23:30:41  PID[8132] Verbose     GET /Todos/Index
    Application: 2017-04-06T23:30:43  PID[8132] Verbose     GET /Todos/Create
    Application: 2017-04-06T23:30:53  PID[8132] Verbose     POST /Todos/Create
    Application: 2017-04-06T23:30:54  PID[8132] Verbose     GET /Todos/Index
    

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

ログ ストリーミング サービスを停止するには、 出力 ウィンドウの 監視の停止 ボタンをクリックします。

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

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

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

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

次のステップ

このチュートリアルでは、以下の内容を学習しました。

  • Azure SQL Database でデータベースを作成する
  • ASP.NET アプリを SQL Database に接続する
  • Azure にアプリケーションをデプロイする
  • データ モデルを更新し、アプリを再デプロイする
  • Azure からターミナルにログをストリーミングする

次のチュートリアルに進んで、接続 Azure SQL Database のセキュリティを簡単に改善する方法を学んでください。

その他のリソース:

[ASP.NET アプリの構成](configure-language-dotnet-framework.md)

クラウドの支出を最適化して節約しますか?

[Cost Management を使用してコスト分析を開始する](../cost-management-billing/costs/quick-acm-cost-analysis.md?WT.mc_id=costmanagementcontent_docsacmhorizontal_-inproduct-learn)