Azure PowerShell って裏で何をしてるの?
2019-08-02
azblob://2022/11/11/eyecatch/2019-08-02-what-does-azure-powershell-do-behind-the-scenes-000.jpg

皆様、コマンドで Azure を操作していますか?
Azure ポータルは直感的で使いやすいですが、設定の自動化などのため、 PowerShell で Azure を操作したことがある方もいらっしゃると思います。
Azure PowerShell を使う場合、インターネット宛の通信(TCP / 80, 443ポート)を許可する必要があります。
ということは、インターネット上のサービスに対して要求を飛ばして Azure リソースに対して操作しているわけです。言われてみれば当たり前かもしれませんが。
一体どんな処理をしているのか、興味ありませんか?
・・・あんまり興味はないかもしれませんが、簡単に眺めることができるので方法を書いてみます。

PowerShell の実行をデバッグする

Azure PowerShell のコマンドは、-Debug オプションを指定してあげると、裏で何をしているかの情報を一部出してくれます。
実際に試してみましょう。

Azure PowerShell を使うとき、まずは Azure に接続するための Connect-AzAccount をよく使いますよね?
オプション無しで実行した場合、ログイン用のウィンドウが表示されてログインしたら、コマンド実行結果が画面に出るだけだと思います。

> Connect-AzAccount

Account                     SubscriptionName               TenantId                             Environment
-------                     ----------------               --------                             -----------
xxxx@example.com            Subscription Name 1            xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AzureCloud

しかし、 -Debug オプションをつけて実行するとこうなります。

> Connect-AzAccount -Debug
デバッグ: 15:53:07 - ConnectAzureRmAccountCommand begin processing with ParameterSet 'UserWithSubscriptionId'.

確認
この操作を続行しますか?
[Y] はい(Y)  [A] すべて続行(A)  [H] コマンドの中止(H)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

いきなり「この操作、続行して良い?」と聞いてきます。
まさしくDebugって感じですね。
今回はデバッグが目的ではなく、何をしてるのかが知りたいだけなので、A を入力してすべて続行しましょう。

また何か出てきました。

デバッグ: 17:34:47 - using account id 'xxxx@example.com'...

確認
この操作を実行しますか?
対象 "User account in environment 'AzureCloud'" に対して操作 "log in" を実行しています。
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

良いと思うのでまた A を入力しましょう。
そうすると通常実行時と同じくログインのウィンドウが出るので、ログインしてください。

・・・大量のログ、出てきましたよね?
例えばこの辺りを見てみましょう。

デバッグ: ============================ HTTP REQUEST ============================

HTTP Method:
GET

Absolute Uri:
https://management.azure.com/tenants?api-version=2016-06-01

Headers:
x-ms-client-request-id        : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
accept-language               : en-US

Body:


デバッグ: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache

HTTP リクエストとレスポンスの組み合わせが飛んでますね。
Azure 側の REST API を実行しているようです。HTTP RESPONSE の中を見た感じ、テナント一覧を取ってくる API だったみたいですね。
他にももう一つ HTTP リクエストとレスポンスの組み合わせが出ていると思うので見てみてください。
裏で何をしているか、ちょっと見えてきましたね?

この -Debug オプション、ほかの Azure PowerShell コマンドでも使用できますので、いろいろ試してみてください。
ちなみに Azure CLI でも --debug オプションで同様に動きを観察できます。こちらも合わせてどうぞ。