Azure ポータルの仮想マシンの概要ページに表示されているような情報を、C# で SDK 使って取得してみた。
といっても全部取得するのは調査に時間がかかるので、ひとまず必要なやつだけ。ズバッと1回の呼び出しで取得できなかったので、思っていたよりかなり面倒だった。気が利いてなさすぎてイマイチ。
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.Compute; using Azure.ResourceManager.Compute.Models; using Azure.ResourceManager.Network; const string ClientId = "クライアントID"; const string ClientSecret = "クライアントシークレット"; const string TenantId = "テナントID"; const string SubscriptionId = "サブスクリプションID"; const string ResourceGroupName = "リソースグループ名"; const string VmName = "仮想マシン名"; var credential = new ClientSecretCredential( tenantId: TenantId, clientId: ClientId, clientSecret: ClientSecret); var client = new ArmClient(credential); var id = VirtualMachineResource.CreateResourceIdentifier( subscriptionId: SubscriptionId, resourceGroupName: ResourceGroupName, vmName: VmName); var vm = client.GetVirtualMachineResource(id); var response = await vm.GetAsync(expand: InstanceViewType.InstanceView); // 状態は InstanceView の Statuses を見るしかなさそう。 // 実行中の場合、Statuses には ProvisioningState/succeeded と PowerState/running が入っているので、 // 最後だけ取り出す一工夫が必要。 Console.WriteLine($"状態:{response.Value.Data.InstanceView.Statuses.LastOrDefault()?.DisplayStatus}"); foreach (var niRef in response.Value.Data.NetworkProfile.NetworkInterfaces) { // IPアドレスを見るには、ネットワークインターフェースを取得するしかなさそう。 var ni = client.GetNetworkInterfaceResource(niRef.Id); var nicResponse = await ni.GetAsync(); foreach (var ip in nicResponse.Value.Data.IPConfigurations) { Console.WriteLine($"プライベートIPアドレス:{ip.PrivateIPAddress}"); if (ip.PublicIPAddress != null) { // パブリックIPアドレスはさらに別リソースなので、IPアドレスの値を見るためには、 // パブリックIPアドレスリソースを取得するしかない。 var pip = client.GetPublicIPAddressResource(ip.PublicIPAddress.Id); var pipResponse = await pip.GetAsync(); Console.WriteLine($"パブリックIPアドレス:{pipResponse.Value.Data.IPAddress}"); } } } Console.WriteLine($"OSディスク:{response.Value.Data.StorageProfile.OSDisk.Name}"); foreach (var dataDisk in response.Value.Data.StorageProfile.DataDisks) { Console.WriteLine($"データディスク:{dataDisk.Name}"); } Console.ReadLine();