Приступая к работе с библиотекой 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.

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

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

  2. Щелкните Создать ресурс.

  3. Найдите Группу ресурсов, а затем в ее области щелкните Создать.

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

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

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

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

    Снимок экрана с разделом учебника по консоли C D N.

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

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

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

Внимание

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

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

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

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

Колонка

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

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

Внимание

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

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

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

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

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

  4. Вместо того, чтобы назначить роль Участник роли 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. Давайте добавим эти библиотеки в проект.

  1. Выберите меню "Сервис", Nuget диспетчер пакетов, а затем диспетчер пакетов консоль.

    Управление пакетами NuGet

  2. В консоли диспетчера пакетов выполните приведенную ниже команду, чтобы установить библиотеку аутентификации Active Directory (ADAL).

    Install-Package Microsoft.Identity.Client

  3. Выполните следующую команду, чтобы установить библиотеки управления Azure CDN.

    Install-Package Microsoft.Azure.Management.Cdn

Директивы, константы, главный метод и вспомогательные методы

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

  1. Вернитесь на вкладку 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;
    
  2. Нам нужно определить некоторые константы, используемые нашими методами. 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>";
    
  3. Кроме того, на уровне класса определите эти две переменные. Мы используем эти переменные позже, чтобы определить, существует ли профиль и конечная точка.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Замените метод 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();
    }
    
  5. Некоторые из других методов будет запрашивать у пользователя ответ на вопрос в формате "Да/нет". Добавьте следующий метод, чтобы упростить это.

    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.