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さんから公式ライブラリも提供あり。
- PowerShell Gallary > Azure 3.3.0
- Microsoft Azure PowerShell - Service Management
- https://www.powershellgallery.com/packages/Azure/3.3.0
が、こちらの Module で Mac はサポートされてないことがインストールして判明。Macがというか .NetCore での動作がサポートされていないというのが正確みたい。確かに Tag 打たれてないわ。
で探した結果、こっちなればいける。Tag にも Mac ってあるし (もちろん Linux も)。
GitHub にも説明あった
- PowerShell Gallary > AzureRM.NetCore.Preview 0.3.4
- [PowerShell Core Edition] Azure Resource Manager Module
- https://www.powershellgallery.com/packages/AzureRM.NetCore.Preview/0.3.4
それで、ここにあるってことは、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特有の情報は、公式がまとまっていていいと思いました。
6.0-alpha-14.0 では Get-Snapin が使えない事が、別の操作でわかりました。なんでもかんでもサポートってわけには、まだ行きませんね(プラットフォーム違うのだから当たり前)