Поделиться через


Начало работы с разработкой на Azure CDN

Внимание

Azure CDN standard от Корпорации Майкрософт (классическая версия) будет прекращена 30 сентября 2027 г. Чтобы избежать нарушений работы служб, важно перенести профили Azure CDN уровня "Стандартный" от Майкрософт (классический) на уровень Azure Front Door standard или Premium к 30 сентября 2027 г. Дополнительные сведения см. в статье Azure CDN Standard от Майкрософт (классическая версия) о прекращении поддержки.

Azure CDN из Эдгио был снят с эксплуатации 15 января 2025 г. Дополнительные сведения см. в статье FAQ по выводу из эксплуатации Azure CDN от Edgio.

С помощью пакета SDK Azure CDN для JavaScript можно автоматизировать создание профилей и конечных точек CDN и управление ими. В этом руководстве описывается создание простого консольного приложения Node.js с примерами некоторых доступных операций. Это руководство не содержит подробные сведения обо всех свойствах пакета Azure CDN SDK для JavaScript.

Чтобы завершить работу с этим учебником, у вас уже должен быть установлен и настроен Node.js6.x.x или более поздней версии. Для создания приложения Node.js вы можете использовать любой текстовый редактор. Для написания этого учебника я использовал Visual Studio Code.

Предварительные условия

Перед созданием кода управления CDN необходимо выполнить определенную подготовку, чтобы код мог взаимодействовать с Azure Resource Manager. Для этого сделайте следующее:

  • Создайте группу ресурсов, чтобы содержать профиль CDN, созданный в этом руководстве.
  • Настройка идентификатора Microsoft Entra для предоставления проверки подлинности для приложения
  • Примените разрешения к группе ресурсов, чтобы только авторизованные пользователи из тенанта Microsoft Entra могли взаимодействовать с профилем CDN.

Создание группы ресурсов

  1. Войдите на портал Azure.

  2. Выберите Создать ресурс.

  3. Найдите группу ресурсов и в области группы ресурсов нажмите кнопку "Создать".

    Создание новой группы ресурсов

  4. Назовите группу ресурсов CdnConsoleTutorial. Выберите подписку и местоположение рядом с вами. Если вы хотите, установите флажок "Закрепить на панели мониторинга ", чтобы закрепить группу ресурсов на панели мониторинга на портале. Закрепление делает ее проще найти позже. После выбора нажмите кнопку "Создать".

    Снимок экрана с диалоговым окном

  5. После создания группы ресурсов, если вы не закрепили её на панели мониторинга, щелкните Обзор, а затем — Группы ресурсов, чтобы найти группу. Чтобы открыть его, выберите группу ресурсов. Запишите идентификатор подписки. Он понадобится нам позже.

    Снимок экрана раздела Руководства по консоли CDN.

Создание приложения Microsoft Entra и применение разрешений

Существует два подхода к проверке подлинности приложения с помощью Microsoft Entra ID: отдельных пользователей или программного клиента. Субъект-служба аналогичен учетной записи службы в Windows. Вместо того, чтобы предоставить разрешения на взаимодействие с профилями CDN определенному пользователю, мы предоставляем их субъекту-службе. Субъекты-службы обычно используются для автоматических, неинтерактивных процессов. Несмотря на то, что в этом руководстве создается интерактивное консольное приложение, мы сосредоточимся на подходе с использованием служебного принципала.

Создание учетной записи службы состоит из нескольких шагов, включая создание приложения Microsoft Entra. Чтобы это создать, мы собираемся следовать этому руководству.

Внимание

Обязательно выполните все шаги, приведенные в связанном руководстве. Важно выполнить все в точности, как описано. Обязательно запишите идентификатор клиента, доменное имя клиента (обычно это домен .onmicrosoft.com, если вы не указали личный домен), идентификатор клиента и ключ проверки подлинности клиента, так как эти данные понадобятся позже. Следует ответственно отнестись к защите идентификатора клиента и ключа проверки подлинности клиента, так как с помощью этих учетных данных любой пользователь может выполнять операции в качестве субъекта-службы.

На шаге "Настройка мультитенантного приложения" выберите Нет.

На шаге Назначение роли приложению укажите группу ресурсов CdnConsoleTutorial, созданную ранее, но вместо роли Читатель назначьте роль Участник профиля CDN. После того как вы назначите приложению роль Участник профиля CDN для своей группы ресурсов, вернитесь к этому уроку.

Когда вы создадите учётную запись службы и назначите роль Участник профиля CDN, страница Пользователи вашей группы ресурсов будет выглядеть следующим образом.

Панель

Интерактивная аутентификация пользователей

Если вы предпочитаете использовать интерактивную аутентификацию отдельных пользователей вместо субъекта-службы, то процесс будет аналогичен настройке субъекта-службы. На самом деле необходимо выполнить ту же самую процедуру, но с незначительными изменениями.

Внимание

