この記事の概要
ASP.NET Core MVC アプリを作成し、Azure 上のSQL Databaseと接続する方法を解説します。
MSドキュメントで、以下チュートリアルが紹介されているのですが、
付随した機能や手順が多く、シンプルな動きがいまいち理解できていませんでした。
チュートリアル: Azure App Service に ASP.NET Core および Azure SQL Database アプリをデプロイする
この記事では、シンプルに接続する、、というところに重点を置いて整理してみました。
なお、筆者は普段インフラ面ばかり担当しており、アプリ方面の技術はほぼ全くの無知状態です。
このような機会に是非勉強してみようと思った、というのも、この記事を書いた背景にはあります。インフラエンジニアの方が、アプリ領域部分に踏み込む必要がでてきた、といった場合に、もし、参考になれば幸いです。
それでは、以下、
ASP.NET Core MVC アプリを作成しAzure 上のSQL Databaseと接続するというシンプルな手順
を紹介します。
環境
- Windows 11
- Visual Studio 2022
- .NET 8
目次
1.Azure SQL データベース作成
2.ASP.NET core(MVC)アプリ作成
3.モデルクラス作成
4.スキャフォールディング作成
5.Azure SQL データベースへの接続(接続追加)
6.Azure SQL データベースへの接続(接続文字列設定)
7.DBの移行と更新
8.アプリの実行
9.Azure上DBの確認
手順
1.Azure SQL データベース作成
Azure のSQL データベースをデプロイするには複数の方法があり、Visual Studio上から、アプリと一緒にデプロイすることも可能です。しかし、それだと、何をやっているのかわかり辛くなってしまうので、あえて、ポータル上からGUIで操作していきます。
Azure ポータル上メニューから「SQL データベース」をクリック

「SQLデータベースの作成」

以下画面が表示される場合、「Apply offer」をクリックしてください。こちらが表示される場合、無料でSQL データベースを作成して利用することができます。
リンク:無料でSQLデータベースを利用する

「Apply offer」をクリックすると、以下のように表示が変わります。この表示になった状態で、以降の設定を進めます。

リソースグループ、データベース名などは特に説明不要かと思います。
「サーバー」については、「新規作成」をクリックすると、別画面が起動し、新規作成することが可能です。

サーバ作成画面では、認証方法で
「SQL 認証を使用する」
を選択します。「サーバ管理者ログイン」「パスワード」を適宜入力します。
このblogの目的からSQL認証で設定していきます。

入力完了後、「OK」をクリックすると、SQLデータベース作成の以下画面に戻ります。

「Behavior when free offer lmit reached」とは
「無料オファーの制限に達したときの動作 」のことです。
この部分はデフォルト設定の
「Auto-pause the datagase until next month」
を選択したままがよいです。この設定にしておけば、SQLデータベースの無料提供の上限に達した場合、データベースにアクセスできなくはなりますが、追加料金は発生しません。検証目的であれば料金が発生しないようにしておくほうがよいでしょう。
規定の設定のまま、「ネットワーク」をクリックします。
ネットワークタブでは以下のように設定します。

セキュリティや追加設定はせず、そのまま画面下の「確認および作成」をクリックします。

「作成」をクリックします。

しばらく待機し、以下のように表示されれば、SQLデータベース作成は完了です。

2.ASP.NET core(MVC)アプリ作成
ここからVisual Studioでの作業です。
ASP.NET Core Web アプリ(Model-View-Controller)
のテンプレートを指定します。

プロジェクト名などは適宜入力し、フレームワークは、「.NET 8.0」としました。
.NET 8 は 2023 年 11 月 14 日から 2026 年 11 月 10 日までサポートされます。
.NET および .NET Core サポート ポリシー
その他はデフォルト設定です。

上記画面の「作成」をクリックすると、Webアプリのプロジェクトが作成されます。
Webアプリのプロジェクトを作るのは非常に簡単です。

デバッグ実行でブラウザが起動し、アプリが実行可能であることが確認できます。

3.モデルクラス作成
Visual Studio上でモデルクラスを作成していきます。
「Models」→「追加」→「クラス」
をクリックします。

以下のようなモデルクラスを作成しました。

public class History
{
public int HistoryId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int Age { get; set; }
}
4.スキャフォールディング作成
追加したモデルクラスを元にスキャフォールディングの生成を行います。
「Controllers」→「追加」→「新規スキャフォールディングアイテム」
をクリックします。

「Entity Framework を使用したビューがあるMVCコントローラー」をクリックします。

