Azureの小ネタ (改)

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

仮想マシンV2の論理構造

7月頃にかいて、下書に入れっぱなしだったので、中味確認せず放流しておきます。

いままで作成した仮想マシンV2の構成を俯瞰できるよう、ARM PowerShellとかJSONテンプレを参考に、モデリングしてました。ざっくりとした書き起こしなので、興味が無い部分は割愛、属性名、属性の型(列挙であるところも適当にStringとかではしょってる)、関連やその関連の多重度なども間違っているかもしれませんのであしからず。

ざっと見て貰えれば特に解説は不要かもしれません。

  • リソースとして定義されているもの(仮想マシン、仮想ネットワーク、ストレージ、NICなど)は、Resourceを実装
  • 仮想マシンからNIC、ストレージへの関連あり
  • NICからはパブリックIPやサブネット、セキュリティグループへの依存あり
  • 仮想マシンはサブネットを包含、セキュリティグループへの依存あり

ってことを図示しているわけですからまあ蛇足です。

f:id:StateMachine:20150718172533p:plain

雑感など。

  • 理解が捗るので、こういったメタモデルを提供してくれると嬉しい
  • いまのところ既存JSONやMSDNのREST APIドキュメントを読み解かないと行けないきがする
  • モデルの制約がわからないし、ドキュメントみてもわからないことがおおい。UMLで制約書いてくれるとうれしい。

こういうのは、モデリングフレームワークはEMF があって色々できそうなんだけども 手が廻りません。

新しいAzure PowerShell で 仮想マシンV2を作成する

前回の記事では、Azure PowerShellの仕様が変わった件について書いたのですが、それより前に記事とした 仮想マシンV2 と ロードバランサーを作成するサンプルスクリプト - Azureの小ネタ (改) がそのままでは動かなくなっているので、さくっと書き換えてみます。

基本的に

[Verb]-AzureRm[Noun]

で書き換えれば問題ありませんが、一部引数が違う(New-AzureRmVm)がありました。とりあえず書き換えて実行できたサンプルを挙げておきます。

$rg      = "testrg2"
$loc     = "japanwest"
$storage = "somestorage"あら
$domain  = "somedomain"
$osDisk  = "https://{0}.blob.core.windows.net/vhds/OsDisk.vhd" -f $storage

$vmName  = "someVmName"
$computerName = "someComputerName"

$nicName     = "myNic"

$subnet1Name = "Subnet-1"
$subnet2Name = "Subnet-2"
$vnetName    = "myVnet"

$vnetPrefix        = "10.0.0.0/8"
$subnet1Prefix     = "10.0.0.0/24"
$privateIpAddress  = "10.0.0.10"

#$VerbosePreference = "stop"

# リソースグループの作成
New-AzureRmResourceGroup -Name $rg -Location $loc

# サブネットの作成
$vnet   = New-AzureRmVirtualNetwork -ResourceGroupName $rg -Location $loc `
    -Name $vnetName -AddressPrefix $vnetPrefix 

$vnet = $vnet | Add-AzureRmVirtualNetworkSubnetConfig -Name $subnet1Name -AddressPrefix $subnet1Prefix | 
                Set-AzureRmVirtualNetwork

$subnet1 = Get-AzureRmVirtualNetworkSubnetConfig -Name $subnet1Name -VirtualNetwork $vnet

$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $rg -Name $vnetName -Verbose

# パブリックIPアドレスの作成
$ip = New-AzureRmPublicIpAddress -ResourceGroupName $rg -Location $loc `
    -Name myPublicIp -AllocationMethod Dynamic -DomainNameLabel $domain -Verbose

# ネットワークインタフェースの作成 
$nic    = New-AzureRmNetworkInterface -ResourceGroupName $rg -Location $loc `
    -Name $nicName -PrivateIpAddress $privateIpAddress -Subnet $subnet1 -PublicIpAddress $ip -Verbose


# ストレージアカウント LRSで作成
New-AzureRmStorageAccount -ResourceGroupName $rg -Location $loc `
    -Name $storage -Type Standard_LRS


# User/Passwordの設定
$creds = Get-Credential

