Azureで仮想マシンをコマンドで作ってみよう



Azureポータルでポチポチ仮想マシンを作成するのはめんどくさいですよね。
PowerShellで作成する方法もありますが、エクセルで簡単に仮想マシンを作成したかったので、あえてaz cliで作成を半自動化してみました。(需要あるのか？)
誰かの参考になればと、そっと置いておきます。

##事前準備
この記事のコマンドを利用する場合は、az cliをインストールしておいてください。
Macの場合は、brewをインストール後にaz cliをインストールします。

※本コマンド群は結果を保証するものではありません。

##レッツ作成

まずはAzure環境にログインしましょう。

```azureにログイン
az login
```

ちなみに、コマンドをアップデートする場合は以下のおまじないを施します。(macの場合)

```アップデートする
brew update && brew upgrade azure-cli
```

##リソースグループの作成

サブスクリプションを持っている前提で、まずはリソースグループを作成します。
各リソース名は任意ですが、今回は「Azure-XXXX01」という様なネーミングルールで作成していきます。

```
az group create -n Azure-RG01 -l japaneast
```

##ネットワークの作成

VNETを作成します。ネットワークアドレスはお好みの物に変更してください。

```
az network vnet create --name Azure-VNET01 --resource-group Azure-RG01 --location japaneast --address-prefixes 10.1.0.0/16 --subnet-name Azure-SrvSubnet01 --subnet-prefix 10.1.1.0/24
```

VNETにゲートウェイ用のサブネットを作成します。
例は/24で作成していますが、/27以上で作成すればOKです。

```
az network vnet subnet create --vnet-name Azure-VNET01 -n GatewaySubnet -g Azure-RG01 --address-prefix 10.1.255.0/24
```

Azureが提供するDNSを利用しない場合は、以下のコマンドでDNSを変更します。

```
az network vnet update -g Azure-RG01 -n Azure-VNET01 --dns-servers 8.8.8.8
```

##インターネットVPNでオンプレと接続してみる

まずはパブリックIPを割り当てておきます。

```
az network public-ip create -n Azure-GIP01 -g Azure-RG01 --allocation-method Dynamic
```

Azure側にローカルゲートウェイを作成します。接続する先のパブリックIPは事前に調べておいてください。

```
az network local-gateway create --gateway-ip-address XXX.XXX.XXX.XXX --name Azure-LocalGW01 --resource-group Azure-RG01 --local-address-prefixes 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
```

いろいろな制約で、オンプレ側から外部ネットワークに抜けるように設定したい場合、ルートテーブルを作成して経路をねじ曲げます。

```
az network route-table create -g Azure-RG01 -n Azure-RT01
az network route-table route create --address-prefix "0.0.0.0/0" --name Azure-DefaultRoute01 --next-hop-type VirtualNetworkGateway --resource-group Azure-RG01 --route-table-name Azure-RT01
az network vnet subnet update -n Azure-SrvSubnet01 --resource-group Azure-RG01 --vnet-name Azure-VNET01 --address-prefixes 10.1.1.0/24 --route-table Azure-RT01
```

いよいよVPNゲートウェイを作成していきます。プランは、VpnGw1を選択しています。このあたりはスペックを確認しながら変更してください。

```
az network vnet-gateway create -n Azure-GW01 -l japaneast --public-ip-address Azure-GIP01 -g Azure-RG01 --vnet Azure-VNET01 --gateway-type Vpn --sku VpnGw1 --vpn-type RouteBased --client-protocol IkeV2 --no-wait
```

前述した、Azureのトラフィックを一度、オンプレに戻す場合、以下のVPN定義を利用します。

```
az network vnet-gateway create -n Azure-GW01 -l japaneast --public-ip-address Azure-GIP01 -g Azure-RG01 --vnet Azure-VNET01 --gateway-type Vpn --sku VpnGw1 --vpn-type RouteBased --client-protocol IkeV2 --gateway-default-site Azure-LocalGW01 --no-wait
```

最後にVPNを接続して完了です。シェアードキーはオンプレ側のVPN機器と合わせる必要があります。

