Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Azure CDN standard от Корпорации Майкрософт (классическая версия) будет прекращена 30 сентября 2027 г. Чтобы избежать нарушений работы служб, важно перенести профили Azure CDN уровня "Стандартный" от Майкрософт (классический) на уровень Azure Front Door standard или Premium к 30 сентября 2027 г. Дополнительные сведения см. в статье Azure CDN Standard от Майкрософт (классическая версия) — вывод из эксплуатации.
Azure CDN от Edgio был выведен из эксплуатации 15 января 2025 г. Для получения дополнительной информации см. FAQ по выводу из эксплуатации 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 Profile Contributor в вашей группе ресурсов, вернитесь к этому руководству.
Когда вы создадите служебную учетную запись и назначите роль Участник профиля CDN, колонка Пользователи вашей группы ресурсов будет выглядеть примерно следующим образом.
Интерактивная аутентификация пользователей
Если вы предпочли бы использовать интерактивную аутентификацию отдельных пользователей вместо служебного принципа, процесс будет аналогичен процессу для служебного принципа. На самом деле необходимо выполнить ту же самую процедуру, но с незначительными изменениями.
Внимание
Выполните следующие действия, только если вы решили использовать индивидуальную аутентификацию пользователей вместо учетной записи службы.
Создавая приложение, вместо значения Веб-приложение выберите Собственное приложение.
На следующей странице появится запрос на URI перенаправления. Универсальный код ресурса (URI) не будет проверяться, но запомните, что вы ввели. Он понадобится вам позже.
Нет необходимости создавать ключ проверки подлинности клиента.
Вместо того чтобы назначить учетной записи службы роль Участник профиля CDN, мы назначим ее отдельным пользователям или группам. Из этого примера понятно, что пользователю CDN Demo User назначена роль CDN Profile Contributor.
Создание проекта и добавление пакетов 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 ID.
Перечислить профили 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.
Удаление профилей 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 и увидеть, что профиль создан.
Затем мы можем подтвердить запросы, чтобы была выполнена оставшаяся часть программы.
Следующие шаги
Дополнительные сведения о библиотеке управления AZURE CDN для .NET см. в справочнике по MSDN.
Управление ресурсами CDN с помощью PowerShell.