Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

ARMにおけるロードバランサー周りのリソース

前回、仮想マシンV2の論理構造 - Azureの小ネタ (改) みたいな記事を書いたのですが、同時にロードバランサー周りの構造も図に起こしてました。今回、またロードバランサー周りを調査する必要があったので、少し修正して放流します。

LBまわり

実際、ロードバランサーを作成したときのJSONとARMのJSONスキーマを見ながら書いた物です。ちなみに、ARM の JSONスキーマは、以下にあります。

github.com

したがって、

  • 適当です、もっと沢山の関連がありそうです。使ってないリソースはチャント調べてません。
  • LBから集約されるクラスは、LBというリソースとして一括りに定義されています。
  • 多重度とかいい加減です。JSONみて配列なところは「0..*」とかにしてますけど、実際どうなんでしょうね。

理解の一助になれば幸いです。

f:id:StateMachine:20151212202445p:plain

おまけ

JSON スキーマの標準仕様ってあるのでしょうか?、不勉強なので知りません。時折、以下のような別リソースへの参照があるのですが、ID以上の制約が書かれていないので、どんなリソースなのか制約が分かると嬉しいなと思いました。

        "loadBalancerBackendAddressPools": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/id"
          }
        },
        "loadBalancerInboundNatRules": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/id"
          }
        }
      },

以上

仮想マシンV2の状態について

仮想マシンV2(ARM)の状態は、管理ポータルを見るよりAPIを叩く or Resource Explorer から参照したほうが生の値が見られて分かりやいです。

正確に言うと仮想マシンの情報を取得しただけでは状態は取れなくて、InstanceView という別API(ネストしたAPI)を呼び出す必要があります。Resource Explorerから見ている限り簡単に取得できます。SDKなどでは、XXXwithInstanceView見たいなAPIがあったはずです。

以下、レスポンスJSONの一部です。

"statuses": [
    {
      "code": "ProvisioningState/updating",
      "level": "Info",
      "displayStatus": "Updating"
    },
    {
      "code": "PowerState/starting",
      "level": "Info",
      "displayStatus": "VM starting"
    }
  ]

statusesの2要素目の、"displayStatus"あたりに着目すればいいのではないかと思います。codeでもいいですけど。取り得る値を見た限りは以下のような値が入ります。

  • VM deallocated
  • VM deallocating
  • VM running
  • VM starting
  • VM stopping
  • VM stopped

stop系は、OSだけ停止させた場合の状態です。restartした場合、状態は変わらずrunningのようです。

これ以外にあるのか不明ですが、こういうのはドキュメント化しておいて欲しいものです。

仮想マシン情報をBLOBのメタデータから取得する

仮想マシンV1では、仮想ディスクのリポジトリ的な概念があって、Add-AzureDisk等で明示的にディスク登録しないと、仮想マシンから接続できなかったのに対して、仮想マシンV2ではこのような概念が無くなってしまったようです。

例えば、VHDを基点としてどの仮想マシンに接続されているかを知りたいときにちょっと面倒くさいことになってしまいます。ということを考えながら、BLOBを触っていると、ふとヘッダに情報が付加されているが目に付きました。

ストレージクライアントからも属性を取得すれば、Metadata Propertyに格納されるようです。

HTTP/1.1 200 OK
Content-Length: 136367309312
Content-Type: application/octet-stream
Content-MD5: M7FTnYH43CgjBhWcGCzG8g==
Last-Modified: Wed, 25 Nov 2015 02:19:10 GMT
Accept-Ranges: bytes
ETag: "0x8D2F53ECE3D9C1B"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 5271c75b-0001-003b-0e36-2cf028000000
x-ms-version: 2015-04-05
x-ms-meta-MicrosoftAzureCompute_ResourceGroupName: HOGE_RG
x-ms-meta-MicrosoftAzureCompute_VMName: HOGE_VM
x-ms-meta-MicrosoftAzureCompute_DiskId: 243489b9-81ae-4276-81bc-c4eefe0549f1
x-ms-meta-MicrosoftAzureCompute_DiskName: HOGE_DISK
x-ms-meta-MicrosoftAzureCompute_DiskType: OSDisk
x-ms-lease-status: locked
x-ms-lease-state: leased
x-ms-lease-duration: infinite
x-ms-blob-type: PageBlob
x-ms-blob-sequence-number: 1
x-ms-copy-id: 5d13ba30-005a-4ca1-bb9e-bba39f2eb62d
x-ms-copy-source: https://rdfepirv2kw1prdstr01.blob.core.windows.net/ar-699494373c04fc0bc8f2bb1389d6106-r14/Windows-Server-2012-R2-20151022-en.us-127GB.vhd?sv=2014-02-14&sr=b&si=PirCacheAccountPublisherContainerPolicy&sig=Fl1oTDMSS89zaQzaBlHlMqN2S26HQTJuZJIaxdnsw9Q%3D
x-ms-copy-status: success
x-ms-copy-progress: 136367309312/136367309312
x-ms-copy-completion-time: Wed, 25 Nov 2015 02:06:21 GMT
Date: Tue, 01 Dec 2015 12:46:02 GMT

上記からは、

  • リソースグループ名
  • リソース名(仮想マシン名)
  • ディスク名
  • ディスクタイプ

などが分かります。実際、リソースグループ名とリソース名(仮想マシン名)があれば、仮想マシン情報は取得できるので、この情報があれば十分使えそうです。

ただ正式に言及されているドキュメントがなさそうなので、ふとしたことで仕様が変わってしまうと可能性があるため、利用には注意が必要そうです。