コンテンツにスキップ

Azure App Service + SQL Server ハンズオン (2020年12月 更新)

このハンズオンでは、次の図に示すように App Service と SQL Server を連携させた ToDo アプリを設置する方法を実践します。設置作業は、 Azure ポータルと Azure Cloud Shell を用いて行います。

0. 事前準備

このハンズオンでは、 Azure ポータルと Azure Cloud Shell で作業を行います。予めAzureアカウントの取得とサブスクリプションの作成、及び、会社でアカウントが払い出された場合、適切なアクセス権の設定が必要となります。

1. SQL Database の作成

ここでは SQL Database を作成します。 SQL Database の作成とは、 SQL Server を設置して、 SQL Server 上にデータベースを作成していくという手順となります。 Azure では SQL Database 作成画面で SQL Server を作成することが可能です。

1-1. Azure ポータルからデータベースを作成

まず、SQL Database 作成画面へ移動します。Azure ポータルの左上にあるアイコンをクリックして、メニューを開き、「リソースの作成」ボタンをクリックします。

次にSQL Databaseをメニューで選択します。

次に SQL Database 作成のフォームが表示されるので、次のように入力します。SQL Database 作成画面で 「サーバ > 新規作成」を押すと、画面の右側に SQL Server の作成画面が現れます。ここでは、SQL Serverも同時に作成します。

作成する SQL Server の情報は次のようになります。

パラメータ名
サーバ名 handson4<名字>
サーバ管理者ログイン dbadmin
パスワード P@ssw0rd
場所 東日本

作成する SQL Database の情報は次のようになります。

パラメータ名
リソースグループ handson4<名字>
データベース名 coreDB
エラスティックプール いいえ
コンピューティングストレージ サーバレス、Gen5、1 vCore、1 GB ストレージ

入力が完了したら、「次: ネットワーク」ボタンを押し次のページに進みます。

ネットワーク情報の設定画面では、次のように設定します。

※ クエリエディタでテーブルが作成されたことを確認する場合、「ファイアウォール規則:現在のクライアント」の値を「はい」に設定する必要があります。ただし、運用データベースではこの設定は推奨されません。

パラメータ名
接続方法 パブリック エンドポイント
ファイアウォール規則:Azure サービス はい
ファイアウォール規則:現在のクライアント いいえ

入力が完了したら、「次:追加機能」ボタンを押し、次のページに進みます。

追加機能画面では、「Azure Defender for SQL の有効化」を「後で」に変更し、「確認および作成」ボタンを押します。確認の結果、エラーが発生しなければ、「作成」ボタンを押して、SQL Database の作成を行います。

パラメータ名
既存データの使用 なし
照合順序(変更なし) SQL_Latin1_General_CP1_CI_AS
Azure Defender for SQL 後で

1-2. Azure Cloud Shell で SQL データベースにテーブルを作成

ここでは、SQLデータベースにテーブルを作成します。テーブルの作成には、.NETに用意されているEntity Frameworkを利用して、ソースコードから自動的にテーブルを作成します。ここでの操作は、全てCloud Shell上で実行します。

まず、ToDoアプリのソースコードをCloud Shellにダウンロードします。

git clone https://github.com/uenohajime/dotnetcore-sqldb-tutorial.git

次にダウンロードしたプロジェクト・フォルダに移動します。

cd dotnetcore-sqldb-tutorial

ソースコードの書き換えのため、エディタを起動します。ここで変更する内容は、もともと、ローカルのSQLiteをデータベースとして利用するアプリをSQL Databaseをデータベースとして利用するように書き換えます。

code .

Startup.cs ファイルを開き 31 - 32行目あたりにある次の行を、行の先頭に「//」を追記することでコメントアウトします。

services.AddDbContext<MyDatabaseContext>(options =>
    options.UseSqlite("Data Source=localdatabase.db"));

次にコメントアウトした行の次の行に、次の2行を追加します。

services.AddDbContext<MyDatabaseContext>(options =>
   options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));

次に既存のSQLiteアクセス用のソースコードを削除します。

rm Migrations -r

そして、dotnetコマンドの Entity Framework を使って、SQL Database用のソースコードを生成します。

dotnet ef migrations add InitialCreate

SQL Database へアクセスするための接続文字列を取得します。

az sql db show-connection-string --client ado.net --server handson4<名字> --name coreDB

ここで取得できる接続文字列は、User IDとPasswordの値はマスキングされているので、先ほど、SQLサーバを作成時に入力したあたいに置き換えてください。取得ができたら、その接続文字列を環境変数に保存します。

export ConnectionStrings__MyDbConnection="Server=tcp:handson4<名字>.database.windows.net,1433;Database=coreDB;User ID=dbadmin;Password=P@ssw0rd;Encrypt=true;Connection Timeout=30;"

最後にEntity Frameworkのコマンドを実行して、ソースコードに記述されたテーブルの定義をSQL Databaseに反映します。

