Azure функций для получения списка групп ресурсов в подписке - Nodejs - PullRequest
0 голосов
/ 07 августа 2020

Я создал функцию, которая будет получать список групп ресурсов в подписках


// Function to get the resource group
const getHttp = async (subscriptionId) => {
    const response = await fetch(
        `https://management.azure.com/subscriptions/${subscriptionId}/resourcegroups?api-version=2019-10-01`
    );

    if (response.status === 200) {
        const data = await response.json();
        return data;
    } else {
        throw new Error(
            'Unable to get list of resource group from Azure' +
                ' ' +
                response.status
        );
    }
};

module.exports = async function (context, req) {
    context.log('ListRG proccessed a request');
    const subscriptionId = 'xxx';

    const json = await getHttp(subscriptionId);

    console.log(json);
    context.log(json);
    context.res = { body: json };
};

, но получаю:

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

и это ошибка:

2020-08-07T11:25:27.915 [Error] Executed 'Functions.ListRg' (Failed, Id=4a10c117-5ded-4bb4-882e-94ec4eb6e28b, Duration=36ms)Result: FailureException: Error: Unable to get list of resource group from AzureStack: Error: Unable to get list of resource group from Azureat getHttp (D:\home\site\wwwroot\ListRg\index.js:12:9)at processTicksAndRejections (internal/process/task_queues.js:97:5)at async module.exports (D:\home\site\wwwroot\ListRg\index.js:20:15)

Для разрешений я использовал управляемые удостоверения и дал функцию Reader role в своей подписке

введите описание изображения здесь

что мне не хватает?

1 Ответ

1 голос
/ 10 августа 2020

По вашему требованию, мы не можем вызвать остальной api напрямую, хотя мы включили MSI. Если вы хотите использовать MSI для запроса списка групп ресурсов, обратитесь к решению, которое я предоставил ниже:

1. Установите модули:

npm install ms-rest-azure
npm install azure-arm-resource

2. Пожалуйста, обратитесь к моему коду ниже:

const msRestAzure = require("ms-rest-azure");
const { ResourceManagementClient } = require("azure-arm-resource");

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    credentials = await msRestAzure.loginWithAppServiceMSI({ resource: 'https://management.azure.com' });

    const subscriptionId = '<your subscription id>';

    const resourceClient = new ResourceManagementClient(credentials, subscriptionId);

    let finalResult = await resourceClient.resourceGroups.list();

    finalResult.forEach(element => { 
        console.log(element); 
    });

    context.res = { body: 'success' };

}

Кстати, мое решение использует sdk для выполнения запроса. Если вы хотите запросить api https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups?api-version=2019-10-01 прямо в коде функции, вам нужно сначала получить токен доступа, а затем установить токен в заголовке вашего «Fetch». Но на мой взгляд, я предлагаю вам использовать sdk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...