Posted at

Mac で PowerShell + Azure 操作する (Preview)

More than 1 year has passed since last update.

Azure 管理に、Windows で使う powershell コマンドを Mac で開発できる? という疑問を解決してみたら出来たという手順紹介。いい時代になってきた。

パッケージ
バージョン

OS X
10.11.6 , El Capitan

PowerShell
v6.0.0-alpha.14

AzureRM.NetCore.Preview (PowerShell Module)
0.3.4


前提 :

公式こちらのエントリーなどを参考に、PowerShellをMacにインストールしてください。

正常にインストールされると shell から powershell コマンドが使えるようになります。

$ which powershell

/usr/local/bin/powershell


やりたいこと :

Azure を スクリプトで操作したいと考えました。先々、Windowsクライアントで管理するため PowerShell でやれたらいいなと。

検索したら、MSさんから公式ライブラリも提供あり。

が、こちらの Module で Mac はサポートされてないことがインストールして判明。Macがというか .NetCore での動作がサポートされていないというのが正確みたい。確かに Tag 打たれてないわ。

探した結果、こっちなればいける。Tag にも Mac ってあるし (もちろん Linux も)。

GitHub にも説明あった

それで、ここにあるってことは、PowerShellからも取得できるよね?と、やってみた(のが、本題)。


やったこと :

5.0から、パッケージマネージャー Package Management(旧OneGet)が同梱 されたということで、確認。

PS > Get-PackageProvider

Name Version DynamicOptions
---- ------- --------------
NuGet 2.8.5.208 Destination, ExcludeVersion, Scope, ...
PowerShellGet 1.1.2.0 PackageManagementProvider, Type, Sco...

標準Providerに、PowerShellGet が登録されているので、新たに登録せずにOK (PowerShellGallaryを探しにいってくれる) 。

PS > Find-Package AzureRM.NetCore.Preview

