チュートリアル:Azure SQL Database を使用して Azure に ASP.NET アプリをデプロイする
[アーティクル] 2023/06/01
20 人の共同作成者
フィードバック
この記事の内容
前提条件
サンプルのダウンロード
ASP.NET アプリケーションを Azure に発行する
データベースにローカルでアクセスする
Code First Migrations を使用してアプリを更新する
アプリケーション ログをストリーミングする
リソースをクリーンアップする
次のステップ
さらに 4 個を表示
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 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 内でワークロードを追加します。
[ サンプル プロジェクトをダウンロードします](https://github.com/Azure-Samples/dotnet-sqldb-tutorial/archive/master.zip) 。
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) アプリが含まれています。
Visual Studio で * dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln* ファイルを開きます。
`Ctrl+F5` キーを押してアプリを実行します。 アプリが既定のブラウザーに表示されます。
[新規作成] リンクを選択し、いくつかの To Do アイテムを作成します。
編集 、 詳細 、 削除 リンクをテストします。
アプリはデータベース コンテキストを使用してデータベースに接続します。 このサンプルでは、データベース コンテキストは `MyDbConnection` という接続文字列を使用します。 この接続文字列は * Web.config* ファイルで設定され、* Models/MyDatabaseContext.cs* ファイルで参照されます。 この接続文字列名は、このチュートリアルの後半で Azure アプリを Azure SQL Database に接続するために使用します。
ASP.NET アプリケーションを Azure に発行する
ソリューション エクスプローラー で DotNetAppSqlDb プロジェクトを右クリックし、 [発行] を選択します。
ターゲットとして Azure を選択し、 次へ をクリックします。
Azure App Service (Windows) が選択されていることを確認し、 次へ をクリックします。
発行 ダイアログの サインイン をクリックします。
Azure サブスクリプションにサインインします。 既に Microsoft アカウントにサインインしている場合は、アカウントが Azure サブスクリプションを保持していることを確認します。 サインインしている Microsoft アカウントが Azure サブスクリプションを備えていない場合は、正しいアカウントをクリックして追加します。
App Service インスタンス ペインで + をクリックします。
生成された Web アプリ名をそのまま使用するか、別の一意の名前に変更することができます (有効な文字は `a-z` 、`0-9` 、および `-` です)。 この Web アプリ名は、アプリの既定の URL の一部として使用されます (既定の URL は `.azurewebsites.net` で、`` が Web アプリ名です)。 この Web アプリ名は、Azure のすべてのアプリで一意である必要があります。
リソース グループ とは、Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。 たとえば、後から簡単な手順で一度にリソース グループ全体を削除することもできます。
リソース グループ の横にある 新規 をクリックします。
リソース グループに myResourceGroup という名前を付けます。
App Service プラン は、アプリのホストとなる Web サーバー ファームの場所、サイズ、機能を規定します。 1 つの App Service プランを共有するように Web アプリを構成することで、複数のアプリをホストするときのコストを抑えることができます。
App Service プランには、次の定義があります。
リージョン (例: 北ヨーロッパ、米国東部、東南アジア)
インスタンス サイズ (S、M、L)
スケール カウント (1 ~ 20 インスタンス)
SKU (Free、Shared、Basic、Standard、Premium)
ホスティング プラン の隣にある 新規] をクリックします。
App Service プランの構成 ダイアログ ボックスで、新しい App Service プランを次の設定で構成し、 OK をクリックします。
テーブルを展開する
作成 をクリックして、Azure リソースが作成されるまで待ちます。
構成したリソースが 発行 ダイアログに表示されます。 [完了] をクリックします。
データベースを作成するには、[ 論理 SQL サーバー](../azure-sql/database/logical-servers.md) が必要です。 論理 SQL サーバーは、1 つのグループとして管理される一連のデータベースを含む論理コンストラクトです。
発行 ダイアログで、下の サービスの依存関係 セクションまでスクロールします。 SQL Server データベース の横にある 構成 をクリックします。
注意
SQL Database は、必ず 接続済みサービス ページではなく、 発行 ページから構成してください。
Azure SQL Database を選択し、 次へ をクリックします。
[Configure Azure SQL Database](Azure SQL Database の構成) ダイアログで [+ ] をクリックします。
データベース サーバー の横にある 新規 をクリックします。
このサーバー名はサーバーの既定の URL (<server_name>.database.windows.net
) の一部として使用されます。 これは、Azure SQL のすべてのサーバーで一意である必要があります。 サーバー名を目的の値に変更します。
管理者のユーザー名とパスワードを追加します。 パスワードの複雑さの要件については、「[ パスワード ポリシー](/sql/relational-databases/security/password-policy) 」をご覧ください。
このユーザー名とパスワードを覚えておいてください。 これらは、後でサーバーを管理する際に必要になります。
重要
(Visual Studio および App Service で) 接続文字列のパスワードがマスクされていても、それがどこかに保持されているのは事実であり、アプリの攻撃対象領域が増えることになります。 App Service では、[ マネージド サービス ID](overview-managed-identity.md) を使用して、コードやアプリの構成にシークレットを保持する必要性をなくすことで、このリスクを排除できます。 詳細については、「次のステップ 」を参照してください。
[OK] をクリックします。
Azure SQL Database ダイアログの データベース名 は、生成された既定の名前のままにします。 作成 を選択して、データベース リソースが作成されるまで待ちます。
ウィザードでデータベース リソースの作成が完了したら、 次へ をクリックします。
データベース接続文字列名 に「_ MyDbConnection_ 」と入力します。 この名前は、_ Models/MyDatabaseContext.cs_ で参照されている接続文字列と一致する必要があります。
データベース接続ユーザー名 と データベース接続パスワード に、[ サーバーの作成](#create-a-server-and-database) で使用した管理者のユーザー名とパスワードを入力します。
Azure アプリの設定 が選択されていることを確認し、 完了 をクリックします。
注意
ローカル ユーザー シークレット ファイル が表示される場合は、 発行 ページではなく、 接続済みサービス ページから SQL Database を構成しておく必要があります。
構成ウィザードの完了を待って 閉じる をクリックします。
発行 タブで再び上へスクロールし、発行 をクリックします。 ASP.NET アプリが Azure にデプロイされると、 既定のブラウザーが、デプロイされたアプリの URL を参照した状態で起動します。
いくつかの To Do アイテムを追加します。
お疲れさまでした。 データ主導の ASP.NET アプリケーションを Azure App Services でライブ実行することができました。
Visual Studio では、 SQL Server オブジェクト エクスプローラー を使用して、Azure の新しいデータベースの確認と管理を簡単に行うことができます。 新しいデータベースは、作成した App Service アプリへのファイアウォールを既に開いています。 ただし、ローカルコンピューター (Visual Studio など) からアクセスするには、ローカルコンピューターのパブリック IP アドレス用のファイアウォールを開く必要があります。 お使いのパブリック IP アドレスがインターネット サービス プロバイダーによって変更された場合、Azure データベースに再度アクセスするためには、ファイアウォールを再構成する必要があります。
表示 メニューの SQL Server オブジェクト エクスプローラー を選択します。
SQL Server オブジェクト エクスプローラー の上部で、 SQL Server の追加 ボタンをクリックします。
接続 ダイアログで、 Azure ノードを展開します。 Azure 上のすべての SQL Database が一覧表示されます。
前に作成したデータベースを選択します。 前に作成した接続が、一番下に自動的に入力されます。
前に作成したデータベース管理者のパスワードを入力し、 接続 をクリックします。
新しいファイアウォール規則の作成 ダイアログが開かれています。 既定では、サーバーはお使いの Azure アプリなどの Azure サービスからデータベースへの接続のみを許可します。 Azure の外部からデータベースに接続するには、サーバー レベルでファイアウォール規則を作成します。 ファイアウォール規則で、ローカル コンピューターのパブリック IP アドレスを許可します。
ダイアログには、既にコンピューターのパブリック IP アドレスが入力されています。
クライアント IP を追加 するための項目が選択されていることを確認し、 OK をクリックします。
Visual Studio で SQL データベース インスタンスのファイアウォール設定の作成が完了すると、 SQL Server オブジェクト エクスプローラー に接続が表示されます。
ここでは、クエリの実行やビューとストアド プロシージャの作成など、最も一般的なデータベース操作を実行できます。
接続を展開し、データベース >[<お使いのデータベース>] >[テーブル] の順に選択します。 `Todoes` テーブルを右クリックし、 データの表示 を選択します。
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 をローカルで実行する
いくつかのコマンドを実行して、ローカル データベースを更新します。
ツール メニューで、 NuGet パッケージ マネージャー > パッケージ マネージャー コンソール の順にクリックします。
パッケージ マネージャー コンソール ウィンドウで、Code First Migrations を有効にします。
Enable-Migrations
移行を追加します。
Add-Migration AddProperty
ローカル データベースを更新します。
Update-Database
`Ctrl+F5` キーを押してアプリを実行します。 編集、詳細、作成のリンクをテストします。
エラーが発生せずにアプリケーションが読み込まれたら、Code First Migrations は成功です。 ただし、ページはまだ変わっていないように見えます。これは、この新しいプロパティがまだアプリケーション ロジックで使用されていないためです。
`Done` プロパティを使用するために、コードにいくつかの変更を加えます。 このチュートリアルでは、わかりやすくするために Index
ビューと Create
ビューのみを変更して、実際のプロパティを確認します。
_ Controllers\TodosController.cs_ を開きます。
52 行目にある `Create()` メソッドを探し、`Bind` 属性内のプロパティの一覧に `Done` を追加します。 完了すると、Create()
メソッドのシグネチャは次のコードのようになります。
public ActionResult Create([Bind(Include = "Description,CreatedDate,Done")] Todo todo)
_ Views\Todos\Create.cshtml_ を開きます。
Razor コードでは、`model.Description` を使用する `
_ Views\Todos\Index.cshtml_ を開きます。
空の <th></th>
要素を探します。 この要素のすぐ上に、次の Razor コードを追加します。
<th>
@Html.DisplayNameFor(model => model.Done)
</th>
`Html.ActionLink()` ヘルパー メソッドを含む `` 要素を探します。 この `` の _ 上_ に、次の Razor コードで別の `` 要素を追加します。
<td>
@Html.DisplayFor(modelItem => item.Done)
</td>
これだけで、Index
ビューと Create
ビューの変更を確認できます。
`Ctrl+F5` キーを押してアプリを実行します。
これで、To Do 項目を追加し、 完了 チェック ボックスをオンにすることができるようになります。 そうすると、完了済みの項目としてホームページに表示されます。 Edit
ビューを変更していないため、Edit
ビューには Done
フィールドが表示されないことに注意してください。
Azure で Code First Migrations を有効にする
データベースの移行を含むコードの変更に成功したので、Azure アプリに発行し、SQL Database も Code First Migrations を使用して更新します。
前と同じように、プロジェクトを右クリックし、 発行 を選択します。
その他の操作 > 編集 をクリックして発行設定を開きます。
MyDatabaseContext ボックスの一覧で、Azure SQL Database のデータベース接続を選択します。
Code First Migrations を実行する (アプリケーション開始時に実行) チェック ボックスをオンにし、 保存 をクリックします。
Azure アプリで Code First Migrations を有効にしたので、コードの変更を発行します。
発行ページで 発行 をクリックします。
再度、To Do 項目を追加してみてください。その後、 完了 を選択すると、完了済みの項目としてホームページに表示されます。
既存のすべての To Do 項目がまだ表示されています。 ASP.NET アプリケーションを再発行しても、SQL データベースの既存のデータは消失しません。 また、Code First Migrations によって変更されるのはデータ スキーマのみであり、既存のデータはそのまま残されます。
Azure アプリから Visual Studio に、トレース メッセージを直接ストリーム配信することができます。
_ Controllers\TodosController.cs_ を開きます。
各アクションが `Trace.WriteLine()` メソッドで開始されます。 このコードは、Azure アプリにトレース メッセージを追加する方法を示すために追加されています。
公開 ページで、ホスティング セクションまで下にスクロールします。
右上隅にある [... >ストリーミングログを表示] をクリックします。
ログが 出力 ウィンドウにストリーミングされるようになりました。
しかし、トレース メッセージはまだ表示されません。 最初に ストリーミング ログの表示 を選択する際、Azure アプリによってトレース レベルが `Error` に設定されるためです。このレベルでは、エラー イベントのみが (`Trace.TraceError()` メソッドによって) 記録されます。
トレース レベルを変更して別のトレース メッセージを出力するには、パブリック ページに戻ります。
ホスティング セクションで、[... >Azure portal で開く] をクリックします。
アプリのポータル管理ページで、左側のメニューから App Service ログ を選択します。
Application Logging (File System)(アプリケーション ログ記録 (ファイル システム)) の レベル から 詳細 を選択します。 [保存] をクリックします。
ヒント
異なるトレース レベルを試しながら、各レベルでどのような種類のメッセージが表示されるかを確認することができます。 たとえば、 情報 レベルを指定した場合、`Trace.TraceInformation()` 、`Trace.TraceWarning()` 、`Trace.TraceError()` で作成されたすべてのログが表示されますが、`Trace.WriteLine()` で作成されたログは除外されます。
ブラウザーでアプリにもう一度アクセスし (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 リソースを作成しました。 これらのリソースが将来必要になると思わない場合は、リソース グループを削除してリソースを削除できます。
Azure Portal の Web アプリの [概要] ページで、[リソース グループ] の下の myResourceGroup リンクを選択します。
リソース グループ ページで、リストされたリソースが削除対象であることを確認します。
[リソース グループの削除] を選び、テキスト ボックスに「myResourceGroup 」と入力して、[削除] を選びます。
もう一度 [削除] を選んで確定します。
このチュートリアルでは、以下の内容を学習しました。
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)