NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

AzureのASMとARMの違いを知る

こんにちは、上坂(@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はその配下、という配置でロードバランサーは自動的に作成されていました。仮想ネットワークに配置するかどうかはオプションでした。

 

f:id:nextscape_blog:20210910141743p:plain

Azure Resource Manager とクラシック デプロイ: デプロイ モデルとリソースの状態について

ARMではクラウドサービスは廃止されました。その代わりに新しいリソースが登場しました。

  • PublicIP
  • NIC

ロードバランサーは自動的に作成されません。バランシングしたかったら自分で追加します。かつ、仮想ネットワーク内部への配置が義務づけられました。
あ、廃止といえばアフィニティグループも廃止です。

 

f:id:nextscape_blog:20210910141821p:plain

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のことを「リソースマネージャーのデプロイモデル」と表記されています。