Приступая к работе с библиотекой Azure CDN для .NET
Внимание
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 для выхода на пенсию.
С помощью библиотеки Azure CDN для .NET можно автоматизировать создание профилей и конечных точек CDN и управление ими. В этом руководстве описывается создание простого консольного приложения .NET, которое демонстрирует некоторые из доступных операций. Это руководство не предназначено для подробного описания всех аспектов библиотеки CDN Azure для .NET.
Для работы с этим руководством требуется Visual Studio 2015. Visual Studio Community 2015 .
Совет
Завершенный проект из этого учебника доступен для скачивания на сайте MSDN.
Необходимые компоненты
Перед созданием кода управления 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).
Создание проекта и добавление пакетов NuGet
Теперь, когда мы создали группу ресурсов для профилей CDN и предоставили приложению Microsoft Entra разрешение на управление профилями и конечными точками CDN в этой группе, мы можем приступить к созданию приложения.
Внимание
Пакет NuGet Microsoft.IdentityModel.Clients.ActiveDirectory и библиотека проверки подлинности Active Directory (ADAL) объявлены нерекомендуемыми. С 30 июня 2020 г. в них не добавлено никаких новых функций. Мы настоятельно рекомендуем вам выполнить обновление. Дополнительные сведения см. в руководстве по миграции.
В Visual Studio 2015 выберите "Файл", "Создать", "Проект", чтобы открыть диалоговое окно нового проекта. В области слева разверните узел Visual C# и выберите Windows. Выберите консольное приложение в центральной области. Присвойте проекту имя, а затем нажмите кнопку "ОК".
Наш проект будет использовать некоторые библиотеки Azure, содержащиеся в пакетах NuGet. Давайте добавим эти библиотеки в проект.
Выберите меню "Сервис", Nuget диспетчер пакетов, а затем диспетчер пакетов консоль.
В консоли диспетчера пакетов выполните приведенную ниже команду, чтобы установить библиотеку аутентификации Active Directory (ADAL).
Install-Package Microsoft.Identity.Client
Выполните следующую команду, чтобы установить библиотеки управления Azure CDN.
Install-Package Microsoft.Azure.Management.Cdn
Директивы, константы, главный метод и вспомогательные методы
Давайте напишем базовую структуру нашей программы.
Вернитесь на вкладку Program.cs, замените
using
директивы в верхней части следующей командой:using System; using System.Collections.Generic; using Microsoft.Azure.Management.Cdn; using Microsoft.Azure.Management.Cdn.Models; using Microsoft.Azure.Management.Resources; using Microsoft.Azure.Management.Resources.Models; using Microsoft.Identity.Client; using Microsoft.Rest;
Нам нужно определить некоторые константы, используемые нашими методами.
Program
В классе, но перед методомMain
добавьте следующие блоки кода. Обязательно замените заполнители, включая <угловые скобки>, собственными значениями.//Tenant app constants private const string clientID = "<YOUR CLIENT ID>"; private const string clientSecret = "<YOUR CLIENT AUTHENTICATION KEY>"; //Only for service principals private const string authority = "https://login.microsoftonline.com/<YOUR TENANT ID>/<YOUR TENANT DOMAIN NAME>"; //Application constants private const string subscriptionId = "<YOUR SUBSCRIPTION ID>"; private const string profileName = "CdnConsoleApp"; private const string endpointName = "<A UNIQUE NAME FOR YOUR CDN ENDPOINT>"; private const string resourceGroupName = "CdnConsoleTutorial"; private const string resourceLocation = "<YOUR PREFERRED AZURE LOCATION, SUCH AS Central US>";
Кроме того, на уровне класса определите эти две переменные. Мы используем эти переменные позже, чтобы определить, существует ли профиль и конечная точка.
static bool profileAlreadyExists = false; static bool endpointAlreadyExists = false;
Замените метод
Main
следующим кодом.static void Main(string[] args) { //Get a token AuthenticationResult authResult = GetAccessToken(); // Create CDN client CdnManagementClient cdn = new CdnManagementClient(new TokenCredentials(authResult.AccessToken)) { SubscriptionId = subscriptionId }; ListProfilesAndEndpoints(cdn); // Create CDN Profile CreateCdnProfile(cdn); // Create CDN Endpoint CreateCdnEndpoint(cdn); Console.WriteLine(); // Purge CDN Endpoint PromptPurgeCdnEndpoint(cdn); // Delete CDN Endpoint PromptDeleteCdnEndpoint(cdn); // Delete CDN Profile PromptDeleteCdnProfile(cdn); Console.WriteLine("Press Enter to end program."); Console.ReadLine(); }
Некоторые из других методов будет запрашивать у пользователя ответ на вопрос в формате "Да/нет". Добавьте следующий метод, чтобы упростить это.
private static bool PromptUser(string Question) { Console.Write(Question + " (Y/N): "); var response = Console.ReadKey(); Console.WriteLine(); if (response.Key == ConsoleKey.Y) { return true; } else if (response.Key == ConsoleKey.N) { return false; } else { // They pressed something other than Y or N. Let's ask them again. return PromptUser(Question); } }
Написав базовую структуру программы, давайте создадим методы, вызываемые методом Main
.
Проверка подлинности
Прежде чем можно будет использовать библиотеку управления Azure CDN, необходимо аутентифицировать наш субъект-службу и получить токен аутентификации. Этот метод использует библиотеку проверки подлинности Active Directory для получения маркера.
private static AuthenticationResult GetAccessToken()
{
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential credential = new ClientCredential(clientID, clientSecret);
AuthenticationResult authResult =
authContext.AcquireTokenAsync("https://management.core.windows.net/", credential).Result;
return authResult;
}
Если вы используете отдельную проверку подлинности пользователя, GetAccessToken
метод выглядит немного иначе.
Внимание
Используйте приведенный пример кода, только если решили использовать аутентификацию отдельных пользователей, а не субъект-службу.
private static AuthenticationResult GetAccessToken()
{
AuthenticationContext authContext = new AuthenticationContext(authority);
AuthenticationResult authResult = authContext.AcquireTokenAsync("https://management.core.windows.net/",
clientID, new Uri("http://<redirect URI>"), new PlatformParameters(PromptBehavior.RefreshSession)).Result;
return authResult;
}
Обязательно замените <redirect URI>
введенный URI перенаправления при регистрации приложения в идентификаторе Microsoft Entra.
Вывод списка профилей CDN и конечных точек
Теперь все готово к выполнению операций CDN. Первое, что делает наш метод, — это список всех профилей и конечных точек в нашей группе ресурсов, и если он находит совпадение с именами профилей и конечных точек, указанными в наших константах, запишите позже, чтобы мы не пытались создать дубликаты.
private static void ListProfilesAndEndpoints(CdnManagementClient cdn)
{
// List all the CDN profiles in this resource group
var profileList = cdn.Profiles.ListByResourceGroup(resourceGroupName);
foreach (Profile p in profileList)
{
Console.WriteLine("CDN profile {0}", p.Name);
if (p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase))
{
// Hey, that's the name of the CDN profile we want to create!
profileAlreadyExists = true;
}
//List all the CDN endpoints on this CDN profile
Console.WriteLine("Endpoints:");
var endpointList = cdn.Endpoints.ListByProfile(p.Name, resourceGroupName);
foreach (Endpoint e in endpointList)
{
Console.WriteLine("-{0} ({1})", e.Name, e.HostName);
if (e.Name.Equals(endpointName, StringComparison.OrdinalIgnoreCase))
{
// The unique endpoint name already exists.
endpointAlreadyExists = true;
}
}
Console.WriteLine();
}
}
Создание профилей CDN и конечных точек
Затем мы создадим профиль.
private static void CreateCdnProfile(CdnManagementClient cdn)
{
if (profileAlreadyExists)
{
Console.WriteLine("Profile {0} already exists.", profileName);
}
else
{
Console.WriteLine("Creating profile {0}.", profileName);
ProfileCreateParameters profileParms =
new ProfileCreateParameters() { Location = resourceLocation, Sku = new Sku(SkuName.StandardVerizon) };
cdn.Profiles.Create(profileName, profileParms, resourceGroupName);
}
}
После создания профиля мы создадим конечную точку.
private static void CreateCdnEndpoint(CdnManagementClient cdn)
{
if (endpointAlreadyExists)
{
Console.WriteLine("Profile {0} already exists.", profileName);
}
else
{
Console.WriteLine("Creating endpoint {0} on profile {1}.", endpointName, profileName);
EndpointCreateParameters endpointParms =
new EndpointCreateParameters()
{
Origins = new List<DeepCreatedOrigin>() { new DeepCreatedOrigin("Contoso", "www.contoso.com") },
IsHttpAllowed = true,
IsHttpsAllowed = true,
Location = resourceLocation
};
cdn.Endpoints.Create(endpointName, endpointParms, profileName, resourceGroupName);
}
}
Примечание.
В приведенном выше примере конечной точке назначается источник Contoso с именем узла www.contoso.com
. Это следует изменить, указав собственное имя узла источника.
Очистка конечной точки
После создания конечной точки одной из распространенных задач, которая может выполняться в нашей программе, является очистка содержимого в конечной точке.
private static void PromptPurgeCdnEndpoint(CdnManagementClient cdn)
{
if (PromptUser(String.Format("Purge CDN endpoint {0}?", endpointName)))
{
Console.WriteLine("Purging endpoint. Please wait...");
cdn.Endpoints.PurgeContent(resourceGroupName, profileName, endpointName, new List<string>() { "/*" });
Console.WriteLine("Done.");
Console.WriteLine();
}
}
Примечание.
В примере ранее строка /*
обозначает, что я хочу очистить все в корне пути конечной точки. Этот тоже самое, что установить флажок Очистить все в диалоговом окне "Очистить" на портале Azure. В методе CreateCdnProfile
я создал наш профиль в качестве azure CDN из профиля Edgio с помощью кода Sku = new Sku(SkuName.StandardVerizon)
, поэтому это будет успешно.
Удаление профилей CDN и конечных точек
Последние методы удаляют конечную точку и профиль.
private static void PromptDeleteCdnEndpoint(CdnManagementClient cdn)
{
if(PromptUser(String.Format("Delete CDN endpoint {0} on profile {1}?", endpointName, profileName)))
{
Console.WriteLine("Deleting endpoint. Please wait...");
cdn.Endpoints.DeleteIfExists(endpointName, profileName, resourceGroupName);
Console.WriteLine("Done.");
Console.WriteLine();
}
}
private static void PromptDeleteCdnProfile(CdnManagementClient cdn)
{
if(PromptUser(String.Format("Delete CDN profile {0}?", profileName)))
{
Console.WriteLine("Deleting profile. Please wait...");
cdn.Profiles.DeleteIfExists(profileName, resourceGroupName);
Console.WriteLine("Done.");
Console.WriteLine();
}
}
Запуск программы
Теперь можно скомпилировать и запустить программу, нажав в Visual Studio кнопку Запустить .
Когда программа дойдет до упомянутого выше запроса, вы сможете вернуться к группе ресурсов на портале Azure и увидеть, что профиль создан.
Затем мы можем подтвердить запросы, чтобы была выполнена оставшаяся часть программы.
Next Steps
Чтобы просмотреть описываемый в этом руководстве готовый проект, скачайте пример.
Дополнительные сведения о библиотеке управления AZURE CDN для .NET см. в справочнике по MSDN.
Управление ресурсами CDN с помощью PowerShell.