Выполните следующие действия, только если вы решили использовать индивидуальную аутентификацию пользователей вместо учетной записи службы.

  1. Создавая приложение, вместо значения Веб-приложение выберите Собственное приложение.

    Собственное приложение

  2. На следующей странице появится запрос на URI перенаправления. Универсальный код ресурса (URI) не будет проверяться, но запомните, что вы ввели. Он понадобится вам позже.

  3. Нет необходимости создавать ключ проверки подлинности клиента.

  4. Вместо того чтобы назначить служебному принципалу роль Участник профиля CDN, мы назначим ее отдельным пользователям или группам. Из этого примера видно, что пользователю CDN Demo User назначена роль CDN Profile Contributor.

    Индивидуальный доступ пользователей

Создание проекта и добавление зависимостей npm

Теперь, когда мы создали группу ресурсов для профилей CDN и предоставили приложению Microsoft Entra разрешение на управление профилями и конечными точками CDN в этой группе, мы можем приступить к созданию приложения.

Создайте папку для хранения приложения. С помощью консоли, в которой средства Node.js включены в текущий путь, установите текущую директорию на этот новый каталог и инициализируйте проект, выполнив следующую команду.

npm init

Вам будет предложено ответить на ряд вопросов для инициализации проекта. В качестве точки входав этом руководстве используется app.js. В следующем примере вы можете увидеть мои другие варианты.

Скриншот вывода команды NPM init.

Теперь наш проект будет инициализирован с помощью файла packages.json . Наш проект будет использовать некоторые библиотеки Azure, содержащиеся в пакетах npm. Мы будем использовать библиотеку для проверки подлинности Microsoft Entra в Node.js (@Azure/identity) и клиентской библиотеке Azure CDN для JavaScript (@Azure/Azure Resource Manager-cdn). Давайте добавим эти зависимости в проект.

npm install --save @azure/identity
npm install --save @azure/arm-cdn

Когда установка этих пакетов завершится, файл package.json должен выглядеть примерно так (номер версии может отличаться):

{
  "name": "cdn_node",
  "version": "1.0.0",
  "description": "Azure CDN Node.js tutorial project",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Cam Soper",
  "license": "MIT",
  "dependencies": {
    "@azure/arm-cdn": "^7.0.1",
    "@azure/identity": "^2.0.4"
  }
}

И, наконец, создайте с помощью текстового редактора пустой текстовый файл и сохраните его с именем app.jsв корневой папке проекта. Теперь мы готовы приступить к написанию кода.

Требования, константы, проверка подлинности и структура

Давайте откроем файл app.js в редакторе и создадим базовую структуру нашей программы.

  1. Добавьте "требуется" для наших пакетов npm в верхней части с помощью следующих элементов:

    const { DefaultAzureCredential } = require("@azure/identity");
    const { CdnManagementClient } = require('@azure/arm-cdn');
    
  2. Необходимо определить несколько констант, которые будут использоваться нашими методами. Добавьте следующее. Обязательно замените заполнители, включая <угловые скобки>, на ваши собственные значения по мере необходимости.

    //Tenant app constants
    const clientId = "<YOUR CLIENT ID>";
    const clientSecret = "<YOUR CLIENT AUTHENTICATION KEY>"; //Only for service principals
    const tenantId = "<YOUR TENANT ID>";
    
    //Application constants
    const subscriptionId = "<YOUR SUBSCRIPTION ID>";
    const resourceGroupName = "CdnConsoleTutorial";
    const resourceLocation = "<YOUR PREFERRED AZURE LOCATION, SUCH AS Central US>";
    
  3. Далее мы создадим клиент управления CDN и передадим ему наши учетные данные.

    var credentials = new DefaultAzureCredential();
    var cdnClient = new CdnManagementClient(credentials, subscriptionId);
    
  4. Консольное приложение Node.js будет принимать некоторые параметры командной строки. Давайте проверим, что передан хотя бы один параметр.

    //Collect command-line parameters
    var parms = process.argv.slice(2);
    
    //Do we have parameters?
    if(parms == null || parms.length == 0)
    {
        console.log("Not enough parameters!");
        console.log("Valid commands are list, delete, create, and purge.");
        process.exit(1);
    }
    
  5. Теперь мы добрались до основной части нашей программы — мы будем запускать другие функции в зависимости от того, какие параметры были переданы.

    switch(parms[0].toLowerCase())
    {
        case "list":
            cdnList();
            break;
    
        case "create":
            cdnCreate();
            break;
    
        case "delete":
            cdnDelete();
            break;
    
        case "purge":
            cdnPurge();
            break;
    
        default:
            console.log("Valid commands are list, delete, create, and purge.");
            process.exit(1);
    }
    
  6. Также мы будем проверять, передано ли нужное число параметров; если параметры имеют неправильный формат, будут отображены подсказки. Давайте создадим для этого функции.

    function requireParms(parmCount) {
        if(parms.length < parmCount) {
            usageHelp(parms[0].toLowerCase());
            process.exit(1);
        }
    }
    
    function usageHelp(cmd) {
        console.log("Usage for " + cmd + ":");
        switch(cmd)
        {
            case "list":
                console.log("list profiles");
                console.log("list endpoints <profile name>");
                break;
    
            case "create":
                console.log("create profile <profile name>");
                console.log("create endpoint <profile name> <endpoint name> <origin hostname>");
                break;
    
            case "delete":
                console.log("delete profile <profile name>");
                console.log("delete endpoint <profile name> <endpoint name>");
                break;
    
            case "purge":
                console.log("purge <profile name> <endpoint name> <path>");
                break;
    
            default:
                console.log("Invalid command.");
        }
    }
    
  7. Кроме того, мы будем использовать на клиенте управления CDN асинхронные функции, поэтому нам нужен метод для обратного вызова после завершения их работы. Давайте создадим такой метод, который будет отображать данные, полученные от клиента управления CDN (если они есть) и корректно завершать работу программы.

    function callback(err, result, request, response) {
        if (err) {
            console.log(err);
            process.exit(1);
        } else {
            console.log((result == null) ? "Done!" : result);
            process.exit(0);
        }
    }
    

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

