Operations Lab.

PowerShell を用いて Azure 仮想マシン上に検証用の環境を構成する

leave a comment »

※このエントリは PowerShell Advent Calendar 2013 の9日目の記事です。

ちょっとした検証環境を作りたい時に Windows Azure 仮想マシンは大変便利です。Windows Azure 仮想マシンは管路ポータルの GUI を使用して展開、利用することもできますが、Windows Azure 仮想マシン上で Active Directory Domain Service (ADDS、所謂ドメインコントローラー)を展開したい場合などは、PowerShell による構成が必要となります。

このエントリでは、以下の様な環境を展開します。

  • Windows Azure 上に閉じられた検証用の環境を展開
  • ドメインコントローラー(DC)は 2 台構成
  • Windows Azure とオンプレミスの環境は接続しない(独立した仮想ネットワークを構成)
  • 専用の Active Directory フォレストを新規に作成
  • 展開するすべての仮想マシンは、展開時にドメインへ参加

ポイントは以下の 3 つです。

  • Azure 仮想ネットワークを PowerShell から構成する場合、別途ネットワーク構成ファイル(.netcfg)を作成しておく必要がある(管理ポータルから作成する場合は、ウィザード形式でパラメーターを入力できます)
  • 仮想マシンは個別のクラウドサービスに展開する
  • 1 台目のドメインコントローラーで DNS サービスを構成する前に日本語ランゲージパックを適用したい場合は、OS 上で一時的に DNS サーバー(ネットワークオプションで指定する DNS のリゾルバ)を変更する

AffinityGroup の作成

Windows Azure 仮想マシン上で Active Directory Domain Service を展開する場合は、AffinityGroup と仮想ネットワークの設定が必須です。

サブスクリプション契約直後は AffinityGroup が構成されていませんので、新規に AffinityGroup を作成します。

# AffinityGroup が存在しないことを確認
Get-AzureAffinityGroup

# AffinityGroup を作成
New-AzureAffinityGroup -Name ag01 -Location "East Asia"

OperationDescription    OperationId                           OperationStatus
--------------------    -----------                           ---------------
New-AzureAffinityGroup  15c85ae3-a35a-343e-9c4f-ab036afd9913  Succeeded

# 作成できていることを確認
Get-AzureAffinityGroup

Name                 : ag01
Label                : ag01
Description          : 
Location             : East Asia
HostedServices       : {}
StorageServices      : {}
Capabilities         : {PersistentVMRole, HighMemory}
OperationDescription : Get-AzureAffinityGroup
OperationId          : 7ee3af40-f910-3548-89c3-ad9c26f3d33b
OperationStatus      : Succeeded

仮想ネットワークの作成

Azure 仮想マシン環境は DHCP でアドレスがアサインされます。仮想ネットワークが構成されていない場合アドレスのアサインを制御することができませんが、仮想ネットワークを構成すると、ある程度アサインをコントロールできます。

仮想ネットワークに接続された Azure 仮想マシンは、仮想ネットワークの中で空いている一番若いアドレス(ネットワークの先頭 3 つを除く)が起動時にアサインされ、Azure の DNS に登録されます。このアドレスは OS の再起動などによっては変更されません。ただし、仮想マシンを停止した場合、アドレスの割り当てが解除され他の仮想マシンにアサイン可能な状態となります。(なお、IP アドレスがリリースされた仮想マシンは、Azure 仮想マシンとしては課金されません。)

仮想ネットワークを PowerShell から構成する場合は、ネットワーク構成ファイルを作成します。オンプレミスとの接続を行わず、外部の DNS を使用しない(Azure 内の DNS を使用する)場合は、以下を設定ファイルに記述します。

  • 仮想ネットワークを作成するアフィニティグループ名(ここでは ag01)
  • 仮想ネットワークの名前(ここでは azure-localnet)
  • 仮想ネットワーク全体として利用可能なアドレススペース(ここでは 10.0.0.0/8)

    ※今回は閉じられたネットワークなのであまり気にする必要はありませんが、オンプレミスの環境と接続する場合はオンプレ側で使用しているアドレスレンジと重複しないように留意する必要があります。
  • 作成するサブネットの名前(ここでは ServiceNetwork)

    ※仮想マシン作成時に、どのサブネットへ接続するか指定します。
  • サブネットのネットワークアドレス(ここでは 10.0.0.0/24)

    ※ネットワーク全体のアドレススペースから、重複しないようにアサインします。
