Azure Linux仮想マシンのNIC二重化（Azure CLI編）

# 前書き
2017/2/9現在、Azureの仮想マシンにNICを複数枚セットしようとすると、ポータル画面（ブラウザ）からは設定できず、PowerShellやAzureCLIなどを利用して仮想マシンを作成する必要があります。:disappointed_relieved:
今回は、Azure CLIを利用したNIC2枚刺しの仮想マシン作成を行います。


# 前提条件
・現在の最新イメージとなるCentOS7.3をインストールします。
・Azure CLIを利用できる環境が準備されていることを前提とします。
・ロケーションは、”japaneast”（東日本）とします。
・仮想マシン作成後のSSHログインは、パスワードによる認証方式で作成しています。
・IPアドレスは、パブリックIPアドレスも使用して固定化します。


# 準備
１．PowerShell、もしくはコマンドプロンプトを開いて、Azureにログインしましょう。
    (管理者権限で実行してください）
`# azure login -u <アカウント名>`
パスワードを入力してログインしてください。


２．**サブスクリプション**をセットします。サブスクリプションが複数ある場合には、既定のサブスクリプションを確認してください。

```
<確認> # azure account list  ★ Current 列がtrue になっているものが選択されたサブスクリプションになります。
<設定> # azure account set <サブスクリプション名>
```

# いざ！仮想マシン作成
３．**リソースグループ**を作成します。（ポータルから作成してもOKです）

```
# azure group create <リソースグループ名> --location "<場所>"
sample）azure group create test_group --location "japaneast"
```

４．**ストレージアカウント**を作成します。仮想ディスクを保持します。

```
# azure storage account create <ストレージアカウント名> --resource-group <リソースグループ名> --location "<場所>" --kind Storage --sku-name PLRS`
```

<>に囲まれた部分以外は、決め打ちで問題ないです。
ストレージアカウント名は、英数字のみです。（記号はOUT)

```
sample) # azure storage account create storageadmin --resource-group test_group --location "japaneast" --kind Storage --sku-name PLRS
```

５．**仮想ネットワーク**を作成します。

```
# azure network vnet create -g <リソースグループ名> -l <場所> -n <仮想ネットワーク名> -d -a <ネットワークアドレス/マスク>
sample) # azure network vnet create -g test_group -l japaneast -n test_vnet -d -a 10.1.0.0/16
```

:dizzy_face:なぜか、ロケーションは””で囲まれなくなりました。-l 恐るべし:dizzy_face:
-d の後ろは、既定値を利用するため、何も指定する必要ありません。
-d をつけないと「Cannot read property 'dnsSErvers' of undefined」となり、エラーになります。


６．**サブネット**を2つ用意します。

```
# azure network vnet subnet create -g <リソースグループ名> -e <仮想ネットワーク名> -n <サブネット名> -a <ネットワークアドレス/マスク>

sample) # azure network vnet subnet create -g test_group -e test_vnet -n front_subnw -a 10.1.1.0/24
sample) # azure network vnet subnet create -g test_group -e test_vnet -n back_subnw -a 10.1.2.0/24
```

７．**仮想NIC**を作成して、６．で作成したサブネットにアタッチします。

```
# azure network nic create -g <リソースグループ名> -l <場所> -n <仮想NIC名> -m <仮想ネットワーク名> -k <サブネット名>

sample) `# azure network nic create -g test_group -l japaneast -n testNIC1 -m test_vnet -k front_subnw`
sample) `# azure network nic create -g test_group -l japaneast -n testNIC2 -m test_vnet -k back_subnw`
```

８．**パブリックIPアドレス**を予約します。

```
# azure network public-ip create -g <リソースグループ名> -n <予約IPアドレス名> -l <場所>

sample) # azure network public-ip create -g test_group -n nicw_ip -l japaneast
```

９．**仮想マシン**の作成

```
# azure vm create --resource-group <リソースグループ名> --name <仮想マシン名> --location <場所> --os-type <OSタイプ> --nic-names <1つ目の仮想NIC名>,<2つ目の仮想NIC名> --public-ip-name <パブリックIP名> --vm-size <マシンタイプ> --storage-account-name <ストレージアカウント名> --image-urn <イメージURL> --admin-username <OS管理者名>
```

※ 管理者パスワードの入力を2回求められます。
※ パスワードルールを守らないと次のエラーメッセージでエラーとなります。

```
error:   Parameter adminPassword must be at least 8 character in length, it must contain a lower case, an upper case, a number and a special character such as !@#$%^&+=
```

※ 仮想マシン名は、文字数字のみで、記号はOUTです。エラーになります。

```
****** is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
```

```
sample) # azure vm create --resource-group test_group --name testvm --location japaneast --os-type linux --nic-names testNIC1,testNIC2 --public-ip-name nicw_ip --vm-size Standard_DS2_v2 --storage-account-name storageadmin --image-urn openlogic:CentOS:7.3:7.3.20161221 --admin-username testadmin
```

※ --image-urn は、`# azure vm image list` にて確認できます。


# あとがき
変数化しないと大変ですね。
PowerShellの方がいいかもしれません。
次回、PowerShell版作成します。


# 参考URL
 https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-multiple-nics