Список профилей CDN и конечных точек

Давайте начнем с кода, который выводит список существующих профилей и конечных точек. Я дополню код комментариями с описанием синтаксиса, чтобы было понятно, для чего предназначен каждый параметр.

// list profiles
// list endpoints <profile name>
function cdnList(){
    requireParms(2);
    switch(parms[1].toLowerCase())
    {
        case "profiles":
            console.log("Listing profiles...");
            cdnClient.profiles.listByResourceGroup(resourceGroupName, callback);
            break;

        case "endpoints":
            requireParms(3);
            console.log("Listing endpoints...");
            cdnClient.endpoints.listByProfile(resourceGroupName, parms[2], callback);
            break;

        default:
            console.log("Invalid parameter.");
            process.exit(1);
    }
}

Создание профилей CDN и конечных точек

Теперь давайте напишем функцию для создания профилей и конечных точек.

function cdnCreate() {
    requireParms(2);
    switch(parms[1].toLowerCase())
    {
        case "profile":
            cdnCreateProfile();
            break;

        case "endpoint":
            cdnCreateEndpoint();
            break;

        default:
            console.log("Invalid parameter.");
            process.exit(1);
    }
}

// create profile <profile name>
async function cdnCreateProfile() {
    requireParms(3);
    console.log("Creating profile...");
    var standardCreateParameters = {
        location: resourceLocation,
        sku: {
            name: 'Standard_Verizon'
        }
    };

    await cdnClient.profiles.beginCreateAndWait( resourceGroupName, parms[2], standardCreateParameters, callback);
}

// create endpoint <profile name> <endpoint name> <origin hostname>        
async function cdnCreateEndpoint() {
    requireParms(5);
    console.log("Creating endpoint...");
    var endpointProperties = {
        location: resourceLocation,
        origins: [{
            name: parms[4],
            hostName: parms[4]
        }]
    };

    await cdnClient.endpoints.beginCreateAndWait(resourceGroupName, parms[2], parms[3], endpointProperties, callback);
}

Очистка конечной точки

Одной из задач, которая может выполняться в программе после создания конечной точки, является очистка содержимого в ней.

// purge <profile name> <endpoint name> <path>
async function cdnPurge() {
    requireParms(4);
    console.log("Purging endpoint...");
    var purgeContentPaths = [ parms[3] ];
    await cdnClient.endpoints.beginPurgeContentAndWait(resourceGroupName, parms[2], parms[3], purgeContentPaths, callback);
}

Удаление профилей CDN и конечных точек

Последняя функция, которую мы включим, удаляет конечные точки и профили.

async function cdnDelete() {
    requireParms(2);
    switch(parms[1].toLowerCase())
    {
        // delete profile <profile name>
        case "profile":
            requireParms(3);
            console.log("Deleting profile...");
            await cdnClient.profiles.beginDeleteAndWait(resourceGroupName, parms[2], callback);
            break;

        // delete endpoint <profile name> <endpoint name>
        case "endpoint":
            requireParms(4);
            console.log("Deleting endpoint...");
            await cdnClient.endpoints.beginDeleteAndWait(resourceGroupName, parms[2], parms[3], callback);
            break;

        default:
            console.log("Invalid parameter.");
            process.exit(1);
    }
}

Запуск программы

Теперь мы можем выполнить нашу программу Node.js в любом удобном отладчике или консоли.

Совет

Если вы используете в качестве отладчика Visual Studio Code, вам потребуется настроить среду для передачи параметров командной строки. Для этой цели в Visual Studio Code используется файл launch.json. Найдите в нем свойство args и добавьте массив строковых значений со своими параметрами следующего вида: "args": ["list", "profiles"].

Давайте начнем с перечисления наших профилей.

Список профилей

Мы получили пустой массив. Это ожидаемо, ведь в нашей группе ресурсов пока нет профилей. Теперь давайте создадим профиль.

Создание профиля

Теперь мы добавим конечную точку.

Создать конечную точку

И в завершение давайте удалим профиль.

Удалить профиль

Следующие шаги

Справочную информацию о пакете SDK Azure CDN для JavaScript вы найдете здесь.

Чтобы получить дополнительную документацию о пакете SDK Azure для JavaScript, откройте полный справочник.

Управление ресурсами CDN с помощью PowerShell.