Azureの小ネタ (改)

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

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

以上

Azure Managed Disks が GAしました

Azure Managed Disks (管理ディスクと訳されるようになったようです)がGAしました。今まで仮想マシンのディスク(VHD)は、明示的にストレージアカウントを作成しBLOBを紐付ける必要がありましたが、これらが不要となります。AWSからするとやや判りにくかった部分が解消されるのではないかと思います。

Announcing general availability of Managed Disks and larger Scale Sets | Blog | Microsoft Azure

Azure Premium and Standard Managed Disks Overview | Microsoft Docs

過去のVM Diskの管理

ちょっとだけ過去をさかのぼってみると。

クラシック VM時代もBLOBを利用していました。ただし、内部的にImage管理がなされており、BLOBの特定VHDファイルとVMから利用するImageの紐付けがなされていました。

リソースマネージャ時代になりBLOBを利用するのは変わりませんでしたが、内部的にImage管理をする必要がなくなりました。ただし、VHDの一覧が欲しかったりすると、Image管理されていなかったのでちょっと面倒くさかったりしました。

今回のManaged Disksは、ストレージアカウント・BLOB 管理煩雑さがなくなり、ディスク管理のしやすさを兼ね備えた感じになるかと思います。あとはVM Scale Setでスケールできない問題が解決できたり。

ポータル

すでにポータルから利用可能になっております。普通にVMを作成していくと、管理ディスクの使用の有無を聞かれます。これを「はい」にするだけです。

f:id:StateMachine:20170209211134p:plain

ディスクそのものをポータルから参照すると、以下のようになっています。そしていくつかの項目について操作可能になっています。

  • VMが停止しているときのみDiskを拡張できます(少なくはできません)
  • LSRのみです
  • Export を押すと、SAS付きのURLが生成されるので、HTTPベースでアクセスできそうですが、DiskがアタッチされているとNGでした。

f:id:StateMachine:20170209221034p:plain

お値段

価格表は以下です。トランザクション、容量ともに従来のLRSのBLOBと余り変わりません。

Pricing - Managed Disks | Microsoft Azure

が、2017年7月31日までは、容量については50%オフです。

Prices shown below reflect a 50% promotional discount. The promotion will be applied until July 31, 2017.

とりえあず以上

Power BI SDK Java

Power BI SDKは以下のものがGitHubで公開されています。

JavaScriptはEmbeddedするさいに利用するクライアントサイドで必要なもので、C# SDK は Embedded を操作するものやらASP.NETのヘルパーやらが用意されています。

C# SDKにふくまれる sdk/PowerBI.Api の部分はEmbeddedを操作するREST APIのラッパとなっています。これは、ご多分に漏れずAutoRestによるSwagger.jsonからの自動生成となっています。

入り用があったので、これをJava向けに自動生成しなおし+αしたものを、以下に置いておきました。

github.com

READMEにも書いておきましたので特に補足することはないのですが、

JWTの生成や、

PowerBIToken token = PowerBIToken.CreateReportEmbedToken(
    workspacename, 
    workspaceId, 
    reportId, 
    username, 
    null);
String jwt = powerbitoken.Generate(accessKey);

Embeddedのリポートへのアクセスができます。 一部のクラスしか試してないので、すべて動作するかは確認できていません。

TokenCredentials creds = new TokenCredentials("AppKey", key);
PowerBIClient client = new PowerBIClientImpl(creds);

ServiceResponse<ODataResponseListWorkspace> workspaces = client.getWorkspacesOperations()
                .getWorkspacesByCollectionName("<<collection name>>");

for (Workspace ws : workspaces.getBody().getValue()) {
    System.out.printf("%s\n", ws.getWorkspaceId());
    ServiceResponse<ODataResponseListReport> reports = client.getReportsOperations().getReports(collectionName,
                ws.getWorkspaceId());
    for (Report report : reports.getBody().getValue()) {
        System.out.printf("  %s\t%s\t%s\t%s\n", report.getName(), report.getId(), report.getEmbedUrl(), report.getWebUrl());
    }
}         

AutoRestのバージョンが古い(1.6)なので、ちょっと使いにくいクラス群が生成されますが、時間があれば最新で生成し直してみたいと思います。(C#も1.6で生成されているので、そこは会わせました)