💭

Azure関連を操作するコマンド群

2022/04/25に公開

はじめに

Azure環境の管理には、Azureポータルを使ったGUI操作と、コマンドラインツールを使うCUI操作があります。
今時、どのクラウドでもちょっと本格的になってくると「GUI操作なんてミスが起きるから避けよう」「CUIを使え」なんて言われるわけです。ですがAzureに関してちょっと調べると「あれ、CLIが何種類かあるぞ」となります。
今回はそんな迷える方に送る記事です。

コマンド

Azure関連を操作するのに使えるコマンドラインツールを紹介します。

Azure CLI

Windowsだと(Windowsの)Powershellやコマンドプロンプト、LinuxであればBashやPowershellで動作するコマンドラインツールです。主に、下記のような構文で実行します。
az <サービス名> <操作内容>

例を挙げるとこんな感じです。
az vm create --resource-group myResourceGroup --name myVM --image UbuntuLTS --admin-username azureuser --admin-password '<Password>'

公式ドキュメントは以下の通り。
https://docs.microsoft.com/ja-jp/cli/azure/

どの環境でも使えますし、Azure CLIを使って管理される方も多いと思います。

Azure Powershell (azモジュール)

WindowsやLinuxのPowershellで動作するツールで、Powershellの上で、Install-Moduleコマンドにより導入する、コマンドレット群です。一般的に「Azure Powershell」と書いてあったら、この「azモジュール」を指します。主に下記のような構文になっています。
<操作>-Az<サービス>
見慣れたPowershellのコマンドレットのお作法に則っていると思います。

Azure CLIの例と同じことをAzure Powershellで書くと以下のようになります。
New-AzVM -ResourceGroupName <ResourceGroupName> -Name myVM -Image UbuntuLTS -Credential (Get-Credential)

公式ドキュメントは以下の通り。※その時点の最新Ver.にリダイレクトされるはずです
https://docs.microsoft.com/ja-jp/powershell/azure/

以上の2つのコマンドが、最も基本となります。どちらかを使えるようになっていれば間違いありません。ですがそれ以外にもチョロチョロ顔を出すものがあります。

Azure Powershell (AzureRMモジュール)

AzureRMモジュールは実は古く、もう更新されないのですが、世の中のブログ等に結構残っているので注意が必要です。2022/4現在、2024/2にretire予定となっています。
これから使いだす人はAzureRMを使う意味はありません。azモジュールを使いましょう。

主に下のような構文で使います。
<操作>-AzureRM<サービス>

AzureCLIやazモジュールと同じ例で書くと

New-AzureRmVM -(オプション略)

となります。ざっくり言えば「AzureRm」を「Az」に置き替えると、azモジュールのコマンドに置き換わります。ただ、azモジュールとAzureRMモジュールは同時にインストールできない(排他利用)なので、移行の際は注意が必要です。

なお、azモジュールを入れた状態で、AzureRMモジュールのコマンドレットのままエイリアスで運用することもできます。
https://docs.microsoft.com/ja-jp/powershell/azure/migrate-from-azurerm-to-az?view=azps-0.10.0

移行のステップとして使えると思いますので、ご検討下さい。

AzureAD操作系のコマンド群

ここまで説明したコマンド群はAzureもAzureADも操作することができます。
世の中にはAzureAD(というよりもm365の操作と言った方が正しいのか?)に特化したコマンド群が存在します。
コチラも世代の壁があるのですが、下記の記事がとても分かりやすかったのでリンクを貼らせていただきます。
https://zenn.dev/yukari_erb/articles/azuread-ps-md21

REST APIの類

コマンドラインツールとは少し逸れますが、同じ文脈で検討に上がるのが「REST API」です。
httpのリクエストに載せて、AzureやAzureADに指示を送り込みます。

Azure REST API

Azureのリソースに対する操作は、Azure REST APIで実施します。
下記のように特定のリソースごとにURIに対して、POSTやGETなどのリクエスト送るイメージで使用します。
VMを作成する例でしたら、こちら。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start?api-version=2021-11-01

