Получение общедоступного IP-адреса Azure VM с помощью службы метаданных Azure Instance
Есть несколько случаев, когда вам может понадобиться получить общедоступный IP-адрес Azure VM, который вы развернули, например, записать его в файл конфигурации на компьютере или использовать его в скрипте.
Один из способов добиться этого - использовать командлеты Azure Resource Manager для PowerShell:
$publicIp = Get-AzureRmPublicIpAddress -Name $publicIpName -ResourceGroupName $rgName
Однако для этого требуется сначала настроить командлеты ARM на машину.
Другой способ получить публичный IP-адрес - это перейти на внешний сайт, но нет никаких гарантий, что внешний сайт доступен.
Есть еще более простой способ, который обычно доступен (в предварительном просмотре для Azure Government, Azure China, Azure Germany на данный момент): через службу метаданных Azure Instance для Azure VM.
Служба метаданных Azure Instance представляет собой конечную точку REST (известный немаршрутизируемый IP-адрес), полезную для всех виртуальных машин IaaS, созданных с помощью Azure Resource Manager, и доступна только для виртуальной машины, для которой вы хотите получить информацию о конфигурации (например, публичный IP-адрес) , Доступная информация включает SKU, конфигурацию сети и события обслуживания. Ответ, полученный от вызова, находится в стандартном формате JSON.
Вот как выглядит получение публичного IP-адреса из виртуальной машины Windows в Azure и его установка в переменную через PowerShell:
#Get Public IP from Azure Instance Metadata service for Windows VMs
$uri = "http://169.254.169.254/metadata/instance?api-version=2017-04-02"
$jsonBody = Invoke-RestMethod -Headers @{"Metadata"="true"} -URI $uri -Method get
$publicIp = $jsonBody.network.interface[0].ipv4.ipaddress.publicIpAddress
Write-Host "Getting public IP: $($publicIp)"
И похоже, что вы также можете получить общедоступный IP-адрес внутри виртуальной машины Linux в Azure (из документации):
curl -H Metadata:true "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text"
Обратите внимание, что вы также можете получить частный IP-адрес, выбрав «.privateIpAddress». Как обычно мы отлаживаем значения возвращаемого JSON, добавляя точку останова в строку кода в строке Invoke-RestMethod, а затем вводим PowerShell, $ jsonBody, чтобы просмотреть полный ответ, после чего начинаем разбор вручную, чтобы найти соответствующее значение.
Вы можете делать гораздо больше с помощью службы метаданных Azure Instance. Все ее возможности можно посмотреть здесь: https://docs.microsoft.com/ru-ru/azure/virtual-machines/windows/instance-metadata-service