NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。

VNet統合を使用した App Service (Web Apps) から Azure 仮想マシン上の SQL Server AlwaysOn 可用性グループへの接続について [Azure/SQL Server]


スポンサーリンク

App Service Environment (以下 ASE) をデプロイすることで、Azure 仮想ネットワーク (以下 VNet) に統合され、App Service (Web Apps) から Azure 仮想マシン上にインストールされた SQL Server などにアクセスすることが可能となります。

しかしながら、ASE は他のプランと比較してもコストが高いため、要件に合わなければなかなか選択することが難しいかと思います。

なお、App Service Standard プラン以上の場合、VNet統合機能により同様のことを実現することが可能になっています。

また、同一リージョン内であれば、「リージョン VNet 統合」として仮想ネットワーク ゲートウェイを作成しなくても本機能を使用できるようになっています。

※ 別リージョンの VNet に接続する必要がある場合は、仮想ネットワーク ゲートウェイが必要になります。

今回は、「リージョン VNet 統合」機能を使用し、App Service (Web Apps S1 プラン) から Azure 仮想マシン上にデプロイした SQL Server AlwaysOn 可用性グループへ、可用性グループ リスナー経由で接続する方法について、自分の整理も兼ねて、まとめてみようと思います。

 

f:id:nobtak:20200530012158p:plain

 

  [前提条件]

  •  「App Service プラン」を初めて作成する際、P2V2 プランを選択して作成後、後から 「スケール アップ (App Service のプラン)」から S1 などに変更します。

※ 現時点の仕様では、P2V2 プランよりも低いプランで「App Service プラン」を作成すると、プランを作成したリソース グループ上で後から P2V2 プランを作成したとしても「リージョン VNet統合」 機能を有効化することが出来ず、新しいリソースグループを作成後、新しいリソースグループ上で P2V2プランを作成して本機能を有効化させる必要があるとのことです。

そのため、S1 プランを使用したい場合においても、「リージョン VNet統合」 機能を使用したい場合は、まずは P2V2 プランで「App Service プラン」を作成し、後から S1 プランに変更する必要があります。

 

f:id:nobtak:20200530012757p:plain

 

  •  「リージョン VNet統合」のサブネット(未使用)を統合したい VNetに作成します。

 

Azure 仮想マシン上にクラウド監視を使用した WSFCを構築する方法については、以下の URL を参照。

 

 Azure 仮想マシン上に SQL Server AlwaysOn 可用性グループ および 可用性リスナーを構築する方法については、以下の URL を参照。

 

 

App Service から Azure 仮想マシン上にデプロイした SQL Server AlwaysOn 可用性グループへ、可用性グループ リスナー経由で接続する方法 

 1)「App Service」-「構成」-「アプリケーション設定」-「+新しいアプリケーション設定」を選択します。

f:id:nobtak:20200530015310p:plain

 

2)「名前」欄に「WEBSITE_VNET_ROUTE_ALL」、「値」欄に「1」を入力後、「OK」ボタンを選択します。

 f:id:nobtak:20200530015652p:plain

 

 3)「保存」を選択後、「変更の保存」-「続行」を選択し、設定を反映させます。

※ App Service の再起動が発生します。

 

f:id:nobtak:20200530020051p:plain

f:id:nobtak:20200530020138p:plain

 

 4)「App Service」-「ネットワーク構成」-「VNet統合」-「構成するにはここをクリック」を選択します。 

 f:id:nobtak:20200530020444p:plain

 

 5)「+ VNet の追加」を選択します。

f:id:nobtak:20200530020908p:plain

 

6)「仮想ネットワーク」欄にリージョン VNet 統合したい仮想ネットワークを選択し、「サブネット」にリージョン VNet統合 に準備したサブネットを選択し、「OK」を選択します。

f:id:nobtak:20200530021203p:plain

 

7)「App Service」-「高度なツール」-「移動」を選択します。

f:id:nobtak:20200530032711p:plain

 

8)「Debug console」-「PowerShell」を選択します。

f:id:nobtak:20200530033024p:plain

 

9) デバッグ コンソールから以下のようなスクリプトを実行し、Azure 仮想マシン上にデプロイした SQL Server AlwaysOn 可用性グループの可用性データベースに対して、可用性リスナー経由で接続し、SELECTクエリ結果が正常に取得できることを確認します。

$strServerName   = '**.**.**.**';  # SQL Server AlwaysOn 可用性リスナーIPアドレス
$strDatabaseName = '****';         # 可用性データベース
$strUserId       = '**';           # SQL ログイン
$strPassword     = '*********';    # パスワード

$connectionstr = "Data Source=$strServerName;Initial Catalog=$strDatabaseName;User ID=$strUserId;Password=$strPassword;";
$conn = New-Object -TypeName System.Data.SqlClient.SqlConnection $connectionstr;

$conn.Open();
$cmd = $conn.CreateCommand()
$cmd.Connection  = $conn
$cmd.CommandText = "select id from tab1" # クエリ内容

$objAdapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $cmd;
$objDataset = New-Object -TypeName System.Data.DataSet;

[void]$objAdapter.Fill($objDataset);
$objTable = $objDataset.Tables[0];
$objTable

$conn.Close();
$conn.Dispose();
$cmd.Dispose();
$objDataset.Dispose();
$objAdapter.Dispose();

 

[コマンド結果例]

f:id:nobtak:20200530034034p:plain

 

まとめ

リージョン VNet統合を使用することによって、App Service (Web Apps) から Azure 仮想マシン上にデプロイした SQL Server AlwaysOn 可用性グループの可用性データベースに対して、可用性リスナー経由で接続できることが確認できました。

App Service (Web Apps) を使用する場合、Azure SQL Database、Cosmos DB などの PaaS を選択することが多いかと思います。

しかしながら、データベースなどを Azure仮想マシン上にデプロイする要件がある場合においても、ASEの代わりにリージョン VNet統合を使用することでコストを抑えることが可能になるため、App Service (Web Apps) の選択肢が広がったのではないかと思います。