dotnet ef database update

正しくテーブルが作成できたかについては、Azureポータル上でSQLデータベースへ移動し、「クエリエディター(プレビュー)」を選択し、ログインをします。

この時、下の図のように「テーブル」の中に「dbo.Todo」と言う名前のテーブルが存在することが確認できると、正しくテーブルの作成が完了したことになります。

2. App Service 作成と Web アプリ設置

2-1. App Service 作成

ここでは App Service を作成し、 Web アプリを設置します。Azure ポータルの左上にあるアイコンをクリックして、メニューを開き、「リソースの作成」ボタンをクリックします。

次に「 Web アプリ」を選択します。

表示された画面で Web アプリに必要な項目を次のように入力します。その後、「確認および作成」ボタンを押し、問題が生じなければ、「作成」ボタンを押します。

パラメータ名
リソースグループ handson4<名字>
名前 handson4<名字>
公開 コード
ランタイム スタック .NET Core 2.1
オペレーティング システム Windows
地域 Japan East
Windows プラン handson4<名字>
SKUとサイズ Standard S1

2-2. App Service に Connection Strings を設定

「Web アプリ」の作成を完了すると、次に App Service から SQL データベースへ接続するためのアクセスキーを Connection Strings として設定します。

まず、Azureポータル上で作成したApp Serviceの画面を開き、左のメニューの「設定 > 構成」を選択します。次に表示された画面の下の方にある「接続文字列」の「新しい接続文字列」ボタンを押します。

そして、表示される画面上で次のように入力します。その後、「保存」ボタンを押し、追加した内容を保存します。

パラメータ名
名前 MyDbConnection
Server=tcp:handson4<名字>.database.windows.net,1433;Database=coreDB;User ID=dbadmin;Password=P@ssw0rd;Encrypt=true;Connection Timeout=30;
種類 SQLAzure

2-3. App Service にアプリを設置

次にソースコードを App Service にアップロードします。いくつかの方法が提供されていますが、今回は「ローカル Git 」と呼ばれる Git コマンドで App Service にファイルをアップロードする方法でアプリを設置します。

手順は、まず、1.ポータルの App Service を設定する画面で、ローカル Git 環境を設定し、2. Cloud Shell でソースコードをアップロードするという手順になります。

2-3-1. Local Git の設定

まず、ポータルでの App Service にローカル Git を設定します。ポータルで作成した App Service の画面に移動し、左側のメニューn「デプロイメント > デプロイ センター」を選択します。表示されたメニューの中で、今回は「 Local Git 」を選択します。

次にビルドする場所を選択します。今回は、ローカル Git にアップロードされた時にビルドするように、「 App Service のビルド サービス」を選択します。

その後、表示される Git Clone URI がソースコードをアップロードする URL となるので、メモをしておきます。

2-3-2. アプリの設置

次に Cloud Shell でソースコードをアップロードします。まず、 Cloud Shell を立ち上げ、次のコマンドで、アプリのルートディレクトリに移動します。

cd ~/dotnetcore-sqldb-tutorial

次に、 Git コマンドを使って、ソースコードをアップロードするため、ユーザ情報を Cloud Shell に登録します。登録に必要な情報は、Eメールと名前です。 次のコマンドの中で "you@example.com" の部分をEメールに置き換え、 "Your Name" の部分を名前に置き換えます。

git config --global user.email “you@example.com” && git config --global user.name “Your Name”

次に、先程変更したソースコードを記録するため、次のコマンドを実行します。このコマンドは、 "git add ." の部分は変更を登録するファイルを選択するコマンドとなり、 "." は変更された全てのファイルを対象にします。 さらに、その変更をコミットするコマンドが、 "git commit -m ..." の部分になります。ここで、 "-m" 以降はコミットと一緒に登録するコメントです。

git add . && git commit –m “connect to SQLDB in Azure”

次に、 App Service へソースコードをアップロードするためのユーザを作成します。次のコマンドは、Git コマンド用のユーザ名とパスワードを作成するコマンドです。

az webapp deployment user set --user-name handson4<名字> --password P@ssw0rd

次に、先程メモした URL をアップロード先として次のコマンドで登録します。

git remote add azure https://handson4<名字>.scm.azurewebsites.net:443/handson4<名字>.git

最後に次のコマンドで、ソースコードをアップロードします。

git push azure master

アップロード後、ブラウザで App Service の URL にアクセスし、次のような画面が表示されることを確認します。

また、実際に ToDo を登録できることを確認します。

3. App Service への Web アプリの複数バージョン設置

ここでは App Service に複数のアプリを設置します。

4. App Service の Blue / Green デプロイメント

ここでは 1 つの App Service に設置された複数のアプリへアクセスするユーザの流れを調整します。

参考サイト

スライド

変更履歴

  • 2020/12/18 CloudShellにインストールされているdotnetコマンドのバージョンが3.1となったため、それに伴い内容を変更