```
az network vpn-connection create --name Azure-Connection01 --resource-group Azure-RG01 --vnet-gateway1 Azure-GW01 -l japaneast --shared-key ********* --local-gateway2 Azure-LocalGW01
```

##セキュリティグループの作成

仮想マシンで利用するセキュリティグループを作成します。
仮想マシンのNic毎に作成しておくと、きめ細かい設定をすることが出来ます。

```
az network nsg create --name Azure-SrvNSG01 --resource-group Azure-RG01 --location japaneast 
```

##仮想マシンの作成

まずは仮想マシンに割り当てる仮想Nicを作成してみましょう。IPアドレスは、事前に設定したサブネットの中から任意で割り当てしてください。

```
az network nic create --name Azure-Srv01-Nic01 --resource-group Azure-RG01 --vnet-name Azure-VNET01 --subnet Azure-SrvSubnet01 --network-security-group Azure-SrvNSG01 --private-ip-address 10.1.1.10
```

いろいろとスペックを選ぶことが出来ます。今回は、Windows2019DC、スタンダードSSD(128GB)、Standard_B2msという仮想マシンスペックで作成してみます。

```
az vm create --name ServerName --resource-group Azure-RG01 --location japaneast --image MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest --size Standard_B2ms --nics Azure-Srv01-Nic01 --storage-sku StandardSSD_LRS --os-disk-name ServerName_CDRIVE --os-disk-size-gb 128 --admin-username sv-administrator --admin-password ***********
```

追加でディスクを割り当てる場合、以下の様にしてディスクを追加します。

```
az vm disk attach --resource-group Azure-RG01 --vm-name ServerName --name ServerName_EDRIVE --size-gb 32 --sku Premium_LRS --new
```

作業用に一時的にグローバルIPを割り当てる場合、以下の様にしてIPを割り当てリモートデスクトップでアクセスするとよいでしょう。

```
az network public-ip create --name ServerName-GIP --resource-group Azure-RG01
az network nic ip-config update --name ipconfig1 --nic-name Azure-Srv01-Nic01 --resource-group Azure-RG01 --public-ip-address ServerName-GIP
```

##NSGを変更しよう

仮想マシンにアクセスするため、NSGの定義を追加していきます。
リモートデスクトップを許可する場合、以下の様にします。XXX.XXX.XXX.XXXからのアクセスを許可しています。

```
az network nsg rule create --resource-group Azure-RG01 --nsg-name Azure-SrvNSG01 --name Azure-nsgRule-RDP01 --direction Inbound --protocol tcp --priority 100 --destination-port-range 3389 --source-address-prefixes XXX.XXX.XXX.XXX --destination-address-prefixes VirtualNetwork --access allow
```


どうでしょうか、おおよそ以上の操作で一通りの作成は出来たと思います。
各種オプションなどは調べてつつ変更して作成してみてください。

##オプション：ExpressRouteの接続

サンプルコマンドを置いておきます。作成時の参考にしてみてください。

```
az network express-route create --bandwidth 50 -n Az-ExRCircuit01 --peering-location Tokyo -g AzExR-RG01 --provider XXXXXXX -l japaneast --sku-family MeteredData --sku-tier Standard
az network public-ip create -n Az-ExRGIP01 -g AzSrv-RG01 --allocation-method Dynamic
az network vnet-gateway create --name Az-GW01 --gateway-type ExpressRoute --public-ip-addresses Az-ExRGIP01 --resource-group AzSrv-RG01 --vnet Az-VNET01 --sku Standard --no-wait
az network vpn-connection create --name Az-ExRConnection01 --resource-group AzSrv-RG01 --vnet-gateway1 Az-GW01 --express-route-circuit2 Az-ExRCircuit01
az network route-table create -g AzSrv-RG01 -n Az-RT01
az network route-table route create --address-prefix "XXX.XXX.XXX.XXX/32" --name Az-RTKMS01 --next-hop-type Internet --resource-group AzSrv-RG01 --route-table-name Az-RT01
az network vnet subnet update -n Az-SrvSubnet01 --resource-group AzSrv-RG01 --vnet-name Az-VNET01 --route-table Az-RT01
```