困ったこと
新規にVMを作るとディスク名が以下のようになります。
ディスク種別 | ディスク名 |
---|---|
OSディスク | <VM名>_OsDisk_1_<ランダムな文字列> |
データディスク | 自分で好きな名前を指定 |
しかし、自分で作ったイメージからVMをデプロイすると以下のような名前になってしまいました。
ディスク種別 | ディスク名 |
---|---|
OSディスク | <VM名>_Disk1_<ランダムな文字列> |
データディスク | <VM名>_Disk2_<ランダムな文字列> |
ディスク名を使ってスナップショットを作成するスクリプトを作成していたので、ディスクのネーミングルールが変わってしまうとスナップショットのネーミングも変わってしまいます。環境内にいろんなネーミングルールのディスクが混在しているのも管理上気持ち悪いです。なので、イメージから展開する場合でも新規VM作成時と同じようなディスク名をつける方法はないか調べました。
参考にしたもの
まず見つけたのが以下のやり方です。
既存 VM の OS ディスクのリソース名を変更する
このやり方を要約すると
- ディスクのスナップショットをとる
- スナップショットからディスクを作成する
- ディスクを入れ替える
となります。確かにできなくはないのですが、イメージからVM展開しているのに展開後にわざわざディスクを作って入れ替えるのはナンセンスです…。
データディスクをアタッチしていたらそれらに対しても同じ操作をしないといけないので、手間がかかりすぎてしまいます。
他に方法はないかと探したところ、以下のやり方が見つかりました。
VM作成時にOSディスク名を指定する方法について
このやり方はARMテンプレートをカスタムして新規VM作成する場合にディスク名を指定する方法ですが、イメージから展開する際にも応用できそうです。
イメージから展開する際にディスク名を指定する方法
-
通常の手順でイメージからVMをデプロイする手順を進めます。
-
デプロイする直前の「確認および作成」の画面で右下の「Automationのテンプレートをダウンロードする」を選択します。
-
ARMテンプレートの下図の場所に以下の文言を追加します。ここで指定する名前がディスク名になるので、指定したい名前に置き換えてください。以下の例ではconcat関数を使って文字列の結合処理をしていますが、「"name": "testvm_OsDisk"」といった文字列で指定しても問題ありません。データディスクの数が1つの場合は文字列指定も可能ですが、2個以上存在する場合は文字列指定だと名前が重複してしまうので工夫が必要になると思います。
OSディスク:「<VM名>_OsDisk」 というディスク名を指定"name": "[concat(parameters('virtualMachineName'),'_OsDisk')]",
データディスク:「<VM名>_DataDisk_<LUN番号>」というディスク名を指定"name": "[concat(parameters('virtualMachineName'),'_DataDisk_',parameters('dataDisks')[copyIndex('dataDisks')].lun)]",
-
追記が完了したら「保存」を選択します。
細かな調整がしたい、となるとやはりARMテンプレートと向き合わないといけないですね。