こんにちは。 CI/CD を含むクラウドインフラの構築や技術支援を担当している、クラウドエンジニアの佐藤です。
クラウドエンジニアである私の場合、新機能のパブリックプレビューやプリセールス時はもちろんのこと、必要があればその都度 Azure の機能や仕様、Azure サービス同士の組み合わせによる実現性を検証しています。仮想マシンやその他の Azure リソースを作っては機能や仕様を確認し、その都度作成したリソースを削除しています。
都度削除するのはクラウドならではの利点で、例えばオンプレミス環境の検証リソースが不足しがちという問題、検証そのものにコストがかかり過ぎるという問題を解決する事ができていると思います。仮にもう一度検証が必要になったときは、簡単に検証環境を再現する事もできます。
簡単に検証環境を再現するには、GUI で操作をするなどの人の介在を減らした方が再現率が高まります。そこで私の場合は、検証の初期段階からなるべく Azure CLI を使って Azure リソースを作成し、コードとして残して検証しています。Azure CLI で作成したコードは応用する事で他の検証にも使えるので、普段から作業効率が格段にアップしている状態から他の検証を開始できています。
という事で、今回は Linux 仮想マシンの作成を通して Azure CLI を使うコツを考えてみました。
まずは最小限のパラメーターで Linux 仮想マシンを作成し、Azure CLI の基本的な使い方のコツをつかんでみます。
前提として、この記事で使用した Azure CLI のバージョンは「 2.43.0 」です。
バージョンにより Azure CLI 実行時のパラメーター有無に違いがある可能性がありますが、よっぽどニッチなパラメーターを使用しない限りは気にしなくて良いレベルだと思います。詳しくは
Azure CLI のリリースノート
を参照ください。
$ az version
{
"azure-cli": "2.43.0",
"azure-cli-core": "2.43.0",
"azure-cli-telemetry": "1.0.8",
"extensions": {}
}
私の場合は、Azure リソース名を変えて別の検証環境を作る事が多いので、Azure リソース名のプレフィックスを環境変数に設定しておきます。
組織やチームの Azure リソース命名規則がある場合は、適宜修正してご使用ください。
ハイフンやアンダースコアを受け付けない Azure リソースが存在するため、私の検証環境では半角英数のみにしています。
prefix=cebtest001
Azure リソースは基本的にリソースグループ配下に作成されるため、検証用のリソースグループを作成します。
「 --location 」で東日本リージョンを設定しています。
bash 環境を前提として読みやすいように「 \ 」で一連のコマンドを改行しています。PowerShell は「 ` 」やコマンドプロンプトは「 ^ 」を使用して一連のコマンドを読みやすいように改行する事ができます。
az group create \
--name ${prefix}-rg \
--location japaneast
az vm create
のドキュメントを参考に、Linux 仮想マシンを作成するための必須のパラメーターのみ設定した Azure CLI を試しに実行してみます。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm
「 --image IMAGE 」または「 --attach-os-disk DISK 」というパラメーターが必要な事がわかったので追加して実行します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS
「 --generate-ssh-keys 」というパラメーターが必要な事がわかったので追加して実行します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS \
--generate-ssh-keys
{
"fqdns": "",
"id": "/subscriptions/0487608b-9999-9999-9999-8779015aa368/resourceGroups/cebtest001-rg/providers/Microsoft.Compute/virtualMachines/cebtest001-vm",
"location": "japaneast",
"macAddress": "00-0D-3A-50-96-23",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "20.222.206.92",
"resourceGroup": "cebtest001-rg",
"zones": ""
}
Azure ポータルで作成された Azure リソースを確認します。
下記の 6 つが「 az vm create 」を実行する事によって作成されました。
仮想マシン以外にも、仮想ネットワークや OS ディスクなども自動的に作成されている事が確認できます。
先ほど「 --generate-ssh-keys 」を追加して実行した時のメッセージに SSH キーを作成したという内容があったので、ホームディレクトリの「 .ssh 」の中身を確認します。
「 id_rsa 」が秘密鍵、「 id_rsa.pub 」が公開鍵で、Azure 側には公開鍵が登録されています。
$ ls ~/.ssh
id_rsa id_rsa.pub
作成した Linux 仮想マシンに SSH 接続して、OS 情報を出力します。
SSH 接続する時のユーザー名は「 $USER 」です。
パブリック IP アドレスは Linux 仮想マシン作成時の JSON 内の「 publicIpAddress 」の値を使用します。
SSH キーは設定していませんが、省略すると「 ~/.ssh/id_rsa 」がデフォルトで使用されます。
SSH コマンドの一番最後に Linux 仮想マシン内で実行する「 cat /etc/os-release 」を設定しています。
実行結果から、OS は CentOS 7 だという事がわかります。
$ ssh $USER@20.222.206.92 cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
Azure ポータルで、作成された Linux 仮想マシンの情報を確認します。
仮想マシンのサイズは「 Standard DS1 v2 」である事がわかります。
Azure ポータルで、作成されたネットワークセキュリティグループの情報を確認します。
ポート 22 のソースに「任意」と表示されており、名前の左に警告アイコンが表示されています。
これはインターネットにつながっている全てのパブリック IP アドレスから SSH ポートにアクセスできる状態です。
このような状態を放置するのは非常に危険なので、ソースをアクセス元のパブリック IP アドレスに制限する方法を後ほど試します。
Azure CLI の Linux 仮想マシン作成で、最小限のパラメーターから開始し、不足しているパラメーターがメッセージとして表示されるので、必要なパラメーターを追加していけば実行できる事がわかりました。
仮想マシンのサイズ変更や、ネットワークセキュリティグループのルールに課題が見つかったので、Azure CLI のパラメーターで改善できるかを後ほど試したいと思います。
az vm delete のドキュメントを参考に、試しに作成した Linux 仮想マシンを Azure CLI で削除します。
az vm delete \
--resource-group ${prefix}-rg \
--name ${prefix}-vm
Azure ポータルで確認すると、Linux 仮想マシンだけ削除されてその他 5 つの Azure リソースは削除されていません。
仮想マシンを作成する時は、依存関係にある足りないリソースも自動的に作成されましたが、削除する時は仮想マシンのみ削除されるようです。
Azure では、リソースグループを削除する事で、リソースグループ配下の Azure リソースも一括で削除できるので検証においてはとても便利です。
それでは作成した検証環境を一括で削除します。
az group delete \
--name ${prefix}-rg
リソースグループの一覧から、先ほど作成した検証環境のリソースグループ「 cebtest001-rg 」が表示されなくなりました。
az vm create
のドキュメントをもう一度確認します。
必須のパラメーターにはカッコが付いていない表記ルールだとわかります。
次に「 az vm create 」の使用例が、いくつかある事がわかります。
次に「必須のパラメーター」と「省略可能なパラメーター」が、いくつかある事がわかります。
「 --image 」というパラメーターの説明を読むと、「 URN エイリアス」や「 URN 」や「カスタムイメージ名または ID 」などをパラメーターの値に設定する事ができる、と読み取れます。
また「 --attach-os-disk 」を設定しない限り必須のパラメーターである、と読み取れます。
一番下に「 az vm image list 」とあり、OS イメージのリストが表示できそうだと推測できます。
「 az vm image list 」を実行し、読みやすいようにテーブル形式で出力してみます。
出力が横に長くなっていますが「 UrnAlias 」という列に「 CentOS 」があり、正式な「 URN 」は「 OpenLogic:CentOS:7.5:latest 」だと確認できます。
$ az vm image list --output table
You are viewing an offline list of images, use --all to retrieve an up-to-date list
Architecture Offer Publisher Sku Urn UrnAlias Version
-------------- ---------------------------- ---------------------- ---------------------------------- ------------------------------------------------------------------------------ ----------------------- ---------
x64 CentOS OpenLogic 7.5 OpenLogic:CentOS:7.5:latest CentOS latest
x64 debian-10 Debian 10 Debian:debian-10:10:latest Debian latest
x64 flatcar-container-linux-free kinvolk stable kinvolk:flatcar-container-linux-free:stable:latest Flatcar latest
x64 opensuse-leap-15-3 SUSE gen2 SUSE:opensuse-leap-15-3:gen2:latest openSUSE-Leap latest
x64 RHEL RedHat 7-LVM RedHat:RHEL:7-LVM:latest RHEL latest
x64 sles-15-sp3 SUSE gen2 SUSE:sles-15-sp3:gen2:latest SLES latest
x64 UbuntuServer Canonical 18.04-LTS Canonical:UbuntuServer:18.04-LTS:latest UbuntuLTS latest
x64 WindowsServer MicrosoftWindowsServer 2022-Datacenter MicrosoftWindowsServer:WindowsServer:2022-Datacenter:latest Win2022Datacenter latest
x64 WindowsServer MicrosoftWindowsServer 2022-datacenter-azure-edition-core MicrosoftWindowsServer:WindowsServer:2022-datacenter-azure-edition-core:latest Win2022AzureEditionCore latest
x64 WindowsServer MicrosoftWindowsServer 2019-Datacenter MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest Win2019Datacenter latest
x64 WindowsServer MicrosoftWindowsServer 2016-Datacenter MicrosoftWindowsServer:WindowsServer:2016-Datacenter:latest Win2016Datacenter latest
x64 WindowsServer MicrosoftWindowsServer 2012-R2-Datacenter MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest Win2012R2Datacenter latest
x64 WindowsServer MicrosoftWindowsServer 2012-Datacenter MicrosoftWindowsServer:WindowsServer:2012-Datacenter:latest Win2012Datacenter latest
x64 WindowsServer MicrosoftWindowsServer 2008-R2-SP1 MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:latest Win2008R2SP1 latest
次に「 --generate-ssh-keys 」パラメーターの説明を読むと、SSH キーがない場合に生成し、SSH キーがある場合は上書きしない、と読み取れます。
この記事の最初に「 az vm create 」を実行した時は SSH キーがなかったので「 --generate-ssh-keys 」パラメーターが必要だとメッセージで教えてくれました。
既に SSH キーがある環境で「 --generate-ssh-keys 」があっても SSH キーを上書きしないし、省略可能なパラメーターなので省略しても良いと、読み取れます。
使用例を参考にしつつ、パラメーターの説明を読んでいけば、Azure リソース作成に必要な Azure CLI コマンドを組み立てられる事がわかりました。
「 --image 」と「 --generate-ssh-keys 」パラメーター以外の、気になるパラメーターも確認します。
下記の基本形からパラメーターを追加していきたいと思います。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS
「 --size 」パラメーターは仮想マシンのサイズで、規定値が「 Standard_DS1_v2 」という事なので、この記事の最初に作成した Linux 仮想マシンの情報を Azure ポータルで確認した時に「 Standard DS1 v2 」と表示されていました。
また「 az vm list-sizes 」で仮想マシンサイズのリストが表示できそうだと推測できます。
東日本リージョンで使用できる仮想マシンを「 az vm list-sizes --location japaneast 」として実行し、読みやすいようにテーブル形式で出力してみます。
「 Name 」という列にパラメーターで設定できる値が確認できます。
また、全てを表示すると情報量が多いので、コストが比較的安い「 Standard_B 」シリーズを grep で絞り込んでみました。
$ az vm list-sizes --location japaneast --output table
MaxDataDiskCount MemoryInMb Name NumberOfCores OsDiskSizeInMb ResourceDiskSizeInMb
------------------ ------------ ------------------------ --------------- ---------------- ----------------------
24 57344 Standard_NV6 6 1047552 389120
48 114688 Standard_NV12 12 1047552 696320
64 229376 Standard_NV24 24 1047552 1474560
24 57344 Standard_NV6_Promo 6 1047552 389120
48 114688 Standard_NV12_Promo 12 1047552 696320
64 229376 Standard_NV24_Promo 24 1047552 1474560
4 8192 Standard_D2a_v4 2 1047552 51200
8 16384 Standard_D4a_v4 4 1047552 102400
16 32768 Standard_D8a_v4 8 1047552 204800
32 65536 Standard_D16a_v4 16 1047552 409600
32 131072 Standard_D32a_v4 32 1047552 819200
32 196608 Standard_D48a_v4 48 1047552 1228800
32 262144 Standard_D64a_v4 64 1047552 1638400
32 393216 Standard_D96a_v4 96 1047552 2457600
(中略)
32 901120 Standard_NC96ads_A100_v4 96 1047552 262144
12 114688 Standard_NC6s_v3 6 1047552 344064
24 229376 Standard_NC12s_v3 12 1047552 688128
32 458752 Standard_NC24rs_v3 24 1047552 3018752
32 458752 Standard_NC24s_v3 24 1047552 1376256
$ az vm list-sizes --location japaneast --output table | grep Standard_B
2 512 Standard_B1ls 1 1047552 4096
2 2048 Standard_B1ms 1 1047552 4096
2 1024 Standard_B1s 1 1047552 4096
4 8192 Standard_B2ms 2 1047552 16384
4 4096 Standard_B2s 2 1047552 8192
8 16384 Standard_B4ms 4 1047552 32768
16 32768 Standard_B8ms 8 1047552 65536
16 49152 Standard_B12ms 12 1047552 98304
32 65536 Standard_B16ms 16 1047552 131072
32 81920 Standard_B20ms 20 1047552 163840
1 Core 1024 MB の「 --size Standard_B1s 」をパラメーターに追加します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS\
--size Standard_B1s
「 --nsg-rule 」パラメーターはネットワークセキュリティグループのルールで、「 NONE 」を値に設定すればルールを作成しない、と読み取れます。
「 --nsg-rule NONE 」をパラメーターに追加します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS\
--size Standard_B1s \
--nsg-rule NONE
「 --storage-sku 」パラメーターは OS ディスクの SKU を値に設定する、と読み取れます。
ディスクは仮想マシンを停止していても課金され続ける Azure リソースなので、検証でそんなにディスクパフォーマンスが必要なく、しばらくディスクを残しておく必要がある場合は「 Standard_LRS 」でコストを節約します。
「 --storage-sku Standard_LRS 」をパラメーターに追加します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS\
--size Standard_B1s \
--nsg-rule NONE \
--storage-sku Standard_LRS
「 --admin-username 」パラメーターは OS にログインする時のユーザー名を値に設定する、と読み取れます。
この記事の最初に作成した Linux 仮想マシンでは「 $USER 」環境変数に設定されているユーザー名が使用されました。
「 --admin-username azureuser 」をパラメーターに追加します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS\
--size Standard_B1s \
--nsg-rule NONE \
--storage-sku Standard_LRS \
--admin-username azureuser
「 --os-disk-name 」パラメーターは OS ディスクの Azure リソース名を値に設定する、と読み取れます。
この記事の最初に作成した Linux 仮想マシンでは、ランダムな長い文字列が OS ディスクの Azure リソース名に設定されていました。
これを他の自動生成される Azure リソース名っぽい名前に変更したいと思います。
「 --os-disk-name ${prefix}-vmOSDisk 」をパラメーターに追加します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS\
--size Standard_B1s \
--nsg-rule NONE \
--storage-sku Standard_LRS \
--admin-username azureuser \
--os-disk-name ${prefix}-vmOSDisk
「 --public-ip-address-dns-name 」パラメーターはパブリック IP アドレスに紐づける DNS 名を値に設定する、と読み取れます。
この記事の最初に作成した Linux 仮想マシンでは、SSH 接続する時にパブリック IP アドレスを設定していました。
「 --public-ip-address-dns-name ${prefix} 」をパラメーターに追加します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS\
--size Standard_B1s \
--nsg-rule NONE \
--storage-sku Standard_LRS \
--admin-username azureuser \
--os-disk-name ${prefix}-vmOSDisk \
--public-ip-address-dns-name ${prefix}
それでは、もう一度リソースグループを作成してから、上の Azure CLI を実行してみます。
作成された Azure リソースを確認すると OS ディスクのリソース名が「 cebtest001-vmOSDisk 」となっています。
仮想マシンの情報を確認すると、サイズは「 Standard B1s 」で、DNS 名は「 cebtest001.japaneast.cloudapp.azure.com 」となっています。
ネットワークセキュリティグループの情報を確認すると、SSH ポートのルールがありません。
OS ディスクの情報を確認すると、「 Standard HDD LRS 」となっています。
az network nsg rule create
のドキュメントを参考に、アクセス元のパブリック IP アドレスから SSH できるようにするためのルールをネットワークセキュリティグループに追加します。
「 $(curl -s inet-ip.info) 」の実行結果にはパブリック IP アドレスのみが出力されるので、「 --source-address-prefixes 」の値に設定します。
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-SSH \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp
ネットワークセキュリティグループにアクセス元のパブリック IP アドレスからのみに制限した SSH ポートのルールが追加されました。
Linux 仮想マシンに SSH 接続して動作を確認します。
$ ssh azureuser@${prefix}.japaneast.cloudapp.azure.com cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
ここまでに作成した Azure CLI コマンドを基本コードとして、再検証や応用が利くようにまとめておきます。
prefix=cebtest001
az group create \
--name ${prefix}-rg \
--location japaneast
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--image CentOS \
--size Standard_B1s \
--nsg-rule NONE \
--storage-sku Standard_LRS \
--admin-username azureuser \
--os-disk-name ${prefix}-vmOSDisk \
--public-ip-address-dns-name ${prefix}
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-SSH \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp
ssh azureuser@${prefix}.japaneast.cloudapp.azure.com cat /etc/os-release
az group delete \
--name ${prefix}-rg
これまでは「 az vm create 」で依存する Azure リソースも一緒に作成していましたが、6 つのリソースをなるべく別々に Azure CLI で作成してみたいと思います。
まずは環境変数に別のプレフィックスを設定し、別のリソースグループを作成します。
prefix=cebtest002
az group create \
--name ${prefix}-rg \
--location japaneast
リソースグループが作成され、リソースグループ配下には Azure リソースが無い状態です。
az network vnet create のドキュメントを参考に、仮想ネットワークを作成します。
az network vnet create \
--name ${prefix}-vnet \
--resource-group ${prefix}-rg \
--address-prefix 10.0.0.0/16
仮想ネットワークが作成され、サブネットが無い状態です。
az network nsg create のドキュメントを参考に、ネットワークセキュリティグループを作成します。
az network nsg create \
--resource-group ${prefix}-rg \
--name ${prefix}-nsg
ネットワークセキュリティグループが作成され、ルールが無い状態です。
az network nsg rule create のドキュメントを参考に、ネットワークセキュリティグループにアクセス元のパブリック IP アドレスから SSH 接続できるルールを作成します。
az network nsg rule create \
--resource-group ${prefix}-rg \
--nsg-name ${prefix}-nsg \
--name AllowSSH \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info/ip) \
--destination-port-ranges 22 \
--direction Inbound \
--access Allow \
--protocol Tcp
アクセス元のパブリック IP アドレスから SSH 接続できるルールが追加されました。
az network vnet subnet create
のドキュメントを参考に、サブネットにネットワークセキュリティグループを紐づけて作成します。
ネットワークセキュリティグループは、ネットワークインターフェイスかサブネットに紐づける事ができます。
az network vnet subnet create \
--vnet-name ${prefix}-vnet \
--resource-group ${prefix}-rg \
--name default-subnet \
--address-prefix 10.0.0.0/24 \
--network-security-group ${prefix}-nsg
ネットワークセキュリティグループが設定されたサブネットが作成されました。
az network public-ip create
のドキュメントを参考に、ネットワークインターフェイスに紐づけるパブリック IP アドレスを作成します。
外部から SSH 接続するためには、パブリック IP アドレスが必要です。
パブリック IP アドレスに紐づける DNS 名も設定します。
az network public-ip create \
--name ${prefix}-pip \
--resource-group ${prefix}-rg \
--allocation-method Dynamic \
--dns-name ${prefix}
パブリック IP アドレスが作成され、DNS 名も確認できます。
az network nic create のドキュメントを参考に、パブリック IP アドレスを紐づけたネットワークインターフェイスを作成します。
az network nic create \
--name ${prefix}-nic \
--resource-group ${prefix}-rg \
--vnet-name ${prefix}-vnet \
--subnet default-subnet \
--public-ip-address ${prefix}-pip
ネットワークインターフェイスが作成されました。
az vm create のドキュメントを参考に、OS ディスクと一緒に Linux 仮想マシンを作成します。
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-osdisk \
--image CentOS \
--size Standard_B1s \
--admin-username azureuser \
--nics ${prefix}-nic \
--storage-sku Standard_LRS
仮想マシンと OS ディスクが作成され、合計 6 つの Azure リソースが作成されました。
それでは Linux 仮想マシンに SSH 接続して動作を確認します。
$ ssh azureuser@${prefix}.japaneast.cloudapp.azure.com cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
新たに作成した検証環境をリソースグループごと削除します。
「 --yes 」は確認メッセージを出さずに Azure CLI を実行します。
az group delete \
--name ${prefix}-rg \
--yes
ここまでに作成した Azure CLI コマンドを基本コードとして、再検証や応用が利くようにまとめておきます。
prefix=cebtest002
az group create \
--name ${prefix}-rg \
--location japaneast
az network vnet create \
--name ${prefix}-vnet \
--resource-group ${prefix}-rg \
--address-prefix 10.0.0.0/16
az network nsg create \
--resource-group ${prefix}-rg \
--name ${prefix}-nsg
az network nsg rule create \
--resource-group ${prefix}-rg \
--nsg-name ${prefix}-nsg \
--name AllowSSH \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info/ip) \
--destination-port-ranges 22 \
--direction Inbound \
--access Allow \
--protocol Tcp
az network vnet subnet create \
--vnet-name ${prefix}-vnet \
--resource-group ${prefix}-rg \
--name default-subnet \
--address-prefix 10.0.0.0/24 \
--network-security-group ${prefix}-nsg
az network public-ip create \
--name ${prefix}-pip \
--resource-group ${prefix}-rg \
--allocation-method Dynamic \
--dns-name ${prefix}
az network nic create \
--name ${prefix}-nic \
--resource-group ${prefix}-rg \
--vnet-name ${prefix}-vnet \
--subnet default-subnet \
--public-ip-address ${prefix}-pip
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-osdisk \
--image CentOS \
--size Standard_B1s \
--admin-username azureuser \
--nics ${prefix}-nic \
--storage-sku Standard_LRS
ssh azureuser@${prefix}.japaneast.cloudapp.azure.com cat /etc/os-release
az group delete \
--name ${prefix}-rg \
--yes
個人的には、Azure CLI は良くできていると思います。今回は触れませんでしたが、Azure CLI で Microsoft Graph API も実行する事が可能ですし、依存リソースが同じリソースグループ内にある場合は、リソース名指定でリソースを作成できます。リソースグループをまたがってもリソース ID を指定する事で実現できます。また、Azure CLI で実装されていないパラメーターがあったとしても、Azure REST API に直接 Azure CLI の REST 機能でアクセスする事も可能です。
このブログ記事が誰かの何かの参考になればうれしいです。 最後まで読んで頂き、ありがとうございます。