<?xml version="1.0" encoding="utf-8"?>
<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
  <VirtualNetworkConfiguration>
    <Dns />
    <VirtualNetworkSites>
      <VirtualNetworkSite name="azure-localnet" AffinityGroup="ag01">
        <AddressSpace>
          <AddressPrefix>10.0.0.0/8</AddressPrefix>
        </AddressSpace>
        <Subnets>
          <Subnet name="ServiceNetwork">
            <AddressPrefix>10.0.0.0/24</AddressPrefix>
          </Subnet>
        </Subnets>
      </VirtualNetworkSite>
    </VirtualNetworkSites>
  </VirtualNetworkConfiguration>
</NetworkConfiguration>

構成ファイルを準備したら、仮想ネットワークを作成します。

# 仮想ネットワークが設定されていないことを確認
Get-AzureVNetConfig

# 仮想ネットワークを設定ファイルから構成
Set-AzureVNetConfig C:\PowerShell\AzureNetworkConfig.netcfg

OperationDescription  OperationId                           OperationStatus
--------------------  -----------                           ---------------
Set-AzureVNetConfig   40b4ed06-828b-3e33-bfa6-734543c52d5f  Succeeded

# 確認
Get-AzureVNetConfig | Format-List *

XMLConfiguration     : <?xml version="1.0" encoding="utf-8"?>
                       <NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
                         <VirtualNetworkConfiguration>
                           <Dns />
                           <VirtualNetworkSites>
                             <VirtualNetworkSite name="azure-localnet" AffinityGroup="ag01">
                               <AddressSpace>
                                 <AddressPrefix>10.0.0.0/8</AddressPrefix>
                               </AddressSpace>
                               <Subnets>
                                 <Subnet name="ServiceNetwork">
                                   <AddressPrefix>10.0.0.0/24</AddressPrefix>
                                 </Subnet>
                               </Subnets>
                             </VirtualNetworkSite>
                           </VirtualNetworkSites>
                         </VirtualNetworkConfiguration>
                       </NetworkConfiguration>
OperationDescription : Get-AzureVNetConfig
OperationId          : 471f8fb3-2720-36c0-969b-b6b2c5bc8a88
OperationStatus      : Succeeded

Azure ストレージの作成

仮想マシンを保存するための Azure ストレージ(ストレージ アカウント)を作成します。ここではアカウント名を as01 としています。ストレージアカウント名は、Azure 全体で(他の利用者も含めて)一意である必要があります。

# ストレージアカウントが作成されていないことを確認
Get-AzureStorageAccount

# ストレージアカウント as01 を作成
New-AzureStorageAccount -StorageAccountName as01 -AffinityGroup ag01

OperationDescription     OperationId                           OperationStatus
--------------------     -----------                           ---------------
New-AzureStorageAccount  66d23250-a72b-39db-aabb-240dd2f2eeb1  Succeeded

# 確認
Get-AzureStorageAccount

