Приступая к разработке для Azure CDNGet started with Azure CDN development

С помощью библиотеки Azure CDN для .NET можно автоматизировать создание профилей и конечных точек CDN и управление ими.You can use the Azure CDN Library for .NET to automate creation and management of CDN profiles and endpoints. В этом руководстве описывается создание простого консольного приложения .NET, которое демонстрирует некоторые из доступных операций.This tutorial walks through the creation of a simple .NET console application that demonstrates several of the available operations. Данный учебник не содержит подробных сведений о всех аспектах библиотеки Azure CDN для .NET.This tutorial is not intended to describe all aspects of the Azure CDN Library for .NET in detail.

Для работы с этим руководством требуется Visual Studio 2015.You need Visual Studio 2015 to complete this tutorial. Visual Studio Community 2015 .Visual Studio Community 2015 is freely available for download.

Совет

Завершенный проект из этого учебника доступен для скачивания на сайте MSDN.The completed project from this tutorial is available for download on MSDN.

предварительные требованияPrerequisites

Перед созданием кода управления CDN необходимо выполнить определенную подготовку, чтобы код мог взаимодействовать с Azure Resource Manager.Before writing CDN management code, you must do some preparation to enable the code to interact with the Azure Resource Manager. Для этого сделайте следующее:To do this preparation, you need to:

  • Создайте группу ресурсов для профиля CDN, который мы создадим в этом руководстве.Create a resource group to contain the CDN profile created in this tutorial
  • Настройте Azure Active Directory, чтобы выполнить проверку подлинности приложения.Configure Azure Active Directory to provide authentication for the application
  • Примените разрешения для группы ресурсов, чтобы только авторизованные пользователи могли с помощью клиента Azure AD взаимодействовать с профилем CDN.Apply permissions to the resource group so that only authorized users from your Azure AD tenant can interact with the CDN profile

Создание группы ресурсовCreating the resource group

  1. Войдите на портал Azure.Sign in to the Azure Portal.

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

  3. Найдите Группу ресурсов, а затем в ее области щелкните Создать.Search for Resource group and in the Resource group pane, click Create.

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

  4. Назовите группу ресурсов CdnConsoleTutorial.Name your resource group CdnConsoleTutorial. Выберите свою подписку и ближайшее расположение.Select your subscription and choose a location near you. При желании установите флажок Закрепить на панели мониторинга, чтобы закрепить группу ресурсов на панели мониторинга на портале.If you wish, you can click the Pin to dashboard checkbox to pin the resource group to the dashboard in the portal. Так ее будет проще найти.Pinning makes it easier to find later. Выберите необходимые параметры, а затем нажмите кнопку Создать.After you've made your selections, click Create.

    Присвоение имени группе ресурсов

  5. Если вы не закрепили созданную группу ресурсов на панели мониторинга, щелкните Обзор, а затем — Группы ресурсов, чтобы найти группу.After the resource group is created, if you didn't pin it to your dashboard, you can find it by clicking Browse, then Resource Groups. Щелкните группу ресурсов, чтобы открыть ее.To open it, click the resource group. Запишите идентификатор подписки.Make a note of your Subscription ID. Он понадобится нам позже.We need it later.

    Присвоение имени группе ресурсов

Создание приложения Azure AD и применение разрешенийCreating the Azure AD application and applying permissions

Существует два подхода к проверке подлинности приложений с Azure Active Directory: Отдельных пользователей или субъекта-службы.There are two approaches to app authentication with Azure Active Directory: Individual users or a service principal. Субъект-служба аналогичен учетной записи службы в Windows.A service principal is similar to a service account in Windows. Вместо того, чтобы предоставить разрешения на взаимодействие с профилями CDN определенному пользователю, мы предоставляем их субъекту-службе.Instead of granting a particular user permissions to interact with the CDN profiles, permissions are instead granted to the service principal. Субъекты-службы обычно используются для автоматических, неинтерактивных процессов.Service principals are typically used for automated, non-interactive processes. Несмотря на то, что в этом учебнике создается интерактивное приложение консоли, мы будем использовать субъект-службу.Even though this tutorial is writing an interactive console app, we'll focus on the service principal approach.