以下のように入力します。
① モデルクラスにはModelsフォルダに追加したクラスを指定します
② DbContextクラスは、「+」ボタンをクリックし、表示されたデフォルトのクラスを指定します
③ データベースプロバイダーには「SQL Server」を指定します。
その他の設定は全てデフォルトとしました。コントローラ名も自動で命名されるのでそのまま利用します。

「追加」をクリックすることで、新規Controller(ここではHistoriesController)が追加されます。スキャフォールディングが完了すると、DbContextクラスやCRUDに対応したページが自動で追加されます。

5.Azure SQL データベースへの接続(接続追加)
Visual Studio上で「Connected Services」からSQL データベースへの接続を追加していきます。
「Connected Services」→「追加」→「SQL Serverデータベース」
をクリックします。

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

Visual StudioからAzureアカウントへログインしている場合、以下のように、自分で作成したSQLデータベースが表示されるはずです。接続したいSQLデータベース を選択して、「次へ」をクリックしてください。

Visual Studio上からAzureへのログインを行っていないと、以下のようにSQLデータベースがリストされないのでご注意ください。上手くリストされない場合、ログオフして再度ログオンするなど何度かお試しください。1つのアカウントで複数のサブスクリプションを管理している場合、「サブスクリプション」指定に間違いがないかもご確認ください。(筆者はここで結構時間を使いました。。)

Azure SQLデータベースへの接続設定を行います。
①データベース接続文字列 では、「ConnectionStrings:」の後ろに、任意の文字列を入力します。「ConnectionStrings:tsuchi2AzureContext」など、文字列自体は任意で問題ありません。「ConnectionStrings:」の部分は変更する必要がありませんのでご注意ください。「ConnectionStrings:」に任意の文字列を追記してください。
②データベース接続ユーザ名 は、Azure上で作成したSQLデータベースの管理者名を入力してください。
③データベース接続パスワード は、同じく、SQLデータベースの管理者パスワードを入力してください。
④接続文字列の保存先 は「ローカルのユーザシークレットファイル」を指定してください。

「完了」をクリックします。

接続を構成していく中で、以下ポップアップが表示されます。
記載のとおり、Azure SQLデータベースのFW規則に、「任意のIPアドレスから接続できる新規ルール」を追加するかどうかの確認です。Azure SQL データベースをAzure Portal上から作成し、その作成時に、既に、「現在のクライアントIPアドレスを追加する」を指定している場合、不要なので、「いいえ」をクリックしてください。

なお、上記で「はい」をクリックした場合、Azure SQLサーバ上のFWルールに、以下「①」のようなルールが追加されます。
どのIPアドレスでも全て許可する、という設定となる為、非常に危険なので、「いいえ」がよいと思います。なお、「②」のピンポイントでグローバルIPが許可されているのは、Azureポータル上でSQLサーバを作成する際、「現在のクライアントIPアドレスを追加する」という指定で作成した為です。

SQLデータベースへの接続が完了すると、

接続が追加されると、「Connected Services」の「接続済みサービス 」にAzure SQL Databaseが表示されるようになります。

6.Azure SQL データベースへの接続(接続文字列設定)
Visual Studio上でSQL データベースに接続する為の 接続文字列 を設定していきます。
Azure ポータルで、「SQLデータベース」→「接続文字列」をクリックします。
「ADO.NET(SQL 認証)」部分の文字列をコピーします。

appsettings.jsonの編集
続いて、Visual Studioで、
「appsettings.json」を編集します。デフォルトでは、ローカルSQLデータベースに接続するよう設定されてるのでこれを編集します。
① には、任意で設定した接続文字列 を入力します。(接続設定を行う際に任意で設定した文字列です)
② には、Azure ポータルで確認した「ADO.NET(SQL 認証)」の値を入力します。
例:編集前(ローカルSQLデータベースへの接続が記載されている)

例:編集後(キャプチャ)

例:編集後(テキスト)
テキストでは以下のような記載となります。
接続文字列には任意で設定した「tsuchi2AzureContext」を記載し、
続く 「Server=・・・」の部分にはAzure ポータル上で確認した「ADO.NET(SQL 認証)」の値を入力しています。SQL管理者アカウントとパスワードは自身で設定したものを入力するようにしてください。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"tsuchi2AzureContext": "Server=tcp:tsuchiyamadbserver.database.windows.net,1433;Initial Catalog=tsuchidb2azure;Persist Security Info=False;User ID={管理者アカウント};Password={パスワード};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
}
}
Program.csの編集
続いて「Program.cs」を編集します。デフォルトでは、ローカルSQLデータベースに接続するよう設定されてるのでこれを編集します。

