Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
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 доступна для бесплатного скачивания.
Tip
Завершенный проект из этого учебника доступен для скачивания на сайте MSDN.
Предварительные условия
Перед созданием кода управления CDN необходимо выполнить определенную подготовку, чтобы код мог взаимодействовать с Azure Resource Manager. Для этого сделайте следующее:
- Создайте группу ресурсов для размещения в ней профиля CDN, созданного в этом руководстве.
- Настройка идентификатора Microsoft Entra для предоставления проверки подлинности для приложения
- Примените разрешения к группе ресурсов, таким образом, чтобы только авторизованные пользователи из арендатора Microsoft Entra могли взаимодействовать с профилем CDN.
Создание группы ресурсов
Войдите на портал Azure.
Выберите Создать ресурс.
Найдите группу ресурсов и в области группы ресурсов нажмите кнопку "Создать".
Назовите группу ресурсов CdnConsoleTutorial. Выберите подписку и место рядом с вами. Если вы хотите, установите флажок "Закрепить на панели мониторинга ", чтобы закрепить группу ресурсов на панели мониторинга на портале. Закрепление упрощает поиск позже. После выбора нажмите кнопку "Создать".
После создания группы ресурсов, если вы не закрепили её на панели мониторинга, нажмите Обзор, а затем — Группы ресурсов, чтобы найти её. Чтобы открыть его, выберите группу ресурсов. Запишите идентификатор подписки. Он понадобится нам позже.
Создание приложения Microsoft Entra и применение разрешений
Существует два подхода к аутентификации приложений с помощью Microsoft Entra ID: индивидуальные пользователи или служебный принципал. Принципал службы аналогичен учетной записи службы в Windows. Вместо предоставления определенному пользователю разрешений на взаимодействие с профилями CDN, разрешения предоставляются служебному принципалу. Субъекты-службы обычно используются для автоматизированных, неинтерактивных процессов. Несмотря на то, что в этом руководстве создается интерактивное консольное приложение, мы сосредоточимся на подходе субъекта-службы.
Создание прикладного объекта службы состоит из нескольких шагов, включая создание приложения Microsoft Entra. Для этого мы будем следовать этому руководству.
Внимание
Обязательно выполните все шаги, приведенные в связанном руководстве. Важно, чтобы вы выполнили его точно так же, как описано. Обязательно запишите идентификатор клиента, доменное имя клиента (обычно домен onmicrosoft.com , если вы не указываете личный домен), идентификатор клиента и ключ проверки подлинности клиента, так как нам потребуется эта информация позже. Следует ответственно отнестись к защите идентификатора клиента и ключа проверки подлинности клиента, так как с помощью этих учетных данных любой пользователь может выполнять операции в качестве субъекта-службы.
На шаге "Настройка мультитенантного приложения" выберите Нет.
На шаге Назначение роли приложению укажите группу ресурсов CdnConsoleTutorial, созданную ранее, но вместо роли Читатель назначьте роль Участник профиля CDN. После назначения приложения роли участника профиля CDN в группе ресурсов вернитесь к этому руководству.
После того как вы создали сервисный принципал и назначили роль CDN Profile Contributor, лепесток "Пользователи" для вашей группы ресурсов должен выглядеть примерно как на следующем изображении.
Интерактивная аутентификация пользователей
Если вместо служебного принциала вы предпочитаете интерактивную проверку подлинности индивидуального пользователя, то процесс будет аналогичен процессу для служебного принциала. На самом деле необходимо выполнить ту же самую процедуру, но с незначительными изменениями.
Внимание
Выполните следующие действия, только если вы выбираете использование индивидуальной проверки подлинности пользователей вместо служебного принципала.
Создавая приложение, вместо значения Веб-приложение выберите Собственное приложение.
На следующей странице появится запрос на URI перенаправления. Универсальный код ресурса (URI) не будет проверяться, но запомните, что вы ввели. Он понадобится вам позже.
Нет необходимости создавать ключ проверки подлинности клиента.
Вместо назначения субъекта-службы роли участника профиля CDN мы будем назначать отдельных пользователей или групп. В этом примере демонстрационный пользователь CDN назначается на роль участника профиля 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 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.