小一時間でAlwaysOnの検証環境を自動構築する

2021年4月7日水曜日

AD Azure IaC Network SQL Server 冗長化

t f B! P L

はじめに

以前、AzureでN層アーキテクチャのデプロイやってみたの記事で紹介したN層アーキテクチャの自動デプロイを修正して、小一時間でAlwaysOnの検証環境を自動構築してみようと思います。
実際の運用で使用している検証環境はアプリケーションの検証用途でも使っており、おいそれとフェールオーバーの設定変更やサービスアカウントのパスワード変更などできない環境課と思います。常日頃、短時間で検証環境を構築し、検証して、検証後すぐ削除できるような環境があればいいなと考えていました。
ただ、AlwaysOnの検証環境を構築するためにはActiveDirectoryの環境も必要ですし、ドメインに対する強い権限も必要のため、アプリケーションの管理者でもAlwaysOnの環境は作れないかと思います。
今回はAzureのサブスクリプションさえあれば、小一時間でAlwaysOnの環境を準備できるようにしたいと思います。デプロイに時間はかかりますが、Powershellを一つ実行すれば構築は自動的に完了します。

全体構成

デプロイを実行すると下記のような環境が構築されます。
  • ActiveDirectory:2台
  • SQL Serverがインストールされた仮想マシン:2台
  • クラスターのバーチャルホスト名で受け付けるためのロードバランサー:1台
  • 仮想マシンにログインするための踏み台環境(bastion)



準備作業

AzureでN層アーキテクチャのデプロイやってみたの記事で紹介した下記手順を実施します。
  1. Azure CLIのインストール
  2. Node.jsインストール 
  3. Azure Building Blocksのインストール 
ここまで準備できたら、ソースコードは下記からダウンロードもしくはクローンします。
※上記はmspnp/reference-architectures: templates and scripts for deploying Azure Reference Architectures (github.com)のリポジトリを参照し、SQL ServerのAlwaysOn構成に必要なリソースだけデプロイされるように修正しています。

デプロイ

ソースコードがダウンロードできたら
virtual machines -> n-tier-windows フォルダ配下の
start.ps1を実行します。

実行するとAzure Portalにログインするためのプロンプトが表示されますので、サブスクリプションに対する管理者権限のあるアカウントでログインします。

ログインが成功するとそのアカウントに紐づくサブスクリプションのIDを読み取り自動的に後続の処理に引き渡します。

あとは小一時間まてばデプロイ完了です。

start.ps1で実施していること

引数の設定

start.ps1の中では「$replaceWithPassword」と「$rgname」の引数を受け付けます。
$replaceWithPasswordはデプロイ中に作成される仮想マシンやSQL Serverにログインするアカウントのパスワードとなります。
$rgnameはstart.ps1で作成するリソースグループ名を指定します。

Azure Portalへのログイン

最初の処理はaz loginでAzure Portalへログインします。後続の処理でsubscription idを指定する必要があるので、値を抽出します。

設定ファイル内のパスワード設定その1

ソースコードの中にn-tier-windows.jsonというファイルが含まれており、最初に指定した引数でファイル内のパスワードを指定すべき箇所を置換していきます。

デプロイ実行1回目

下記のコマンドでAzure上にVNETや仮想マシンなどをデプロイしていきます。リージョンは東日本固定にしています。
azbb -s $yousubscriptionid.id -g $rgname -l "japaneast" -p replaced-n-tier-windows.json --deploy

ストレージアカウントのキー値を取得

デプロイ実行1回目の中でAlwaysOnのクォーラムとして使用するストレージアカウントを作成しており、そのストレージアカウントのキー値を以下で取得しています。
$accountname=Get-AzStorageAccount | Where-Object{$_.StorageAccountName -like "sql*"} 
$key=Get-AzStorageAccountKey -Name $accountname.StorageAccountName -ResourceGroupName $rgname | Where-Object{$_.KeyName -eq "key1"}

設定ファイル内のパスワード設定その2

n-tier-windows-sqlao.jsonに含まれるパスワード設定個所とストレージアカウントのキー値を設定する箇所を置換します。

デプロイ実行2回目

下記のコマンドでAlwaysOnの設定を行っていきます。
azbb -s $yousubscriptionid.id -g $rgname -l "japaneast" -p replaced-n-tier-windows-sqlao.json --deploy

出来上がった環境へのログイン

デプロイが完了したらAzurePortalからBastion経由でログインします。
デフォルトでは「segmentation」というリソースグループが作成されており、その中に仮想マシンが4台作成されています。

Basitionでのログイン

ログインしたいVMを指定して、接続->Bastionと選択します。



ユーザ名は「adminuser」、パスワードはstart.ps1の引数として設定したパスワードを入力します。



ログインが成功するとブラウザで該当のサーバにログインすることができ、SQL Serverに対してもWindows統合認証でログインすることができます。


AlwaysOnの設定状況

以下のようにAlwaysOnの設定も完了した環境が手に入ります。

まとめ

以上で構築完了となります。AlwaysOnでの検証が完了したら、リソースグループごと削除し、検証したくなったら、またstart.ps1を実行して作成することができます。




PV

PVアクセスランキング にほんブログ村

ブログ村

このブログを検索

自己紹介

システムエンジニアとして12年ほど勤めたあと、社内SEに転職しました。 2017年に転職して、2019年に中古マンションを買いました。

リモートデスクトップのプロキシ越え

社内ネットワークからクラウド上のサーバにリモートデスクトップしたい Azureなどのクラウド環境にWindowsOSを立ち上げると、インターネット経由でリモートデスクトップ接続することになります。会社のネットワークからインターネットにアクセスする場合はプロキシサーバーやファイ...

QooQ