# VMの構成 Ubuntu 14.04-LTS 
$config = `
    New-AzureRmVMConfig -VMName $vmName -VMSize Standard_A1 |
    Set-AzureRmVMOperatingSystem -Linux -ComputerName $computerName -Credential $creds |
    Set-AzureRmVMSourceImage -PublisherName canonical -Offer UbuntuServer -Skus 14.04.2-LTS -Version 14.04.201506100 |
    Set-AzureRmVMOSDisk -Name "ubuntuOsDisk" -CreateOption fromImage -Caching ReadWrite -VhdUri $osDisk |
    Add-AzureRmVMNetworkInterface -Id $nic.Id 

# VMの作成
New-AzureRmVM  -ResourceGroupName $rg -Location $loc -VM $config  

Azure PowerShell 1.0 Preview

Azure PowerShell 1.0 Preview がアナウンスされました。

azure.microsoft.com

Azure Resource Manager (ARM) による管理APIが追加され、それによって Switch-AzureMode にてARM<->ASMを切り替える実装になりましたが、同名で異なる動きをするコマンドが多く不評でした。そのような中、Switch-AzureModeの廃止が提案されたのですが、当初は ASM コマンドをリネームするとアナウンスされて、古いほうを変えて、既存のドキュメントとスクリプト資産をどうするんだと憤りましたが、結局はARMを変えることで落ち着きました。

Deprecation of Switch AzureMode in Azure PowerShell · Azure/azure-powershell Wiki · GitHub

というわけで、基本的には

[Verb]-AzureRm[Noun]

という、Rmが間に挟まる形式になりました。ということで、既存の資産はほぼリネームだけでいける気がします。リファレンスは以下の通り。

Azure Cmdlet Reference

インストール

以前の Azure PowerShell がインストールされていたら、まずはアンインストールしておきましょう。

1.0からは、PowerShellGet という仕組みでインストールするらしく、Windows 10 ではデフォルトで組み込まれていますが、Windows 8などは、Windows Management Framework 5.0が必要です。

Download Windows Management Framework 5.0 Production Preview from Official Microsoft Download Center

PowerShellを管理者権限で以下を実行します。

PS C:\> Install-Module AzureRM

PS C:\> Install-AzureRM
Installing AzureRM modules.
AzureRM.Profile 0.10.0 installed [1/24]...
Azure.Storage 0.10.1 installed [2/24]...
AzureRM.ApiManagement 0.10.0 installed [3/24]...
AzureRM.Automation 0.10.0 installed [4/24]...
AzureRM.Backup 0.10.0 installed [5/24]...
AzureRM.Batch 0.10.0 installed [6/24]...
AzureRM.Compute 0.10.0 installed [7/24]...
AzureRM.DataFactories 0.10.0 installed [8/24]...
AzureRM.Dns 0.10.0 installed [9/24]...
AzureRM.HDInsight 0.10.0 installed [10/24]...
AzureRM.Insights 0.10.0 installed [11/24]...
AzureRM.KeyVault 0.10.0 installed [12/24]...
AzureRM.Network 0.10.0 installed [13/24]...
AzureRM.OperationalInsights 0.10.0 installed [14/24]...
AzureRM.RedisCache 0.10.0 installed [15/24]...
AzureRM.Resources 0.10.0 installed [16/24]...
AzureRM.SiteRecovery 0.10.0 installed [17/24]...
AzureRM.Sql 0.10.0 installed [18/24]...
AzureRM.Storage 0.10.1 installed [19/24]...
AzureRM.StreamAnalytics 0.10.0 installed [20/24]...
AzureRM.Tags 0.10.0 installed [21/24]...
AzureRM.TrafficManager 0.10.0 installed [22/24]...
AzureRM.UsageAggregates 0.10.0 installed [23/24]...
AzureRM.Websites 0.10.0 installed [24/24]...

PS C:\> Import-AzureRM
Importing AzureRM modules.
AzureRM.ApiManagement imported...
AzureRM.Automation imported...
AzureRM.Backup imported...
AzureRM.Batch imported...
AzureRM.Compute imported...
AzureRM.DataFactories imported...
AzureRM.Dns imported...
AzureRM.HDInsight imported...
AzureRM.Insights imported...
AzureRM.KeyVault imported...
AzureRM.Network imported...
AzureRM.OperationalInsights imported...
AzureRM.RedisCache imported...
AzureRM.Resources imported...
AzureRM.SiteRecovery imported...
AzureRM.Sql imported...
AzureRM.Storage imported...
AzureRM.StreamAnalytics imported...
AzureRM.Tags imported...
AzureRM.TrafficManager imported...
AzureRM.UsageAggregates imported...
AzureRM.Websites imported...

PS C:\> Get-Module

ModuleType Version    Name                                ExportedCommands                                                            
---------- -------    ----                                ----------------                                                            
Script     1.0.1      AzureRM                             {CheckIncompatibleVersion, Import-AzureRM, Install-ModuleWithVersionCheck...

Get-Module して、読み込まれていればOKでしょう。

認証とサブスクリプションまわり

認証は、Add-AzureRmAccountを使います。サブスクリプション一覧は、Get-AzureRmSubscription ですが、Allを指定しないと全て出てきませんので、以前と異なる挙動のです。

# 認証
Add-AzureRmAccount

## サブスクプション一覧
Get-AzureRmSubscription -All

SubscriptionName : xxxx-sbscr
SubscriptionId   : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
TenantId         : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

サブスクリプションの切り変えで、前回と異なるのは、テナントIdを意識しないといけないようです。

Select-AzureRmSubscription -SubscriptionId xxxx -TenantId yyyy

TenantId は必須パラメータではありませんが、異なるテナントId間で切り替えるときは、明示的に指定しないとエラーになりました。

以上、次回に続くはず。