🌟

Azure Cloud Shell で情報取得する

2022/08/29に公開

はじめに

AzureCloudShellを使って、サーバレス&お手軽にAzureの設定情報を取得してみます。
今回記事内の出力形式は、AzurePowershellはcsv形式、AzureCLIはjson形式で出力します。

環境

  • Azure Cloud Shell

手順

手順 bash(AzureCLI)編

AzureCloudShell をbashで起動して下記コマンドを実行します。

cd clouddrive
git clone https://github.com/roota5666/AzureCloudShell-GetInfo.git
cd AzureCloudShell-GetInfo
./script/GetAzureInfo.sh

出力されたファイルを確認します。

ls -l export/*
出力例
r_ota [ ~/clouddrive/AzureCloudShell-GetInfo ]$ ls -l export/*
total 2435
-rwxrwxrwx 1 r_ota r_ota  203019 Aug 29 13:03 az_disk_list.json
-rwxrwxrwx 1 r_ota r_ota   59361 Aug 29 13:03 az_group_list.json
-rwxrwxrwx 1 r_ota r_ota   11230 Aug 29 13:03 az_monitor_action-group_list.json
-rwxrwxrwx 1 r_ota r_ota    3760 Aug 29 13:03 az_network_dns_zone_list.json
-rwxrwxrwx 1 r_ota r_ota   85354 Aug 29 13:03 az_network_lb_list.json
-rwxrwxrwx 1 r_ota r_ota  396515 Aug 29 13:03 az_network_nic_list.json
-rwxrwxrwx 1 r_ota r_ota 1095741 Aug 29 13:04 az_network_nsg_list.json
-rwxrwxrwx 1 r_ota r_ota  140109 Aug 29 13:04 az_network_public-ip_list.json
-rwxrwxrwx 1 r_ota r_ota  279668 Aug 29 13:04 az_network_vnet_list.json
-rwxrwxrwx 1 r_ota r_ota  215690 Aug 29 13:04 az_vm_list.json
r_ota [ ~/clouddrive/AzureCloudShell-GetInfo ]$ 

注 ファイル作成日時は、UTC。出力時のディレクトリ名(%Y%m%d-%H%M)はシェル内でJSTへ変換(UTC-9)しています

json形式のファイルが出力されているかと思います。

手順 powershell(AzurePowershell)編

AzureCLoudShellをbashからpowershellに変更します。

シェル切り替えの補足

下記URLへアクセスすると、直接bash/powershellのAzureCLoudShellを開くことができます。

  • AzureポータルでAzureCLoudShell/bashを開くURL
  • AzureポータルでAzureCLoudShell/powershellを開くURL

また、bashのプロンプトで、pwsh を実行することでシェルをbashに変更もできます。
実行例

Requesting a Cloud Shell.Succeeded. 
Connecting terminal...

r_ota [ ~ ]$ pwsh
PowerShell 7.2.5
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.


MOTD: To Connect and Manage Exchange Online: Connect-EXOPSSession

VERBOSE: Authenticating to Azure ...
VERBOSE: Building your Azure drive ...
Loading personal and system profiles took 4635ms.
PS /home/r_ota> 
cd clouddrive/AzureCloudShell-GetInfo
./script/GetAzureInfo.ps1

出力されたファイルを確認します。

 Get-ChildItem -Recurse ./export/*_ps1
出力例
PS /home/r_ota/clouddrive/AzureCloudShell-GetInfo> Get-ChildItem -Recurse ./export/*_ps1

    Directory: /home/r_ota/clouddrive/AzureCloudShell-GetInfo/export/20220829-2229_AzureInfo_ps1

UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
-rwxrwxrwx r_ota            r_ota               8/29/2022 13:29           5490 Get-AzNetworkSecurityGroup.csv
-rwxrwxrwx r_ota            r_ota               8/29/2022 13:29           6375 Get-AzPublicIpAddress.csv
-rwxrwxrwx r_ota            r_ota               8/29/2022 13:29           5027 Get-AzResourceGroup.csv
-rwxrwxrwx r_ota            r_ota               8/29/2022 13:29           3254 Get-AzVirtualNetwork.csv
-rwxrwxrwx r_ota            r_ota               8/29/2022 13:29           2126 Get-AzVM.csv

PS /home/r_ota/clouddrive/AzureCloudShell-GetInfo> 

注 ファイル作成日時は、UTC。出力時のディレクトリ名(yyyyMMdd-HHmm)はシェル内でJSTへ変換(addHours(9))しています

csv形式のファイルが出力されているかと思います。

今後の発展・活用について

ファイルは出力できましたか?
クラウドに限らず、サーバーやネットワーク機器を構築/設定すると逃げられないのが、設計書やパラメータシートなどのドキュメントです。もちろん、Azureポータルの見やすい画面を見ながらコピペして書いてもできますが、大規模でサーバーやIPが100以上もあったら、資料作りも大変です・・
一応、AzureポータルからJSONビューが表示できたり、CSVにエクスポート機能もありますが、各メニューを巡ってダウンロード/コピペすると時間もかかりますし、ミスもおきるでしょう。

  • 変更作業前後で設定情報を一括エクスポート、作業前後結果でdiffって差分を確認する。
  • 定期的に取得して変更管理する ※AzureCloudShellで定期実行(cron)はできないっぽいので、違う手法が必要

など活用できそうです。

まとめ

  • AzureCloudShellならサーバーレスで実行できる(できた)
  • AzurePowershellとAzureCLIどちらでも、情報取得/出力可能 ※今回記載してませんが、もちろん設定変更も可能
  • AzureCloudShellのコストは、ストレージアカウント(約5GB)コストだけ!

参考/公式サイト

Discussion