Azure テンプレートデプロイ　完成版

###■初めに

　Azureには作成したリソースグループを中のリソース毎テンプレート化する事ができます。リソースグループのテンプレート化を行うことでリソースグループの中のリソースも含めた処理に代わりますので、バックアップ環境の作成とかに向いているのではないでしょうか。

　本来なら、サブスクリプションを跨いだ構築の際に最もメリットを発揮すると思うのですが筆者環境ではサブスクリプションは一つの為、同一リソースにバックアップ環境を手軽に
作成するということでやってみようかと思います。

###■今回やること

・リソースグループのテンプレート化
・テンプレートファイルを使用してのエクスポート

###■環境構成

以下の図の様にリソースグループを中のリソース毎テンプレート化して複製します

![T01.png](https://qiita-image-store.s3.amazonaws.com/0/150678/5ee82ab5-67a2-4418-6d57-d2070b53c23e.png)



###■作業前前提条件

・複製するリソースグループを事前に作成しておくこと

【既存環境(サブスクリプションA/RG-A)構成情報】
以下の環境を別のサブスクリプションに丸ごと複製します
⇒【RG001】サブスクリプションID　：　268xxxxx-xxxx-xxxx-xxxx-xxxxxxx66396


※サブスクリプション関連は一部隠しています。
![T02.png](https://qiita-image-store.s3.amazonaws.com/0/150678/aa2b7237-9f56-8090-50a3-30bf33039556.png)


---

###■既存環境 テンプレート化

　既存環境(サブスクリプションA/RG-A)のJsonファイルを取得します。ここで取得したJsonファイルは「テンプレート」と呼ばれ、内容は作成したすべてのリソースがコード化されています。このファイルを使って新規環境へエクスポートを行います。

　大げさに書いていますが、テンプレート化自体は恐ろしく簡単です！

```:事前作業
・「Azure Portal」へのログイン
```

(1)
「AzurePortal」から既存環境（サブスクリプションA/RG-A)を選択する

(2)
｢設定｣⇒｢Automation スクリプト｣を選択する。
![T03.png](https://qiita-image-store.s3.amazonaws.com/0/150678/47ca5de5-265b-75e6-3278-dcab5242d54d.png)


(3)
以下の画面より｢ダウンロード｣クリック。
　※テンプレートのファイルがダウンロードされます

![T04.png](https://qiita-image-store.s3.amazonaws.com/0/150678/0426cc46-1e21-0a8c-6979-01e9cd5e40cb.png)



(4)
ダウンロードされたファイルを確認する。
※圧縮ファイルでダウンロードされますので確認後、解凍しておく。

ダウンロードフォルダ名　：　ExportedTemplate-"リソースグループ名"
例　　　　　　　　　　　：　ExportedTemplate-RG-A
![T05.png](https://qiita-image-store.s3.amazonaws.com/0/150678/dedd8cbe-a154-9ebb-0942-a7a90f89782b.png)

![T06.png](https://qiita-image-store.s3.amazonaws.com/0/150678/d5c4a4aa-d411-b336-a93d-408f96376779.png)

---

###■JSON設定編集
　ダウンロードしたJsonファイルはそのまま使うとエラーが出ます。そのため使うためにはコードの編集が必要になります。ここでは上記で取得したファイルを編集し、使える状態にします

・お断り
以降で記載する手段は同一環境でバックアップ環境を構築する場合の例です。コードから削除や追加を含めてとりあえずの完成はできておりますが、Jsonについて深い知識がある方から見れば大したことないかもしれませんが、もっといい方法等ご教授頂けると幸いです

(1)　(前回の画面より)
｢ライブラリに追加｣を選択する

![T08.png](https://qiita-image-store.s3.amazonaws.com/0/150678/b333d48e-c474-3982-bfdc-a1c640e2e072.png)

(2)
｢Name｣,｢Description｣にそれぞれ入力を行い,｢Save｣を押す

![t09.png](https://qiita-image-store.s3.amazonaws.com/0/150678/62c3ec26-699a-4263-ad38-0eb04bd91c25.png)


(3)
｢Templeate｣を選択する

![t11.png](https://qiita-image-store.s3.amazonaws.com/0/150678/309e63f1-2286-cb88-ccf8-de3de02eb822.png)

(4)
登録した｢テンプレート｣をクリックする

![t12.png](https://qiita-image-store.s3.amazonaws.com/0/150678/77b594f2-9040-1a97-c84f-5f78acee9c53.png)

(5)選択したテンプレートの｢EDIT｣を選択する
![t13.png](https://qiita-image-store.s3.amazonaws.com/0/150678/6edfc143-fe35-71ea-18aa-37315c0ba1e6.png)

(6)
｢Template added｣を選択する

![t14.png](https://qiita-image-store.s3.amazonaws.com/0/150678/55f5e522-2826-e73b-3448-914a2b082d95.png)

(7)
手順(9)の赤枠内の以下の行を削除する

|削除箇所|行数(※)|
|:-:|:-:|
|｢Disk｣部分|104　～　140|
|｢OSDISK/Manageddisk/ID｣部分|126,182|
|｢dependsOn/resourceId(disks)｣部分|155,205|
|｢dependsOn/[resourceId(virtualMachines)｣部分|252,300|
|｢dependsOn/[resourceId(virtualNetworks)｣部分|702|

※行数は参考数です。ご使用の環境に異なることもあります

(8)以下の行にコードを追加する
手順(9)の赤枠内の以下の行にコードを追加する

|追加箇所|行数(※)|追加内容|
|:-:|:-:|:-:|
|｢adminUsername｣の下|133,185|VMにログインするパスワード|

※行数は参考数です。ご使用の環境に異なることもあります

(9)
　手順(7)(8)の編集後｢OK｣を押す

![t15.png](https://qiita-image-store.s3.amazonaws.com/0/150678/2748d90d-31d9-81ac-ea96-427a8cb4d2f1.png)

(10)
｢下図画面｣より｢Deploy｣をクリックする

![t16.png](https://qiita-image-store.s3.amazonaws.com/0/150678/d088157c-c3a4-84d0-4d6e-aace186292ee.png)

(11)
｢カスタム デプロイ｣の画面から以下の設定を行う

１．リソースグループの枠内に作成するリソースグループの名前を入力
２．上記使用条件に同意するにチェックを入れる
３．ダッシュボードにピン留めするにチェックを入れる
４．購入ボタンを押す

![t17.png](https://qiita-image-store.s3.amazonaws.com/0/150678/707da8e2-84e2-457e-e30d-525834a17067.png)

![t18.png](https://qiita-image-store.s3.amazonaws.com/0/150678/8089424e-2299-779c-dff8-1bd2a472fefe.png)

(12)
｢Azure Portal｣画面に戻りデプロイが終了するまで静観する。

【作成中画面】
![t19.png](https://qiita-image-store.s3.amazonaws.com/0/150678/a25eb4c2-3222-f678-055a-c6474ac025f6.png)

【作成後画面】
![t20.png](https://qiita-image-store.s3.amazonaws.com/0/150678/849b0880-63d2-2414-5cdf-1a0ce7987bab.png)

---

###■最後に

とりあえずこの手順で実行していけば複製できることが確認できました。この後新規作成したリソースグループのVMを確認すると「PublicIP」が違っていることがわかりますのでコピーだけではなく適宜修正もしていることかと思います。

ですがもっと汎用的に使えるようにするとなると｢Json｣を編集することが重要になります