Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

DocumentDB Emulator が動かない場合の対処

DocumentDB Emulatorが提供されていますが、手元の環境で動作しなかったので、その解決作などをメモッて起きます。

DocumentDB Emulatorは以下から入手可能です。

docs.microsoft.com

DBが作成できない

動作しない大抵の現象はDBが作成できないようです。Emulatorを起動すると、データエクスプローラが起動します。そこからDBを作成してみてウンともスンとも言わなかったら、この現象に遭遇している可能性が高いです。またサンプルを起動して動かすと、DB作成時に例外が発生するでしょう。

調査

有名どころのIssueとして、以下があります。結果、完全に解決しておらず、個別の環境問題だから、トレースファイル取得して送ってくれとのこと。

github.com

トレースファイル取得は、1番うえのURLにも書かれていますが、以下の手順を実行しつつ、DBを作成してみます(作成できませんが)

cd /d "%ProgramFiles%\DocumentDB Emulator"
DocumentDB.Emulator.exe /shutdown
DocumentDB.Emulator.exe /starttraces
DocumentDB.Emulator.exe
DocumentDB.Emulator.exe /stoptraces
DocumentDB.Emulator.exe /shutdown

トレース、DocumentDBを停止しますと、docdbemulator_000001.etl が作成されます。それを、メールに投げれば個別に調査してくれます(宛先はリンク先参照)

原因

自分の場合は、結果は一晩(時差)で返信がありました。LANアダプタに割り当てられている、IPアドレス以外をリッスンしているよ、とのことでした。そのIPアドレスは、特定のVPN接続時に利用するアドレスでしたので、そのアダプタを無効(Disable)にしてみたら、無事動作しました。

たぶん、そんなことだろうなとは思っていましたが、具体的な追求に時間を費やすのもあれなので、さくっとメール投げて解決できたので良かったと思います。

Emulatorのバグだとは思いますが、事例が蓄積され将来修正されると思いますが。 類似事例で参考になれば。

既存の仮想マシンをManaged Disksを使った仮想マシンに変換する

タイトル通りです。Unmanaged から Managed Disksへの変換は、ConvertTo-AzureRmVMManagedDisk コマンド1つでできます。 VMは停止しておく必要があります。

> ConvertTo-AzureRmVMManagedDisk -ResourceGroupName hoge-VMName fuga

Name      : 8af88137-cc93-487a-b326-9aad1444ba6a
Status    : Succeeded
StartTime : 2017/02/10 12:22:50
EndTime   : 2017/02/10 12:24:11
Error     : 

1分もかからず変換が終わりました。VMの情報を見てみるとManaged Disksに変換されています。Portalを見てもディスクが出来ていることを確認できるでしょう。(変換前にどうなっているか見ておくのを忘れたので比較できなかった)

> $vm = Get-AzureRmVM -ResourceGroupName hoge -Name fuga
> $vm.StorageProfile.OsDisk


OsType             : Windows
EncryptionSettings : 
Name               : pbivm_pbivm
Vhd                : 
Image              : 
Caching            : ReadWrite
CreateOption       : FromImage
DiskSizeGB         : 
ManagedDisk        : Microsoft.Azure.Management.Compute.Models.ManagedDiskParameters

失敗した人もいるみたいですから、本番への適用は慎重に。

Managed Disks を PowerShellで操作する

Managed Disksの操作には3.5以降のAzure PowerShellが必要です。この記事を執筆時点で Web Platform Installerからはインストールできないので、以下から入手する必要があります。

Release 3.5.0 · Azure/azure-powershell · GitHub

Diskの状態を見る

Diskの状態を見るにはGet-AzureRmDisk コマンドを使います。出力は例は以下の通り。沢山あるときは、Format-Tableでパイプすれば、見やすくなるでしょう。

PS C:\> Get-AzureRmDisk

ResourceGroupName  : MANAGEDDISKS
AccountType        : StandardLRS
TimeCreated        : 2017/02/09 12:13:10
OsType             : Windows
CreationData       : Microsoft.Azure.Management.Compute.Models.CreationData
DiskSizeGB         : 128
EncryptionSettings : 
OwnerId            : /subscriptions/xxx/resourceGroups/manageddisks/providers/Microsoft.Compute/virtualMachines/mmvm
ProvisioningState  : Succeeded
Id                 : /subscriptions/xxx/resourceGroups/MANAGEDDISKS/providers/Microsoft.Compute/disks/mmvm
Name               : mmvm
Type               : Microsoft.Compute/disks
Location           : japaneast
Tags               : {}

空のDiskを作る

2つのコマンドを組み合わせます。New-AzureRmDiskConfigで構成オブジェクトを作って、New-AzureRmDiskへの入力とします。

> $config = New-AzureRmDiskConfig -AccountType StandardLRS -OsType Windows -Location japaneast -CreateOption Empty -DiskSizeGB 32
> New-AzureRmDisk -ResourceGroupName manageddisks -DiskName datadisk -Disk $config

AccountType        : StandardLRS
TimeCreated        : 2017/02/10 10:38:04
OsType             : Windows
CreationData       : Microsoft.Azure.Management.Compute.Models.CreationData
DiskSizeGB         : 32
EncryptionSettings : 
OwnerId            : 
ProvisioningState  : Succeeded
Id                 : /subscriptions/xxx/resourceGroups/manageddisks/providers/Microsoft.Compute/disks/datadisk
Name               : datadisk
Type               : Microsoft.Compute/disks
Location           : japaneast
Tags               : 

既存のVMにアタッチする

上で作ったDataDiskを既存のVMにアタッチしてみます。今までのようにBLOB URIではなく、Managed DiskのIDを指定するのが違うところでしょうか。特に操作感は変わらないと思います。

$disk = Get-AzureRmDisk -ResourceGroupName manageddisks -DiskName datadisk
$vm = Get-AzureRmVM -ResourceGroupName manageddisks -Name mmvm
$vm = Add-AzureRmVMDataDisk -VM $vm -Name datadisk -CreateOption Attach -ManagedDiskId $disk.Id -Lun 2
Update-AzureRmVM -ResourceGroupName manageddisks -VM $vm

以上