Приступая к разработке для Azure CDN
Внимание
Azure CDN standard от Корпорации Майкрософт (классическая версия) будет прекращена 30 сентября 2027 г. Чтобы избежать нарушений работы службы, важно перенести профили Azure CDN уровня "Стандартный" от Майкрософт (классический) на уровень Azure Front Door standard или Premium к 30 сентября 2027 года. Дополнительные сведения см. в статье Azure CDN Standard от майкрософт (классическая версия).
Azure CDN из Эдгио будет прекращено 4 ноября 2025 г. Перед этой датой необходимо перенести рабочую нагрузку в Azure Front Door. Дополнительные сведения см. в статье 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.
Создание группы ресурсов
Войдите на портал Azure.
Щелкните Создать ресурс.
Найдите Группу ресурсов, а затем в ее области щелкните Создать.
Назовите группу ресурсов CdnConsoleTutorial. Выберите свою подписку и ближайшее расположение. При желании установите флажок Закрепить на панели мониторинга, чтобы закрепить группу ресурсов на панели мониторинга на портале. Так ее будет проще найти. Выберите необходимые параметры, а затем нажмите кнопку Создать.
Если вы не закрепили созданную группу ресурсов на панели мониторинга, щелкните Обзор, а затем — Группы ресурсов, чтобы найти группу. Щелкните группу ресурсов, чтобы открыть ее. Запишите идентификатор подписки. Он понадобится нам позже.
Создание приложения Microsoft Entra и применение разрешений
Существует два подхода к проверке подлинности приложения с помощью идентификатора Microsoft Entra: отдельных пользователей или субъекта-службы. Субъект-служба аналогичен учетной записи службы в Windows. Вместо того, чтобы предоставить разрешения на взаимодействие с профилями CDN определенному пользователю, мы предоставляем их субъекту-службе. Субъекты-службы обычно используются для автоматических, неинтерактивных процессов. Несмотря на то, что в этом учебнике создается интерактивное приложение консоли, мы будем использовать субъект-службу.
Создание субъекта-службы состоит из нескольких шагов, включая создание приложения Microsoft Entra. Для этого воспользуйтесь инструкциями из этого руководства.
Внимание
Обязательно выполните все шаги, приведенные в связанном руководстве. Важно выполнить все в точности, как описано. Обязательно запишите идентификатор клиента, доменное имя клиента (обычно это домен .onmicrosoft.com, если вы не указали личный домен), идентификатор клиента и ключ проверки подлинности клиента, так как эти данные понадобятся позже. Следует ответственно отнестись к защите идентификатора клиента и ключа проверки подлинности клиента, так как с помощью этих учетных данных любой пользователь может выполнять операции в качестве субъекта-службы.
На шаге "Настройка мультитенантного приложения" выберите Нет.
На шаге Назначение роли приложению укажите группу ресурсов CdnConsoleTutorial, созданную ранее, но вместо роли Читатель назначьте роль Участник профиля CDN. Назначьте приложению роль Участник профиля CDN для группы ресурсов, а затем вернитесь к этому руководству.
Когда вы создадите субъект-службу и назначите роль Участник профиля CDN, колонка Пользователи вашей группы ресурсов будет выглядеть так.
Интерактивная аутентификация пользователей
Если вместо субъекта-службы требуется настроить интерактивную аутентификацию отдельных пользователей, то необходимые действия будут похожи на настройку субъекта-службы. На самом деле необходимо выполнить ту же самую процедуру, но с незначительными изменениями.
Внимание
Выполните следующие шаги, только если решили использовать аутентификацию отдельных пользователей, а не субъект-службу.
Создавая приложение, вместо значения Веб-приложение выберите Собственное приложение.
На следующей странице вам будет предложено ввести универсальный код ресурса (URI) перенаправления. Универсальный код ресурса (URI) не будет проверяться, но запомните, что вы ввели. Он понадобится вам позже.
Не нужно создавать ключ проверки подлинности клиента.
Вместо того, чтобы назначить роль Участник роли CDN субъекту-службе, мы назначим ее отдельным пользователям или группам. Из этого примера понятно, что пользователю CDN Demo User назначена роль CDN Profile Contributor (Участник профиля CDN).
Создание проекта и добавление зависимостей npm
Теперь, когда мы создали группу ресурсов для профилей CDN и предоставили приложению Microsoft Entra разрешение на управление профилями и конечными точками CDN в этой группе, мы можем приступить к созданию приложения.
Создайте папку для хранения приложения. С помощью консоли, в которой средства Node.js включены в текущий путь, перейдите в эту новую папку и инициализируйте проект с помощью следующей команды:
npm init
Вам будет предложено ответить на ряд вопросов для инициализации проекта. В качестве точки входав этом руководстве используется app.js. В приведенном ниже примере вы можете увидеть значения других параметров.
Теперь наш проект будет инициализирован с помощью файла 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 в редакторе и создадим базовую структуру нашей программы.
Добавьте "требуется" для наших пакетов npm в верхней части с помощью следующих элементов:
const { DefaultAzureCredential } = require("@azure/identity"); const { CdnManagementClient } = require('@azure/arm-cdn');
Необходимо определить несколько констант, которые будут использоваться нашими методами. Добавьте следующий код. Обязательно замените заполнители, включая <угловые скобки>, собственными значениями.
//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>";
Далее мы создадим клиент управления CDN и передадим ему наши учетные данные.
var credentials = new DefaultAzureCredential(); var cdnClient = new CdnManagementClient(credentials, subscriptionId);
Консольное приложение 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); }
Теперь мы добрались до основной части нашей программы — мы будем запускать другие функции в зависимости от того, какие параметры были переданы.
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); }
Также мы будем проверять, передано ли нужное число параметров; если параметры имеют неправильный формат, будут отображены подсказки. Давайте создадим для этого функции.
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."); } }
Кроме того, мы будем использовать на клиенте управления 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"]
.
Давайте начнем с получения списка профилей.
Мы получили пустой массив. Так и должно быть, ведь в нашей группе ресурсов пока нет профилей. Теперь давайте создадим профиль.
Теперь мы добавим конечную точку.
И в завершение давайте удалим профиль.
Next Steps
Справочную информацию о пакете SDK Azure CDN для JavaScript вы найдете здесь.
Чтобы получить дополнительную документацию о пакете SDK Azure для JavaScript, откройте полный справочник.
Управление ресурсами CDN с помощью PowerShell.