Name Version Source Summary
---- ------- ------ -------
AzureRM.NetCore.Preview 0.3.4 PSGallery [PowerShell C...

ちゃんと発見!じゃあインストール。

まずは root で PowerShell を起動 (あとの Install で怒られないように)

$ sudo powershell

Password:xxxyyyzzz

PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS >

PS > Install-Package AzureRM.NetCore.Preview

依存パッケージと共にインストールされた。

PS > Get-Package                                                                                  

Name Version Source
---- ------- ------
AzureRM.NetCore.Preview 0.3.4 https://www.powershellgallery...
AzureRM.Profile.NetCore.Pre... 0.3.4 https://www.powershellgallery...
AzureRM.Resources.NetCore.P... 0.3.4 https://www.powershellgallery...
PackageManagement 1.1.2.0 https://powershell.myget.org/...
PowerShellGet 1.1.2.0 https://powershell.myget.org/...


つかってみる :

PS > Import-Module AzureRM.NetCore.Preview

PS > Login-AzureRmAccount

ブラウザあげて、デバイス認証を通す

PS > Get-AzureRmResourceGroup                                                                     

ResourceGroupName : hogehoge
Location : japanwest
ProvisioningState : Succeeded
Tags :
...

使えた!

あとは公式のデモを参照するとよさげです。

Cmdlet一覧みてみるとこんな感じ

> Get-Command -Module AzureRm*                                                                 

CommandType Name Version Sou
rce
----------- ---- ------- ---
Alias Login-AzureRmAccount 0.3.4 Azu
Alias Select-AzureRmSubscription 0.3.4 Azu
Cmdlet Add-AzureRmAccount 0.3.4 Azu
Cmdlet Add-AzureRmEnvironment 0.3.4 Azu
Cmdlet Disable-AzureRmDataCollection 0.3.4 Azu
Cmdlet Enable-AzureRmDataCollection 0.3.4 Azu
Cmdlet Export-AzureRmResourceGroup 0.3.4 Azu
Cmdlet Find-AzureRmResource 0.3.4 Azu
Cmdlet Find-AzureRmResourceGroup 0.3.4 Azu
Cmdlet Get-AzureRmADApplication 0.3.4 Azu
Cmdlet Get-AzureRmADGroup 0.3.4 Azu
Cmdlet Get-AzureRmADGroupMember 0.3.4 Azu
Cmdlet Get-AzureRmADServicePrincipal 0.3.4 Azu
Cmdlet Get-AzureRmADUser 0.3.4 Azu
Cmdlet Get-AzureRmContext 0.3.4 Azu
Cmdlet Get-AzureRmEnvironment 0.3.4 Azu
Cmdlet Get-AzureRmLocation 0.3.4 Azu
Cmdlet Get-AzureRmPolicyAssignment 0.3.4 Azu
Cmdlet Get-AzureRmPolicyDefinition 0.3.4 Azu
Cmdlet Get-AzureRmProviderFeature 0.3.4 Azu
Cmdlet Get-AzureRmProviderOperation 0.3.4 Azu
Cmdlet Get-AzureRmResource 0.3.4 Azu
Cmdlet Get-AzureRmResourceGroup 0.3.4 Azu
Cmdlet Get-AzureRmResourceGroupDeployment 0.3.4 Azu
Cmdlet Get-AzureRmResourceGroupDeploymentOperation 0.3.4 Azu
Cmdlet Get-AzureRmResourceLock 0.3.4 Azu
Cmdlet Get-AzureRmResourceProvider 0.3.4 Azu
Cmdlet Get-AzureRmRoleAssignment 0.3.4 Azu
Cmdlet Get-AzureRmRoleDefinition 0.3.4 Azu
Cmdlet Get-AzureRmSubscription 0.3.4 Azu
Cmdlet Get-AzureRmTenant 0.3.4 Azu
Cmdlet Invoke-AzureRmResourceAction 0.3.4 Azu
Cmdlet Move-AzureRmResource 0.3.4 Azu
Cmdlet New-AzureRmADApplication 0.3.4 Azu
Cmdlet New-AzureRmADServicePrincipal 0.3.4 Azu
Cmdlet New-AzureRmPolicyAssignment 0.3.4 Azu
Cmdlet New-AzureRmPolicyDefinition 0.3.4 Azu
Cmdlet New-AzureRmResource 0.3.4 Azu
Cmdlet New-AzureRmResourceGroup 0.3.4 Azu
Cmdlet New-AzureRmResourceGroupDeployment 0.3.4 Azu
Cmdlet New-AzureRmResourceLock 0.3.4 Azu
Cmdlet New-AzureRmRoleAssignment 0.3.4 Azu
Cmdlet New-AzureRmRoleDefinition 0.3.4 Azu
Cmdlet Register-AzureRmProviderFeature 0.3.4 Azu
Cmdlet Register-AzureRmResourceProvider 0.3.4 Azu
Cmdlet Remove-AzureRmADApplication 0.3.4 Azu
Cmdlet Remove-AzureRmADServicePrincipal 0.3.4 Azu
Cmdlet Remove-AzureRmEnvironment 0.3.4 Azu
Cmdlet Remove-AzureRmPolicyAssignment 0.3.4 Azu
Cmdlet Remove-AzureRmPolicyDefinition 0.3.4 Azu
Cmdlet Remove-AzureRmResource 0.3.4 Azu
Cmdlet Remove-AzureRmResourceGroup 0.3.4 Azu
Cmdlet Remove-AzureRmResourceGroupDeployment 0.3.4 Azu
Cmdlet Remove-AzureRmResourceLock 0.3.4 Azu
Cmdlet Remove-AzureRmRoleAssignment 0.3.4 Azu
Cmdlet Remove-AzureRmRoleDefinition 0.3.4 Azu
Cmdlet Save-AzureRmProfile 0.3.4 Azu
Cmdlet Save-AzureRmResourceGroupDeploymentTemplate 0.3.4 Azu
Cmdlet Select-AzureRmProfile 0.3.4 Azu
Cmdlet Set-AzureRmContext 0.3.4 Azu
Cmdlet Set-AzureRmEnvironment 0.3.4 Azu
Cmdlet Set-AzureRmPolicyAssignment 0.3.4 Azu
Cmdlet Set-AzureRmPolicyDefinition 0.3.4 Azu
Cmdlet Set-AzureRmResource 0.3.4 Azu
Cmdlet Set-AzureRmResourceGroup 0.3.4 Azu
Cmdlet Set-AzureRmResourceLock 0.3.4 Azu
Cmdlet Set-AzureRmRoleDefinition 0.3.4 Azu
Cmdlet Stop-AzureRmResourceGroupDeployment 0.3.4 Azu
Cmdlet Test-AzureRmResourceGroupDeployment 0.3.4 Azu
Cmdlet Unregister-AzureRmResourceProvider 0.3.4 Azu


ちなみに :

Azure Module をいれても、Import-Moduleのところで落ちます

Import-Module : The given assembly name or codebase was invalid. (Exception from 

HRESULT: 0x80131047)
At line:1 char:1
+ Import-Module Azure
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Import-Module], FileLoadExcepti
on
+ FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.C
ommands.ImportModuleCommand

こちら の情報をもとに、.NetCore.Preview に行き着きました。

プラットフォーム自身の依存関係、PackageManagerで解決してくれるようになったら最強だなぁ。


感想 :

これまで VM 上のWin であれこれやってたけど、Windows本体を管理するケース以外は、このような使い方が広まるのかも。.NetCore と .Net本体との差分がどれだけあるかは知らないので、.NetCore側のモジュールが追いつくには、しばらく先の話かも。

PowerShell のコマンドは、慣れてくるとCmdletの命名規則も一環してたりと結構好きです。


その他 :

Mac特有の情報は、公式がまとまっていていいと思いました。

* Package installation instructions > MacOS 10.11

6.0-alpha-14.0 では Get-Snapin が使えない事が、別の操作でわかりました。なんでもかんでもサポートってわけには、まだ行きませんね(プラットフォーム違うのだから当たり前)