Можно ли получить виртуальную машину по IP-адресу, не зная группы ресурсов, в среде выполнения Node.js в функции Azure? - PullRequest
0 голосов
/ 25 января 2019

Я запускаю Node.js в функции Azure и пытаюсь получить группу ресурсов и имя виртуальной машины, зная только отправленный IP-адрес.Можно ли получить все общедоступные IP-адреса, связанные с подпиской, с помощью Node.js SDK в Azure?

В powershell я могу написать az network public-ip list, который предоставит JSON, содержащий такую ​​информацию, как:

"id": "/subscriptions/444444-4444-43444d8-44444c/resourceGroups/testserver/providers/Microsoft.Network/publicIPAddresses/publicip",
"idleTimeoutInMinutes": 4,
"ipAddress": "55.55.55.55",

Однако в Node при вызове аналогичной функции networkClient.PublicIPAddresses.listAll() я получаю список идентификаторов, но не IP-адрес.то есть:

[1/25/2019 7:19:47 PM]     publicIPAddressVersion: 'IPv4',
[1/25/2019 7:19:47 PM]     ipConfiguration:
[1/25/2019 7:19:47 PM]      { id:
[1/25/2019 7:19:47 PM]         '/subscriptions/444444-4444-43444d8-44444/resourceGroups/TEST/providers/Microsoft.Network/networkInterfaces/test-vm1968/ipConfigurations/ipconfig1' },

Возможно ли в Node получить все общедоступные IP-адреса и использовать их для определения группы ресурсов и связанной виртуальной машины?

Спасибо.

1 Ответ

0 голосов
/ 28 января 2019

Да, это возможно в узле. В Azure все SDK создаются путем переноса REST API. Поэтому, если вы можете узнать REST API нужной вам функции, вы также можете использовать соответствующий SDK API для вашего используемого языка.

Существует REST API PublicIPAddress(Preview) - List All, ответ которого совпадает с результатом команды az network public-ip list. Мы должны отметить, что значение обязательного параметра api-version равно 2018-11-01, и это самая новая версия ARM API.

Учитывая различные значения api-version, используемые в разных версиях SDK, сначала обновите версию пакета azure-arm-network до новейшей с помощью npm update azure-arm-network --save, а затем запустите код, подобный приведенному ниже, который ссылается на пример кода vm-sample.js `в GitHub.

var util = require('util');
var path = require('path');
var msRestAzure = require('ms-rest-azure');
var NetworkManagementClient = require('azure-arm-network');

var FileTokenCache = require('../../lib/util/fileTokenCache');
var tokenCache = new FileTokenCache(path.resolve(path.join(__dirname, '../../test/tmp/tokenstore.json')));

//Environment Setup
_validateEnvironmentVariables();
var clientId = process.env['CLIENT_ID'];
var domain = process.env['DOMAIN'];
var secret = process.env['APPLICATION_SECRET'];
var subscriptionId = process.env['AZURE_SUBSCRIPTION_ID'];
var credentials = new msRestAzure.ApplicationTokenCredentials(clientId, domain, secret, { 'tokenCache': tokenCache });
var networkClient = new NetworkManagementClient(credentials, subscriptionId);

function listAllPublicIP(options, callback) {
    return networkClient.publicIPAddresses.listAll(options, callback);
}

Вы можете проверить приведенный выше вызов API, правильно ли вызывает правильный API REST с параметром запроса api-version=2018-11-01 через Fiddler.

Кроме того, вы можете напрямую вызвать REST API с заголовком Authorization, значение которого получено из переменной credentials приведенного выше кода.

...