Создание субъекта-службы состоит из нескольких шагов, включая создание приложения Azure Active Directory.Creating a service principal consists of several steps, including creating an Azure Active Directory application. Для этого воспользуйтесь инструкциями из этого руководства.To create it, we're going to follow this tutorial.

Важно!

Обязательно выполните все шаги, приведенные в связанном руководстве.Be sure to follow all the steps in the linked tutorial. Важно выполнить все в точности, как описано.It is important that you complete it exactly as described. Обязательно запишите идентификатор клиента, доменное имя клиента (обычно это домен .onmicrosoft.com, если вы не указали личный домен), идентификатор клиента и ключ проверки подлинности клиента, так как эти данные понадобятся позже.Make sure to note your tenant ID, tenant domain name (commonly a .onmicrosoft.com domain unless you've specified a custom domain), client ID, and client authentication key, as we need this information later. Следует ответственно отнестись к защите идентификатора клиента и ключа проверки подлинности клиента, так как с помощью этих учетных данных любой пользователь может выполнять операции в качестве субъекта-службы.Be careful to guard your client ID and client authentication key, as these credentials can be used by anyone to execute operations as the service principal.

На шаге "Настройка мультитенантного приложения" выберите Нет.When you get to the step named Configure multi-tenant application, select No.

На шаге Назначение роли приложению укажите группу ресурсов CdnConsoleTutorial, созданную ранее, но вместо роли Читатель назначьте роль Участник профиля CDN.When you get to the step Assign the application to a role, use the resource group created earlier, CdnConsoleTutorial, but instead of the Reader role, assign the CDN Profile Contributor role. Назначьте приложению роль Участник профиля CDN для группы ресурсов, а затем вернитесь к этому руководству.After you assign the application the CDN Profile Contributor role on your resource group, return to this tutorial.

Когда вы создадите субъект-службу и назначите роль Участник профиля CDN, колонка Пользователи вашей группы ресурсов будет выглядеть так.Once you've created your service principal and assigned the CDN Profile Contributor role, the Users blade for your resource group should look similar to the following image.

Колонка "Пользователи"

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

Если вместо субъекта-службы требуется настроить интерактивную аутентификацию отдельных пользователей, то необходимые действия будут похожи на настройку субъекта-службы.If, instead of a service principal, you'd rather have interactive individual user authentication, the process is similar to that for a service principal. На самом деле необходимо выполнить ту же самую процедуру, но с незначительными изменениями.In fact, you need to follow the same procedure, but make a few minor changes.

Важно!

Выполните следующие шаги, только если решили использовать аутентификацию отдельных пользователей, а не субъект-службу.Only follow these next steps if you are choosing to use individual user authentication instead of a service principal.

  1. Создавая приложение, вместо значения Веб-приложение выберите Собственное приложение.When creating your application, instead of Web Application, choose Native application.

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

  2. На следующей странице вам будет предложено ввести универсальный код ресурса (URI) перенаправления.On the next page, you are prompted for a redirect URI. Универсальный код ресурса (URI) не будет проверяться, но запомните, что вы ввели.The URI won't be validated, but remember what you entered. Он понадобится вам позже.You need it later.

  3. Не нужно создавать ключ проверки подлинности клиента.There is no need to create a client authentication key.

  4. Вместо того, чтобы назначить роль Участник роли CDN субъекту-службе, мы назначим ее отдельным пользователям или группам.Instead of assigning a service principal to the CDN Profile Contributor role, we're going to assign individual users or groups. Из этого примера понятно, что пользователю CDN Demo User назначена роль CDN Profile Contributor (Участник профиля CDN).In this example, you can see that I've assigned CDN Demo User to the CDN Profile Contributor role.

    Индивидуальный доступ пользователей

Создание проекта и добавление пакетов NugetCreate your project and add Nuget packages

Создав группу ресурсов для профилей CDN и назначив приложению Azure AD разрешения для управления профилями CDN и конечными точками в этой группе, мы можем приступить к созданию своего приложения.Now that we've created a resource group for our CDN profiles and given our Azure AD application permission to manage CDN profiles and endpoints within that group, we can start creating our application.

В Visual Studio 2015 щелкните Файл > Создать > Проект. Откроется диалоговое окно создания проекта.From within Visual Studio 2015, click File, New, Project... to open the new project dialog. В области слева разверните узел Visual C# и выберите Windows.Expand Visual C#, then select Windows in the pane on the left. В центральной области щелкните Консольное приложение.Click Console Application in the center pane. Присвойте проекту имя и нажмите кнопку ОК.Name your project, then click OK.

Новый проект

В нашем проекте будут использоваться некоторые библиотеки Azure, содержащиеся в пакетах Nuget.Our project is going to use some Azure libraries contained in Nuget packages. Давайте добавим их в проект.Let's add those to the project.

  1. В меню Сервис выберите Диспетчер пакетов NuGet, а затем — Консоль диспетчера пакетов.Click the Tools menu, Nuget Package Manager, then Package Manager Console.

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

  2. В консоли диспетчера пакетов выполните приведенную ниже команду, чтобы установить библиотеку аутентификации Active Directory (ADAL) .In the Package Manager Console, execute the following command to install the Active Directory Authentication Library (ADAL):

    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory

  3. Выполните следующую команду, чтобы установить библиотеки управления Azure CDN.Execute the following to install the Azure CDN Management Library:

    Install-Package Microsoft.Azure.Management.Cdn

Директивы, константы, главный метод и вспомогательные методыDirectives, constants, main method, and helper methods

Давайте напишем базовую структуру нашей программы.Let's get the basic structure of our program written.

  1. На вкладке Program.cs замените расположенные вверху директивы using на следующие.Back in the Program.cs tab, replace the using directives at the top with the following:

    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.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    
  2. Необходимо определить несколько констант, которые будут использоваться нашими методами.We need to define some constants our methods will use. В классе Program перед методом Main добавьте приведенный ниже код.In the Program class, but before the Main method, add the following. Обязательно замените заполнители, включая <угловые скобки> , собственными значениями.Be sure to replace the placeholders, including the <angle brackets>, with your own values as needed.

    //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. Кроме того, на уровне класса определите эти две переменные.Also at the class level, define these two variables. Мы воспользуемся ими позже, чтобы определить, существует ли профиль или конечная точка.We'll use these later to determine if our profile and endpoint already exist.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Замените метод Main следующим кодом.Replace the Main method as follows:

    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. Некоторые из других методов будет запрашивать у пользователя ответ на вопрос в формате "Да/нет".Some of our other methods are going to prompt the user with "Yes/No" questions. Добавьте следующий метод, чтобы упростить это.Add the following method to make that a little easier:

    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 .Now that the basic structure of our program is written, we should create the methods called by the Main method.

Проверка подлинностиAuthentication

Прежде чем можно будет использовать библиотеку управления Azure CDN, необходимо аутентифицировать наш субъект-службу и получить токен аутентификации.Before we can use the Azure CDN Management Library, we need to authenticate our service principal and obtain an authentication token. Этот метод использует ADAL для получения токена.This method uses ADAL to retrieve the token.

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 будет выглядеть немного иначе.If you are using individual user authentication, the GetAccessToken method will look slightly different.

Важно!

Используйте приведенный пример кода, только если решили использовать аутентификацию отдельных пользователей, а не субъект-службу.Only use this code sample if you are choosing to have individual user authentication instead of a service principal.

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) перенаправления, введенным при регистрации приложения в Azure AD.Be sure to replace <redirect URI> with the redirect URI you entered when you registered the application in Azure AD.

