チュートリアル:Azure SQL Database を使用して Azure に ASP.NET アプリをデプロイする
Azure App Service は、非常にスケーラブルな、自己適用型の Web ホスティング サービスを提供します。 このチュートリアルでは、App Service でデータ主導の ASP.NET アプリをデプロイし、それを
このチュートリアルでは、以下の内容を学習します。
- Azure SQL Database でデータベースを作成する
- ASP.NET アプリを SQL Database に接続する
- Azure にアプリケーションをデプロイする
- データ モデルを更新し、アプリを再デプロイする
- Azure からターミナルにログをストリーミングする
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
前提条件
このチュートリアルを完了するには、以下が必要です。
ASP.NET と Web 開発ワークロードと Azure の開発ワークロードを含めて Visual Studio 2019 をインストールします。
既に Visual Studio をインストールしている場合は、
サンプルのダウンロード
[ サンプル プロジェクトをダウンロードします](https://github.com/Azure-Samples/dotnet-sqldb-tutorial/archive/master.zip) 。dotnet-sqldb-tutorial-master.zip ファイルを抽出 (解凍) します。
このサンプル プロジェクトには、
アプリを実行する
Visual Studio で
* dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln* ファイルを開きます。`Ctrl+F5` キーを押してアプリを実行します。 アプリが既定のブラウザーに表示されます。Note
Visual Studio のみをインストールし、前提条件を満たす場合は、NuGet を使用して不足しているパッケージのインストールが必要になる場合があります。
[新規作成] リンクを選択し、いくつかの To Do アイテムを作成します。
編集 、 詳細 、 削除 リンクをテストします。
アプリはデータベース コンテキストを使用してデータベースに接続します。 このサンプルでは、データベース コンテキストは
ASP.NET アプリケーションを Azure に発行する
ソリューション エクスプローラーで DotNetAppSqlDb プロジェクトを右クリックし、 [発行] を選択します。
ターゲットとして
Azure を選択し、 次へ をクリックします。 Azure App Service (Windows) が選択されていることを確認し、 次へ をクリックします。
サインインしてアプリを追加する
発行 ダイアログの サインイン をクリックします。
Azure サブスクリプションにサインインします。 既に Microsoft アカウントにサインインしている場合は、アカウントが Azure サブスクリプションを保持していることを確認します。 サインインしている Microsoft アカウントが Azure サブスクリプションを備えていない場合は、正しいアカウントをクリックして追加します。
App Service インスタンス ペインで + をクリックします。
Web アプリ名を構成する
生成された Web アプリ名をそのまま使用するか、別の一意の名前に変更することができます (有効な文字は
Note
まだ
リソース グループを作成する
リソース グループとは、Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。 たとえば、後から簡単な手順で一度にリソース グループ全体を削除することもできます。
リソース グループ の横にある 新規 をクリックします。 リソース グループに
myResourceGroup という名前を付けます。
App Service プランを作成する
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 をクリックします。 設定 推奨値 詳細情報 App Service プラン myAppServicePlan App Service プラン 場所 西ヨーロッパ Azure リージョン [サイズ] Free 価格レベル 作成 をクリックして、Azure リソースが作成されるまで待ちます。 構成したリソースが
発行 ダイアログに表示されます。 [完了] をクリックします。
サーバーとデータベースを作成する
データベースを作成するには、
発行 ダイアログで、下の サービスの依存関係 セクションまでスクロールします。 SQL Server データベース の横にある 構成 をクリックします。 Note
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 アプリの設定 が選択されていることを確認し、 完了 をクリックします。 Note
ローカル ユーザー シークレット ファイルが表示される場合は、 発行 ページではなく、 接続済みサービス ページから SQL Database を構成しておく必要があります。
構成ウィザードの完了を待って
閉じる をクリックします。
ASP.NET アプリをデプロイする
発行 タブで再び上へスクロールし、発行 をクリックします。 ASP.NET アプリが Azure にデプロイされると、 既定のブラウザーが、デプロイされたアプリの URL を参照した状態で起動します。
いくつかの To Do アイテムを追加します。
お疲れさまでした。 データ主導の ASP.NET アプリケーションを Azure App Services でライブ実行することができました。
データベースにローカルでアクセスする
Visual Studio では、
データベース接続を作成する
表示 メニューの SQL Server オブジェクト エクスプローラー を選択します。 SQL Server オブジェクト エクスプローラー の上部で、 SQL Server の追加 ボタンをクリックします。
データベース接続を構成する
接続 ダイアログで、 Azure ノードを展開します。 Azure 上のすべての SQL Database が一覧表示されます。 前に作成したデータベースを選択します。 前に作成した接続が、一番下に自動的に入力されます。
前に作成したデータベース管理者のパスワードを入力し、
接続 をクリックします。
コンピューターからのクライアント接続を許可する
ダイアログには、既にコンピューターのパブリック 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 の使用方法の詳細については、「
データ モデルを更新する
コード エディターで 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 は成功です。 ただし、ページはまだ変わっていないように見えます。これは、この新しいプロパティがまだアプリケーション ロジックで使用されていないためです。
新しいプロパティを使用する
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` を使用する` ` 要素、`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>
_ 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 に、トレース メッセージを直接ストリーム配信することができます。
各アクションが
ログ ストリーミングを有効にする
公開 ページで、ホスティング セクションまで下にスクロールします。
右上隅にある [...>ストリーミングログを表示] をクリックします。
ログが
出力 ウィンドウにストリーミングされるようになりました。 しかし、トレース メッセージはまだ表示されません。 最初に
ストリーミング ログの表示 を選択する際、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 のセキュリティを簡単に改善する方法を学んでください。
その他のリソース:
クラウドの支出を最適化して節約しますか?