こんにちは、上坂(@takashiuesaka)です。
立て続けに4件もASM(Azure Service Management)とARM(Azure Resource Manager)の違いを認識していないことによるトラブルを相談されたので、今日は改めて私なりに解説してみたいと思います。
まず結論からいきましょう。この2つの違いは
- RESTのAPIが全然違う
- 同じ機能なのに作成されるリソースが全く異なるものがある(互換性なし)
です。1つずついきます。
RESTのAPIが全然違う
このASMとARMではこのREST APIが全く別物です。そして重要なのは、その違いがREST APIのラッパーにも影響があるということです。
今回のトラブルのうちの1つはPowerShellのコマンドにASMとARMが混在していたことが原因でした。
ARMによるAzureのPowerShellコマンドは基本的に次の形式でコマンド名が付けられています。
動詞-AzureRmリソース名
片やASMの場合は
動詞-Azureリソース名
となっています。
REST APIの違いはASMとARMだけでなく管理ポータルとクラシックポータルの違いにも表れています。クラシックポータルではASMしか扱うことができません。
片や管理ポータルではARMと一部のASMが使用可能です。よくある勘違いとして、「ASM=クラシックポータル、ARM=管理ポータル、ですよね?」と聞かれますがそんなことはありません。
だってクラシックポータルから徐々に管理ポータルに移行しているわけですから、管理ポータルでもASMがどんどんサポートされつつあります。
同じ機能なのに作成されるリソースが全く異なるものがある(互換性なし)
VM周りの話です。まずVMの構成がASMとARMで全く変わったことを認識しましょう。
ASMはクラウドサービスというものが必ず存在しており、そいつがGlobalIPを持ち、VMはその配下、という配置でロードバランサーは自動的に作成されていました。仮想ネットワークに配置するかどうかはオプションでした。
Azure Resource Manager とクラシック デプロイ: デプロイ モデルとリソースの状態について
ARMではクラウドサービスは廃止されました。その代わりに新しいリソースが登場しました。
- PublicIP
- NIC
ロードバランサーは自動的に作成されません。バランシングしたかったら自分で追加します。かつ、仮想ネットワーク内部への配置が義務づけられました。
あ、廃止といえばアフィニティグループも廃止です。
Azure Resource Manager とクラシック デプロイ: デプロイ モデルとリソースの状態について
これをわかりやすくなった、と考える人もいれば面倒になった、と考える人もいるかと思いますが、最大のメリットはVMのスケールです。
ARMではVMのスケールセット、というリソースを用いてスケールを構成します。このリソースを使うと、ASMのように予めVMを作っておく必要はありません。
イメージから立ち上がります。おや、これはやっとAWSと同じになったということですね!
それはさておき、重要なのは、ASMで作られた以下のリソースは全く互換性がないことです。
- VM
- 仮想ネットワーク
- ストレージ
ARMで作ったVMは、ARMのコマンドでないと制御できないよ、ということを覚えておいてほしいです。
さてトラブルの1つはまたもやPowerShellなのですが、IPを固定するためのコマンドが動かないんだけど?というものでした。
New-AzureReservedIP
ASMではこのコマンドを使うわけです。ちなみにVMはARMで作られていますし、そもそもこのコマンドをたたく前にはARMでログインしていました。
動くわけありません。互換性はないんですから。どうしてこんなことをしているのかというと、だって、このコマンドのARM版がないじゃないか、と。
確かに
New-AzureRmReservedIP
というコマンドはありません。でもその理由はARMからVM周りの構成が変わったからです。
IPを固定するにはPublicIPリソースに対してコマンドを発行する行う、というやり方に変わったからです。
New-AzureRmPublicIpAddress -AllocationMethod Static
ASMのことをMSDNでは「クラシックデプロイモデル」、ARMのことを「リソースマネージャーのデプロイモデル」と表記されています。