Azureの小ネタ (改)

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

Azure PowerShellで認証情報を保存する

Azure Powershellで認証を行うには、Add-AzureRmAccountを使ったりましますが、PowerShellを終了してしまうと認証が維持されません。再度ログインすると、ログイン画面から認証まで微妙に時間がかかったりして、イラットすることもしばしば。

そんなときSave-AzureRmProfile/Select-AzureRmProfileってコマンドを見つけたので調べてみたら思った通りのことができたのでした。

認証した状態で、Saveして、使う時にSelectすればいいみたいです。

# セッションを保存
Save-AzureRMProfile -Path hoge.json

# セッションを復元
Select-AzureRmProfile -Path hoge.json

Save-AzureRmProfileコマンドは、「Saves the current authentication information for use in other PowerShell sessions.」って書いてありますね。以下のIssueでも取り上げられたりしてます。

ARM: Add-AzureRmAccount doesn't persist credentials between sessions · Issue #1272 · Azure/azure-powershell · GitHub

これで複数のアカウント切り替えも捗りそうです。

Azure VM V2 (Azure Resource Manager) のディスク拡張をする

仮想マシンV2(いわゆるAzure Resource Manager)での ディクス拡張方法です。

拡張後のOS操作は以下と同様だと思います(未確認)

PowerShell

ポータルでも簡単にできるのですが、よくつかうPowerShellにて。

$rg = "hoge-rg"
$vmname = "hoge-vm"

$vm = Get-AzureRmVM $rg $vmname
$vm.StorageProfile.DataDisks[0]
$vm.StorageProfile.DataDisks[0].DiskSizeGB = 100
Update-AzureRmVM $vm.ResourceGroupName -VM $vm

VM情報とって、StorageProfile中のデータティスクサイズを書き換えて、Updateすると更新されます。VMがDeallocate状態な必要があります。 起動中ですと以下のようなエラーが表示されます。

Name            : hogehoge-20160302-111948
DiskSizeGB      : 50
Lun             : 0
Caching         : None
CreateOption    : Empty
SourceImage     : 
VirtualHardDisk : 
Update-AzureRmVM : Disk resizing is allowed only when creating a VM or when the VM is dea
llocated.
StatusCode: 400
ReasonPhrase: Bad Request
OperationID : 'e098ea5b-1a19-46d1-86de-98a522d1a495'
発生場所 行:7 文字:1
+ Update-AzureRmVM $vm.ResourceGroupName -VM $vm
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Update-AzureRmVM]、ComputeCloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.UpdateAzureVMCommand

ちなみにShrinkはできません。

ErrorMessage: Shrinking a disk from 107374182912 bytes to 53687091712 bytes is not supported.

となります。

Azure SDK for Python を使う

Azure SDK for Python を試す機会があったので備忘録として。

ちなみにPythonはVisual Studio上でプロジェクト作ってデバッグして実行できて便利になってますが、その辺りのセットアップ方法は以下。

SDK関連は以下です。

他のSDKと同様、Python SDKも過渡期です。旧来のSDKからAutoRestを使ったフレームワークに移行中です。以下は、2.0.0a1 というAutoRest のα版を使っています。調べるドキュメントが古かったりすると、全然違うので、お気をつけてください。

インストール

pip にて、バージョン指定してインストールします。パッケージ情報は以下の通りです。

> pip install azure=2.0.0a1
...
...
> pip freeze
adal==0.1.0
azure==2.0.0a1
azure-common==1.0.0
azure-graphrbac==0.30.0a1
azure-mgmt==0.30.0a1
azure-mgmt-authorization==0.30.0a1
azure-mgmt-cdn==0.30.0a1
azure-mgmt-compute==0.30.0a1
azure-mgmt-logic==0.30.0a1
azure-mgmt-network==0.30.0a1
azure-mgmt-notificationhubs==0.30.0a1
azure-mgmt-nspkg==1.0.0
azure-mgmt-redis==0.30.0a1
azure-mgmt-resource==0.30.0a1
azure-mgmt-scheduler==0.30.0a1
azure-mgmt-storage==0.30.0a1
azure-mgmt-web==0.30.0a1
azure-nspkg==1.0.0
azure-servicebus==0.20.1
azure-servicemanagement-legacy==0.20.2
azure-storage==0.30.0

VMの開始とか

詳細は省きますが、コード的には他言語のAutoRestとほぼ同じです。操作は非同期っぽく(JavaやNETはSyncとAsyncメソッド両方用意されている)、戻り値をwaitしてやってください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from msrestazure.azure_active_directory import ServicePrincipalCredentials
from azure.mgmt.compute import ComputeManagementClient, ComputeManagementClientConfiguration
from azure.mgmt.network import NetworkManagementClient, NetworkManagementClientConfiguration
from msrestazure.azure_operation import AzureOperationPoller

sub = 'your subscription id'
ten = 'your tenant id'
app = 'your application id'
pwd = 'your application password'

credentials = ServicePrincipalCredentials(app, pwd, tenant=ten)

compute_client = ComputeManagementClient(ComputeManagementClientConfiguration(credentials, sub))

resoureGroup = 'hogerg'
vmName       = 'fugavm'

res = compute_client.virtual_machines.start(resoureGroup, vmName)
res.wait()

インテリセンスの効きがresまで効いてくれないので、少し面倒臭いです。なんか設定で回避できるのかもしれませんが。

以上