在Azure函数的Node.js运行时中,是否可以在不知道资源组的情况下按IP地址获取VM?
我正在Azure函数中运行Node.js,试图检索资源组和VM的名称,同时只知道发送的IP。是否可以在Azure中使用Node.js SDK检索与订阅关联的所有公共IP地址 在powershell中,我可以编写在Azure函数的Node.js运行时中,是否可以在不知道资源组的情况下按IP地址获取VM?,node.js,azure,azure-functions,Node.js,Azure,Azure Functions,我正在Azure函数中运行Node.js,试图检索资源组和VM的名称,同时只知道发送的IP。是否可以在Azure中使用Node.js SDK检索与订阅关联的所有公共IP地址 在powershell中,我可以编写az网络公共ip列表,该列表将提供一个JSON,其中包含以下信息: "id": "/subscriptions/444444-4444-43444d8-44444c/resourceGroups/testserver/providers/Microsoft.Network/publicIP
az网络公共ip列表
,该列表将提供一个JSON,其中包含以下信息:
"id": "/subscriptions/444444-4444-43444d8-44444c/resourceGroups/testserver/providers/Microsoft.Network/publicIPAddresses/publicip",
"idleTimeoutInMinutes": 4,
"ipAddress": "55.55.55.55",
但是,在节点中,当调用类似的函数时,networkClient.publicipaddress.listAll()
我会收到一个id列表,但不是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' },
是否可以在节点中获取所有公共IP并使用它来确定资源组和关联的VM
谢谢。是的,可以在Node中使用。在Azure上,所有SDK都是通过包装REST API构建的。因此,如果您可以找到所需功能的RESTAPI,您还可以使用所用语言的相关SDK API 有一个REST API,其响应与命令的结果相同
az network public ip list
。我们必须注意所需参数api version
的值为2018-11-01
,它是ARM api的最新版本
考虑到不同SDK版本中使用的不同api版本
值,首先要通过npm update azure arm network--save将azure arm network
包版本升级到最新版本,然后运行如下代码,其中引用了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);
}
您可以通过Fiddler
,使用查询参数API version=2018-11-01
检查上面的API调用是否正确调用了正确的REST API
此外,您还可以使用Authorization
头直接调用RESTAPI,该头的值来自上述代码的credentials
变量 我没有使用nodejs sdk,但我的猜测是:您需要迭代资源ID并获取每个资源,直到找到具有匹配ipThanks-Peter的资源,这非常有用!