curlコマンドやInvoke-WebRequestなどを使って、上記のリクエストを行います。また、postmanなど、HTTPリクエストを投げるツールがあれば簡単に使用することもできます。

リクエストを投げる前にTokenを取得し、HTTPヘッダに含める必要があるなど、お作法については公式ドキュメントをご確認ください。
https://docs.microsoft.com/ja-jp/rest/api/gettingstarted/
https://docs.microsoft.com/en-us/rest/api/azure/

AzureCLIやPowershell(Azモジュール)も、結局裏側の仕組みとしてはREST APIを使っているようですので、REST APIがおそらく一番リリースが早いと思われます。プラットフォームの影響も受けづらいですし、用途によっては一番使う…かもしれません。

Microsoft Graph API

Azure REST APIの、AzureAD版のようなツールです。
AzureADの操作ですので、VMは作成できません。代わりにユーザーの一覧でも見てみましょう。
GET https://graph.microsoft.com/v1.0/users

基本的な考え方はAzure REST APIと同じですが、リクエストを送る先のFQDNが違いますね。
詳細は公式ドキュメントをご覧ください。
https://docs.microsoft.com/ja-jp/graph/use-the-api

なお、Microsoft Graph APIはウェブアプリとしてリクエストを試せるツールが存在します。
https://developer.microsoft.com/ja-jp/graph/graph-explorer

バージョンをβ版⇔1.0版で切り替えながら応答を確認したり、各APIを試せるツールですので本格的に利用する前の確認にとても良いです。トークンも意識せずとも、GUIでAzureADにサインインすればその権限を持って使えるところも良い点です。

Azure AD Graph API

「AzureRMモジュール」のような古いAPIです。
今後廃止されることが決まっており、Microsoft Graphへの移行が進められています。
詳細はコチラ。
https://docs.microsoft.com/ja-jp/graph/migrate-azure-ad-graph-overview

Azure CLIやAzure Powershellの中にも存在していたようで、Microsoft Graphに置き換わったときに破壊的変更が起き、Twitterなどで見ていると悲鳴が上がっています。
生のREST APIとして使用されている方は、早期に対処しましょう。
なお、当初は2022年6月にリタイアメントと発表されていましたが、現時点では期限未定(少なくとも2022年中は廃止されない)ということになっているようです。※2022/4現在

その他各言語向けSDK

様々な言語からAzureを操作するためのSDKが公開されています。
https://azure.microsoft.com/ja-jp/downloads/
ただやはり実行基盤のバージョン管理が手間になること、(例えばPythonやjavaなら実行環境自体のバージョンアップが必要になったり…)、Azure CLIやAzure Powershellなどと比べて機能リリースが遅い印象があることから、私自身はあまり使ったことがありません。
運用基盤をこういったSDKで作ってしまうと塩漬け環境になりやすいと思いますので、注意したほうが良いと思います。(個人の感想です)

使い分け

Azure CLIかAzure Powershellか、どちらを使えばよいか?で迷う方が多いのではないでしょうか。REST APIを生で使ったり特定言語のSDKを使う場合は、環境などの制約により、それ以外を選ぶことができない場合が多いと思います。

Azure CLIもAzure Powershellもどちらもクロスプラットフォームで動くようになっていますので、現状では正直どちらでもよいのかなと思います。私の場合もどちらも使うことがありますが、明確にこっちの方が良い/悪いというほどの差は無いように感じます。
https://docs.microsoft.com/ja-jp/azure/developer/azure-cli/choose-the-right-azure-command-line-tool

既存のスクリプト資産、例えばAzureに限らずPowershellに慣れていて、オブジェクト操作が得意…ということであれば、Azure Powershellを選択されるのが良いのかなぁというくらいですね。

おわりに

今回は、何種類かあるAzureの管理用のCLIを紹介しました。
「一度分かるようになれば迷うことは無いけど、最初のそのハードルが極めて高い」という典型例だと思うのですが、これまで、立ち上がったばかりのプロジェクトでEOSLの見えているモジュールを選択してしまう悲劇を何度か目撃してきました。
次の悲劇が産まれる前に、この記事が目に入りますように。。。

Discussion