接続文字列をAzure SQL データベース接続設定で指定したものに変更するだけです。
例:変更前
~中略~
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ASPMVC2AzureContext>(options=>
options.UseSqlServer(builder.Configuration.GetConnectionString("ASPMVC2AzureContext") ?? throw new InvalidOperationException("Connection string 'ASPMVC2AzureContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
~中略~
例:変更後
~中略~
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ASPMVC2AzureContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("tsuchi2AzureContext") ?? throw new InvalidOperationException("Connection string 'tsuchi2AzureContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
~中略~
接続文字列を2箇所、書き換えました。変更箇所は上記赤字部分のみです。
※以下青字部分は変更しないようにご注意ください。builder.Services.AddDbContext<ASPMVC2AzureContext>(options・・・・
AddDbContext<ASPMVC2AzureContext> はクラス名であり、 “ASPMVC2AzureContext”というダブルクォートの中にあるものは構成ファイル内のキー名です。接続文字列名と同じだからといって、クラス名の方は変更しないようにご注意ください。(筆者はここで躓きました)
7.DBの移行と更新
モデルクラスを作成し、DBへの接続準備も整ったので、実際のDB生成を行っていきます。
マイグレーション(移行)とアップデート(更新) という2種類の操作を実行することで、モデルで指定したコードからデータベースを生成します。
Visual Studio上でAzure SQLデータベースの接続メニューから「移行の追加」をクリックします。

「移行の名前」 が自動入力され、「DbContextクラス名」 も自動でリストされます。
もし、「DbContextクラス名」 がリストされず、

以下のようにクラス名を取得できない、というエラーが出る場合、
ソリューションのクリーン、ソリューションのリビルド、を試してみてください。

以下画面のようにクラス名がリストされたら選択し、「完了」をクリックします。
※この「DbContext クラス名」はクラス名です。接続文字列とは違います。自分が指定した接続文字列がリストされないからと悩む必要はありません。(筆者は理解していなかったので悩んでいました。。)

正常終了の場合以下のような画面となります。もし、接続文字列の間違いなどがあった場合は、

以下のような画面となります。この場合、
5.Azure SQL データベースへの接続(接続追加)
6.Azure SQL データベースへの接続(接続文字列設定)
の設定を見直してください。(5,6の設定では間違いがあっても設定作業が続けられるので、実際に間違いがあった場合、ここで初めて気づくことになります)

Azure SQLデータベースの接続メニューから「データベースを更新する」をクリックします。

「DbContext クラス名」が自動入力されるのを待ち、完了 をクリックします。

以下のような画面が出れば、正常終了です。

8.アプリの実行
アプリをデバッグ実行します。ブラウザが起動し、デフォルトの以下画面が表示されると思います。
この状態から、
https://localhost:ポート番号/{コントローラ名}
にアクセスします。コントローラ名は、
4.スキャフォールディング作成
で追加した「XXXXXXController.cs」の「XXXXXX」の部分です。下記の例でいうと、「Histories」となります。

以下のような画面を開くことができます。「Create New」というリンクをクリックすることで実際にDBにデータを追加することができます。

モデルクラスで規定したとおり、
Name、Description、Age
がデータとして登録可能となっています。Create をクリックするとデータを登録できます。

モデルクラスの型に則り、任意のデータを以下のように登録可能です。

9.Azure上DBの確認
アプリがAzure SQL データベースに接続できたはずですが、URLが
https://localhost:ポート番号/{コントローラ名}
となっている為、なんとなく、本当にAzure上SQL データベースにデータが登録されているのか疑問に思えなくもないです。
その為、Azure SQLデータベースの中を確認してみます。
Azure ポータルから対象のSQLデータベースにて「クエリ エディター(プレビュー)」をクリックします。

SQL Server認証で、ログインIDとパスワードを入力します。

テーブルを展開し、モデルクラスで追加したクラス名のテーブルを選択し、メニューから「上位1000行を選択」をクリックします。

アプリから登録したデータが確認できるはずです。
ローカルで実行されているアプリがAzure上のSQLデータベースに接続できていることが確認できました。

以上、シンプルな手順と言いつつ、長文となってしまいました。
筆者としては、Azure上のSQL データベースに、自分が作成したアプリで接続することによって、各設定の持つ意味の理解が深まりました。自分と同じように理解が進んだり、誰かの(何かの)参考になれば幸いです。