StorageAccountDescription : 
AffinityGroup             : ag01
Location                  : 
GeoReplicationEnabled     : True
GeoPrimaryLocation        : East Asia
GeoSecondaryLocation      : Southeast Asia
Label                     : as01
StorageAccountStatus      : Created
StatusOfPrimary           : 
StatusOfSecondary         : 
Endpoints                 : {http://as01.blob.core.windows.net/, http://as01.queue.core.windows.net/, http://as01.table.core.windows.net/}
StorageAccountName        : as01
OperationDescription      : Get-AzureStorageAccount
OperationId               : eeb9a769-9f64-3c53-8f65-66e3e3c363e7
OperationStatus           : Succeeded

1 台目のドメインコントローラーを展開

仮想ネットワークとストレージが準備できたら仮想マシンを展開します。仮想マシンを展開する際は、以下の情報が必要です。

  • 仮想マシン名(ここでは dc01)
  • サービス名(ここでは olab2013-dc01)
  • 配置するストレージ(ここでは as01)
  • 配置するアフィニティグループ(ここでは ag01)
  • 接続するネットワークとサブネット(ここでは azure-localnet と ServiceNetwork)
  • 仮想マシンのインスタンスのサイズ(ここでは Small)
  • 管理者ユーザーのアカウント名とパスワード

重要なのは、ドメインコントローラーとなる仮想マシンを展開する順番です。今回は、Azure 仮想ネットワーク上で最初の仮想マシンとなるので、仮想ネットワークから(先頭 3 つを除いた)最初の IP アドレスがアサインされることになります。(10.0.0.4 となります。)同様に、2 台目のドメインコントローラーをこの直後に展開するため、2 台目のアドレスは 10.0.0.5 となります。現状では、これらのアドレスを DNS サーバのアドレスとして直接埋め込む必要があります。

# ストレージアカウントの指定
Set-AzureSubscription -SubscriptionName "無料評価版" -CurrentStorageAccount as01

# 使用するストレージの確認 (CurrentStorageAccountName の値)
Get-AzureSubscription

SubscriptionName           : 無料評価版
SubscriptionId             : 808b4e2d-c89e-4aba-918b-1811cb4c85be
ServiceEndpoint            : https://management.core.windows.net/
ActiveDirectoryEndpoint    : 
ActiveDirectoryTenantId    : 
IsDefault                  : True
Certificate                : [Subject]
                               CN=Windows Azure Tools
                             
                             [Issuer]
                               CN=Windows Azure Tools
                             
                             [Serial Number]
                               26127962D5C558AB4DD2E6F5D9D982B1
                             
                             [Not Before]
                               2013/12/08 14:41:17
                             
                             [Not After]
                               2014/12/08 14:41:17
                             
                             [Thumbprint]
                               66D4E53ED529DF720B4360EF1007857EC70017B3
                             
CurrentStorageAccountName  : as01
CurrentCloudStorageAccount : 
ActiveDirectoryUserId      : 

# 1 台目の DC なので、DNS は localhost, 10.0.0.5
$dns1 = New-AzureDNS -Name 'localhost' -IPAddress '127.0.0.1'
$dns2 = New-AzureDNS -Name 'dc02' -IPAddress '10.0.0.5'

# 展開するイメージの指定
$image = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201311.01-en.us-127GB.vhd'

$vmname = 'dc01'
$service = 'olab2013-' + $vmname
$ag = 'ag01'
$vnet = 'azure-localnet'
$subnet = 'ServiceNetwork'
$size = 'Small'

$username = '<アカウント名>'
$password = '<パスワード>'

$vm = New-AzureVMConfig -Name $vmname -InstanceSize $size -ImageName $image `
        | Add-AzureProvisioningConfig -Windows -AdminUsername $username -Password $password `
        | Add-AzureDataDisk -CreateNew -DiskSizeInGB 100 -DiskLabel ($vmname + "-disk01") -LUN 0 -HostCaching None `
        | Add-AzureDataDisk -CreateNew -DiskSizeInGB 100 -DiskLabel ($vmname + "-disk02") -LUN 1 -HostCaching None `
        | Set-AzureSubnet -SubnetNames $subnet

# 仮想マシン作成
New-AzureVM -ServiceName $service -AffinityGroup $ag -VMs $vm -DnsSettings $dns1,$dns2 -VNetName $vnet

OperationDescription  OperationId                           OperationStatus
--------------------  -----------                           ---------------
New-AzureVM           ca8e7131-f6e9-353e-a684-b44165e9267d  Succeeded
New-AzureVM           33c8f2cb-041a-3e38-a6a5-2f56c97f1fe7  Succeeded

# 確認 (Status が ReadyRole になるまで時間がかかる)
Get-AzureVM

ServiceName    Name  Status
-----------    ----  ------
olab2013-dc01  dc01  ReadyRole

展開に使用できるイメージの一覧は、Get-AzureVMImage で取得できます。今回は、100GB のディスクを 2 つ追加して仮想マシンを展開しています。(Azure 仮想マシンの場合、ディレクトリ データベース ファイルをシステムドライブ配下に保存することは推奨されませんので、データベース用とバックアップ用で 2 つのディスクを追加しています。)

1 台目のドメインコントローラーを構成

展開した Azure 仮想マシン上で Active Directory Domain Service を構成します。(構成方法はローカル インストールの場合と同様なので、ここでは省略します。)

注意点としては、以下の通りです。

  • IP アドレスが DHCP で構成する設定となっている旨警告が表示されるが、無視する
  • 追加ディスク上に NTDS データベースファイルを配置する

展開した仮想マシンに対して PowerShell で接続する方法については、別のエントリとして投稿します。

2 台目のドメインコントローラーを展開

2台目のドメインコントローラーとなる仮想マシンを展開します。基本的に 1 台目と同様ですが、2 台目以降は仮想マシンのプロビジョニングの中で、ドメインへの参加が行われます。

Set-AzureSubscription -SubscriptionName "無料評価版" -CurrentStorageAccount as01

# 2 台目の DC なので、DNS は localhost, 10.0.0.4
$dns1 = New-AzureDNS -Name 'localhost' -IPAddress '127.0.0.1'
$dns2 = New-AzureDNS -Name 'dc01' -IPAddress '10.0.0.4'

$image = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201311.01-en.us-127GB.vhd'

$vmname = 'dc02'
$service = 'olab2013-' + $vmname
$ag = 'ag01'
$vnet = 'azure-localnet'
$subnet = 'ServiceNetwork'
$size = 'Small'

$username = '<アカウント名>'
$password = '<パスワード>'

# join するドメインを指定
$domain = 'example.local'

# ドメインに参加する際のユーザーとパスワードを追加で指定
$vm = New-AzureVMConfig -Name $vmname -InstanceSize $size -ImageName $image `
        | Add-AzureProvisioningConfig -WindowsDomain -AdminUsername $username -Password $password -Domain $domain -DomainUserName $username -DomainPassword $password -JoinDomain $domain `
        | Add-AzureDataDisk -CreateNew -DiskSizeInGB 100 -DiskLabel ($vmname + "-disk01") -LUN 0 -HostCaching None `
        | Add-AzureDataDisk -CreateNew -DiskSizeInGB 100 -DiskLabel ($vmname + "-disk02") -LUN 1 -HostCaching None `
        | Set-AzureSubnet -SubnetNames $subnet

# 仮想マシンの展開
New-AzureVM -ServiceName $service -AffinityGroup $ag -VMs $vm -DnsSettings $dns1,$dns2 -VNetName $vnet

OperationDescription  OperationId                           OperationStatus
--------------------  -----------                           ---------------
New-AzureVM           6af0f266-9666-3a42-8b13-c3d6eac7a2eb  Succeeded
New-AzureVM           013f013d-0651-3806-be88-d5eb84a16d87  Succeeded

# 確認
Get-AzureVM

ServiceName    Name  Status
-----------    ----  ------
olab2013-dc01  dc01  ReadyRole
olab2013-dc02  dc02  ReadyRole

注意すべき点は、1 台目のドメインコントローラーとは異なるクラウドサービスへ展開することです。同じクラウドサービスへ複数の仮想マシンを展開することはできますが、DNS の設定が異なる仮想マシンは同一クラウドサービス上に展開できません。展開しようとすると、以下の様な警告が表示され、指定した DNS の設定ではなくクラウドサービス作成時の DNS 設定で仮想マシンが展開されます。

警告: VNetName, DnsSettings, DeploymentLabel or DeploymentName Name can only be specified on new deployments.

仮想マシンは展開されてしまうので、注意が必要です。

仮想マシンの展開が完了したら、1 台目と同様 Active Directory Domain Service の構成を行います。

その他のサーバーの展開

ドメインコントローラー以外のサーバーについては、2 台目のドメインコントローラーと同様のコマンドを使用して展開を行います。DNS のパラメーターのみ変更すれば問題ありません。

広告

Written by kazu

2013/12/09 @ 00:01

カテゴリー: PowerShell, Windows Azure

Tagged with ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。