Отсоединить и удалить PublicIP из Azure сетевого интерфейса с помощью. NET SDK - PullRequest
0 голосов
/ 06 мая 2020

Я изучаю пример использования Azure. NET SDK для отсоединения IP-объекта Publi c от сетевого интерфейса, принадлежащего Azure виртуальной машине.

Идея состоит в том, чтобы удалить publi c IP при освобождении виртуальной машины, чтобы мы не потребляли без надобности квоту publi c IP.

1 Ответ

1 голос
/ 07 мая 2020

Azure Сетевой интерфейс имеет некоторые конфигурации IP. Каждая конфигурация IP имеет один IP-адрес publi c. Итак, если мы хотим отделить Publi c IP от Azure сетевого интерфейса, нам просто нужно удалить publi c IP из конфигурации IP. Дополнительные сведения см. В документе

. Относительно того, как реализовать это с помощью Net, мы можем использовать библиотеки управления sdk Azure для. NET. Подробные инструкции приведены ниже:

a. создать принципала службы (для этого я использую Azure CLI)

az login
az account set --subscription "<your subscription id>"
# the sp will have Azure Contributor role
az ad sp create-for-rbac -n "readMetric" 

enter image description here

Код
 AzureCredentials credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
                      clientId, // the sp appId
                      clientSecret, // the sp password
                      tenantId, // the sp tenant  
                       AzureEnvironment.AzureGlobalCloud);
            var azure = Microsoft.Azure.Management.Fluent.Azure.Configure()
                                                   .Authenticate(credentials)
                                                   .WithSubscription(subscriptionId);// the subscription you use
            var resourceGroupName = "testapi06"; // the vm resource group name
            var vmName = "testvs";// the vm name
            //get the Azure VM
            var vm =await azure.VirtualMachines.GetByResourceGroupAsync(resourceGroupName, vmName);
            // get Azure VM's network interfaces
            foreach (var nicId in vm.NetworkInterfaceIds) {

                var nic = await azure.NetworkInterfaces.GetByIdAsync(nicId);
                // get network interface's ip configurations
                foreach (var r in nic.IPConfigurations)
                {
                    var ipConfigNmae = r.Key;
                    // detach a Public IP object from  network interface
                    await nic.Update().UpdateIPConfiguration(ipConfigNmae)
                                          .WithoutPublicIPAddress()
                                          .Parent()
                                       .ApplyAsync();

                    // delete public ip
                    var publicIpId = r.Value.GetPublicIPAddress().Id;
                    await azure.PublicIPAddresses.DeleteByIdAsync(publicIpId);
                };


            };
...