Вывод списка профилей CDN и конечных точекList CDN profiles and endpoints

Теперь все готово к выполнению операций CDN.Now we're ready to perform CDN operations. Первое, что делает наш метод, — выводит список профилей и конечных точек в группе ресурсов и, если он обнаруживает совпадение с именами профиля и конечных точек, указанными в константах, то учитывает это на будущее, чтобы мы не пытались создать повторяющиеся значения.The first thing our method does is list all the profiles and endpoints in our resource group, and if it finds a match for the profile and endpoint names specified in our constants, makes a note of that for later so we don't try to create duplicates.

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 и конечных точекCreate CDN profiles and endpoints

Далее мы создадим профиль.Next, we'll create a profile.

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);
    }
}

После этого мы создадим конечную точку.Once the profile is created, we'll create an endpoint.

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.The example above assigns the endpoint an origin named Contoso with a hostname www.contoso.com. Это следует изменить, указав собственное имя узла источника.You should change this to point to your own origin's hostname.

Очистка конечной точкиPurge an endpoint

После создания конечной точки одной из распространенных задач, которая может выполняться в нашей программе, является очистка содержимого в конечной точке.Assuming the endpoint has been created, one common task that we might want to perform in our program is purging the content in our endpoint.

private static void PromptPurgeCdnEndpoint(CdnManagementClient cdn)
{
    if (PromptUser(String.Format("Purge CDN endpoint {0}?", endpointName)))
    {
        Console.WriteLine("Purging endpoint. Please wait...");
        cdn.Endpoints.PurgeContent(endpointName, profileName, resourceGroupName, new List<string>() { "/*" });
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

Примечание

В приведенном выше примере строка /* означает, что я хочу очистить все содержимое в корне конечной точки.In the example above, the string /* denotes that I want to purge everything in the root of the endpoint path. Этот тоже самое, что установить флажок Очистить все в диалоговом окне "Очистить" на портале Azure.This is equivalent to checking Purge All in the Azure portal's "purge" dialog. В методе CreateCdnProfile я создал профиль Azure CDN от Verizon с помощью кода Sku = new Sku(SkuName.StandardVerizon), поэтому операция будет выполнена успешно.In the CreateCdnProfile method, I created our profile as an Azure CDN from Verizon profile using the code Sku = new Sku(SkuName.StandardVerizon), so this will be successful. Однако профили Azure CDN от Akamai не поддерживают функцию Очистить все. Если бы я использовал в этом руководстве профиль Akamai, мне пришлось бы указать конкретные расположения, в которых нужно выполнить очистку.However, Azure CDN from Akamai profiles do not support Purge All, so if I was using an Akamai profile for this tutorial, I would need to include specific paths to purge.

Удаление профилей CDN и конечных точекDelete CDN profiles and endpoints

Последние методы удаляют конечную точку и профиль.The last methods will delete our endpoint and profile.

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();
    }
}

Запуск программыRunning the program

Теперь можно скомпилировать и запустить программу, нажав в Visual Studio кнопку Запустить .We can now compile and run the program by clicking the Start button in Visual Studio.

Выполнение программы

Когда программа дойдет до упомянутого выше запроса, вы сможете вернуться к группе ресурсов на портале Azure и увидеть, что профиль создан.When the program reaches the above prompt, you should be able to return to your resource group in the Azure portal and see that the profile has been created.

Готово!

Затем мы можем подтвердить запросы, чтобы была выполнена оставшаяся часть программы.We can then confirm the prompts to run the rest of the program.

Завершение программы

Следующие шагиNext Steps

Чтобы просмотреть описываемый в этом руководстве готовый проект, скачайте пример.To see the completed project from this walkthrough, download the sample.

Чтобы найти дополнительную документацию по библиотеке управления Azure CDN для .NET, воспользуйтесь справкой на сайте MSDN.To find additional documentation on the Azure CDN Management Library for .NET, view the reference on MSDN.

Управление ресурсами CDN с помощью PowerShell.Manage your CDN resources with PowerShell.