Azureの小ネタ (改)

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

ARM API およびSDKでの仮想マシンの状態取得

ARM APIを使うSDK(Python、Java)などで仮想マシンの状態(InstanceView)を取得するのにハマったので備忘メモ。

前提として

そもそも、InstanceViewを取得するには以下のAPIを使います。

Get information about a virtual machine

二種類あって、以下がInstanceView取得用です。クエリではなく、URLにInstanceViewが埋め込まれてます。

https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Compute/virtualMachines/{vm-name}/InstanceView?api-version={api-version}

また、最近の言語向けSDKは自動生成なので、言語間でほぼ同じようなメソッド、クラスが用意されていますが、このInstanceViewを取得するメソッドが用意されていなくて、ソースみたんですけど、該当メソッドを見つけることはできませんでした。(同名で違うメソッドはいくつか見つかりますが。)

結論

というわけでPython SDKにIssueを挙げたのですが、要約すると、"expand=instanceview"というアンドキュメンテッドなクエリパラメータが用意されていて、それを前提としているような感じでした。なので、それを使えと。 試してみたところ、Python/Javaともに問題なく取得できました。

AutoRestでの議論 compute: spec missing for virtualmachines/{vm}/InstanceView · Issue #117 · Azure/azure-rest-api-specs · GitHub

Python SDKでの質問 Instance view of virtual machine · Issue #548 · Azure/azure-sdk-for-python · GitHub

同じことがJavaでも。 Autorest: unable to receive VM InstanceView · Issue #618 · Azure/azure-sdk-for-java · GitHub

まとめ

AutoRestの自動生成フレームワークだと、APIの設計によって多くの言語に影響がでちゃうのはしょうがないというか、少し懸念していたことが起きた感じがします。で、どこに質問していいかわからなくて、案外、既に議論されている内容だったりして。 地味にウォッチしておかないとだめですかね。