クラウドエンジニアブログ

Linux 仮想マシンの作成を通して Azure CLI を使うコツを考えてみた

佐藤 実

佐藤 実

こんにちは。 CI/CD を含むクラウドインフラの構築や技術支援を担当している、クラウドエンジニアの佐藤です。

クラウドエンジニアである私の場合、新機能のパブリックプレビューやプリセールス時はもちろんのこと、必要があればその都度 Azure の機能や仕様、Azure サービス同士の組み合わせによる実現性を検証しています。仮想マシンやその他の Azure リソースを作っては機能や仕様を確認し、その都度作成したリソースを削除しています。

都度削除するのはクラウドならではの利点で、例えばオンプレミス環境の検証リソースが不足しがちという問題、検証そのものにコストがかかり過ぎるという問題を解決する事ができていると思います。仮にもう一度検証が必要になったときは、簡単に検証環境を再現する事もできます。

簡単に検証環境を再現するには、GUI で操作をするなどの人の介在を減らした方が再現率が高まります。そこで私の場合は、検証の初期段階からなるべく Azure CLI を使って Azure リソースを作成し、コードとして残して検証しています。Azure CLI で作成したコードは応用する事で他の検証にも使えるので、普段から作業効率が格段にアップしている状態から他の検証を開始できています。

という事で、今回は Linux 仮想マシンの作成を通して Azure CLI を使うコツを考えてみました。


Linux 仮想マシンを Azure CLI で作成し SSH ログインする

まずは最小限のパラメーターで 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

実行すると「 incorrect usage: --image IMAGE | --attach-os-disk DISK 」というメッセージが表示されます。


「 --image IMAGE 」または「 --attach-os-disk DISK 」というパラメーターが必要な事がわかったので追加して実行します。

az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --image CentOS

「 An RSA key file or key value must be supplied to SSH Key Value. You can use --generate-ssh-keys to let CLI generate one for you 」というメッセージが表示されます。


「 --generate-ssh-keys 」というパラメーターが必要な事がわかったので追加して実行します。

az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --image CentOS \
  --generate-ssh-keys

私の環境では「 SSH key files '/home/codespace/.ssh/id_rsa' and '/home/codespace/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage, back up your keys to a safe location. 」というメッセージが表示されました。

下記の JSON が出力されれば Linux 仮想マシンの作成は完了です。

{
  "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 のパラメーターで改善できるかを後ほど試したいと思います。

作成した Linux 仮想マシンを Azure CLI で削除する

az vm delete のドキュメントを参考に、試しに作成した Linux 仮想マシンを Azure CLI で削除します。

az vm delete \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm

「 Are you sure you want to perform this operation? (y/n): 」というメッセージが表示されたら「 y 」を入力します。


Azure ポータルで確認すると、Linux 仮想マシンだけ削除されてその他 5 つの Azure リソースは削除されていません。
仮想マシンを作成する時は、依存関係にある足りないリソースも自動的に作成されましたが、削除する時は仮想マシンのみ削除されるようです。


Azure では、リソースグループを削除する事で、リソースグループ配下の Azure リソースも一括で削除できるので検証においてはとても便利です。
それでは作成した検証環境を一括で削除します。

az group delete \
  --name ${prefix}-rg

「 Are you sure you want to perform this operation? (y/n): 」というメッセージが表示されたら「 y 」を入力します。

リソースグループの一覧から、先ほど作成した検証環境のリソースグループ「 cebtest001-rg 」が表示されなくなりました。

Azure CLI のドキュメントを読み解くコツ

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 コマンドを組み立てられる事がわかりました。

仮想マシンを作成する時の 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

仮想ネットワークから仮想マシンの作成までを順に Azure CLI で作成する

これまでは「 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 コードを残しておけば、簡単に再現可能で応用が利く検証環境を作る事ができる。

個人的には、Azure CLI は良くできていると思います。今回は触れませんでしたが、Azure CLI で Microsoft Graph API も実行する事が可能ですし、依存リソースが同じリソースグループ内にある場合は、リソース名指定でリソースを作成できます。リソースグループをまたがってもリソース ID を指定する事で実現できます。また、Azure CLI で実装されていないパラメーターがあったとしても、Azure REST API に直接 Azure CLI の REST 機能でアクセスする事も可能です。

このブログ記事が誰かの何かの参考になればうれしいです。 最後まで読んで頂き、ありがとうございます。

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録