Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure函数的Node.js运行时中,是否可以在不知道资源组的情况下按IP地址获取VM?_Node.js_Azure_Azure Functions - Fatal编程技术网

在Azure函数的Node.js运行时中,是否可以在不知道资源组的情况下按IP地址获取VM?

在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

我正在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/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的资源,这非常有用!