5

特定の VM について、パブリック IP アドレスを取得できるようにしたいと考えています。

リソース グループのすべてのパブリック IP アドレスを取得する方法は知っていますが、特定の VM の nic-id を取得する方法も知っていますが、この 2 つを接続する方法がわかりません。

これは私が持っているものです:

var resourceGroupName = "My-Resource-Group";
var vmName = "MyVM";
var subscriptionId = "bzz-bzz-bzz-bzz-bzz-bzz";

var tenantId = "bar-bar-bar-bar-bar-bar";

string clientId = "foo-foo-foo-foo-foo-foo";
string clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        
var token = GetAccessTokenAsync(tenantId, clientId, clientSecret);
var credential = new TokenCredentials(token.Result.AccessToken);

var computeManagementClient = new ComputeManagementClient(credential) { SubscriptionId = subscriptionId };

var vmResult = await computeManagementClient.VirtualMachines.GetAsync(resourceGroupName, vmName, InstanceViewTypes.InstanceView);

//Get the NIC ID for the VM: 

foreach (NetworkInterfaceReference nic in vmResult.NetworkProfile.NetworkInterfaces)
        {
            Console.WriteLine("  networkInterface id: " + nic.Id);
        }    

これは私に次のようなものを与えます:

/subscriptions/[guid]/resourceGroups/My-Resource-Group/providers/Microsoft.Network/networkInterfaces/myvm123

リソース グループのすべてのパブリック IP を取得するには、次のようにします。

using (var client = new NetworkManagementClient(credential))
        {
            client.SubscriptionId = subscriptionId;
            foreach (var publicIpAddress in client.PublicIPAddresses.ListAll())
            {
                Console.WriteLine(publicIpAddress.IpAddress);
            }
}

...しかし、nic-id と public ip オブジェクトのプロパティを調べると、一方から他方に移動する明らかな方法はありません。

質問:

nic-id 文字列からその VM/nic の実際のパブリック IP アドレスを取得するにはどうすればよいですか?

ヘルパー関数:

private static async Task<AuthenticationResult> GetAccessTokenAsync(string tenantId, string clientId, string clientSecret)
    {
        var cc = new ClientCredential(clientId, clientSecret);
        var context = new AuthenticationContext($"https://login.windows.net/{tenantId}");
        var token = context.AcquireToken("https://management.azure.com/", cc);

        if (token == null)
        {
            throw new InvalidOperationException("Could not get the token");
        }
        return token;
    }
4

1 に答える 1