Introducción al desarrollo de Azure CDNGet started with Azure CDN development

Puede usar la biblioteca de Azure CDN para .NET con el fin de automatizar la creación y la administración de perfiles y puntos de conexión de red CDN.You can use the Azure CDN Library for .NET to automate creation and management of CDN profiles and endpoints. Este tutorial describe la creación de una aplicación de consola .NET sencilla que muestra algunas de las operaciones disponibles.This tutorial walks through the creation of a simple .NET console application that demonstrates several of the available operations. Con este tutorial no se pretende describir todos los aspectos de la biblioteca de Azure CDN para .NET en detalle.This tutorial is not intended to describe all aspects of the Azure CDN Library for .NET in detail.

Necesita Visual Studio 2015 para completar este tutorial.You need Visual Studio 2015 to complete this tutorial. Visual Studio Community 2015 está disponible gratis para descargarse.Visual Studio Community 2015 is freely available for download.

Sugerencia

El proyecto completado en este tutorial está disponible para descargarse en MSDN.The completed project from this tutorial is available for download on MSDN.

Requisitos previosPrerequisites

Antes de escribir el código de administración de la red CDN, tiene que realizar algunos preparativos para habilitar el código para que interactúe con Azure Resource Manager.Before writing CDN management code, you must do some preparation to enable the code to interact with the Azure Resource Manager. Para hacer esta preparación, deberá:To do this preparation, you need to:

  • Crear un grupo de recursos que contenga el perfil de CDN creado en este tutorial.Create a resource group to contain the CDN profile created in this tutorial
  • Configurar Azure Active Directory para que proporcione autenticación para la aplicación.Configure Azure Active Directory to provide authentication for the application
  • Aplicar permisos al grupo de recursos para que solo los usuarios autorizados del inquilino de Azure AD puedan interactuar con el perfil de CDN.Apply permissions to the resource group so that only authorized users from your Azure AD tenant can interact with the CDN profile

Creación del grupo de recursosCreating the resource group

  1. Inicie sesión en Azure Portal.Sign in to the Azure Portal.

  2. Haga clic en Crear un recurso.Click Create a resource.

  3. Busque Grupo de recursos y, en el panel Grupo de recursos, haga clic en Crear.Search for Resource group and in the Resource group pane, click Create.

    Crear un grupo de recursos

  4. Llame al grupo de recursos CdnConsoleTutorial.Name your resource group CdnConsoleTutorial. Seleccione la suscripción y elija una ubicación cercana.Select your subscription and choose a location near you. Si lo desea, puede hacer clic en la casilla Anclar al panel para anclar el grupo de recursos al panel en el portal.If you wish, you can click the Pin to dashboard checkbox to pin the resource group to the dashboard in the portal. El anclaje hará que sea más fácil encontrarlo luego.Pinning makes it easier to find later. Cuando termine las selecciones, haga clic en Crear.After you've made your selections, click Create.

    Asignar un nombre al grupo de recursos

  5. Una vez creado el grupo de recursos, si no lo ancló al panel, para buscarlo, haga clic en Examinar y en Grupos de recursos.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. Para abrirlo, haga clic en el grupo de recursos.To open it, click the resource group. Tome nota del valor en Id. de suscripción.Make a note of your Subscription ID. Lo necesitará más adelante.We need it later.

    Asignar un nombre al grupo de recursos

Creación de la aplicación de Azure AD y aplicación de los permisosCreating the Azure AD application and applying permissions

Existen dos enfoques para la autenticación de la aplicación con Azure Active Directory: usuarios individuales o una entidad de servicio.There are two approaches to app authentication with Azure Active Directory: Individual users or a service principal. Una entidad de servicio se parece a una cuenta de servicio en Windows.A service principal is similar to a service account in Windows. En lugar de conceder permisos a usuarios concretos para que interactúen con los perfiles de CDN, los permisos se conceden a la entidad de servicio.Instead of granting a particular user permissions to interact with the CDN profiles, permissions are instead granted to the service principal. Las entidades de servicio se suelen utilizar para procesos automatizados no interactivos.Service principals are typically used for automated, non-interactive processes. Aunque en este tutorial escribimos una aplicación de consola interactiva, nos centraremos en el enfoque de entidad de servicio.Even though this tutorial is writing an interactive console app, we'll focus on the service principal approach.

Para crear una entidad de servicio, se siguen varios pasos, incluida la creación de una aplicación de Azure Active Directory.Creating a service principal consists of several steps, including creating an Azure Active Directory application. Para crearlo, complete este tutorial.To create it, we're going to follow this tutorial.

Importante

Asegúrese de seguir los pasos descritos en el tutorial vinculado.Be sure to follow all the steps in the linked tutorial. Es importante que lo complete exactamente como se describe.It is important that you complete it exactly as described. No se olvide de tomar nota del identificador de inquilino, el nombre de dominio del inquilino (por lo general, un dominio .onmicrosoft.com, a menos que haya especificado uno personalizado), el identificador de cliente y la clave de autenticación de cliente, ya que se necesitará esta información más adelante.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. Tenga cuidado de proteger el identificador de cliente y la clave de autenticación de cliente, ya que cualquiera puede usar estas credenciales para ejecutar operaciones como entidad de servicio.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.

Cuando llegue al paso denominado Configuración de aplicación multiinquilino, seleccione No.When you get to the step named Configure multi-tenant application, select No.

Cuando llegue al paso Asignación de aplicación a un rol, use el grupo de recursos que creó antes (CdnConsoleTutorial), pero en lugar del rol Lector, asigne el rol Colaborador de perfil de 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. Después de asignar la aplicación al rol CDN Profile Contributor (Colaborador de perfil de CDN) en el grupo de recursos, vuelva a este tutorial.After you assign the application the CDN Profile Contributor role on your resource group, return to this tutorial.

Una vez creada la entidad de servicio y asignado el rol CDN Profile Contributor (Colaborador de perfil de CDN), la hoja Usuarios del grupo de recursos debería parecerse a la imagen siguiente.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.

Hoja Usuarios

Autenticación interactiva de usuariosInteractive user authentication

Si, en lugar de una entidad de servicio, prefiere la autenticación interactiva de usuario individual, el proceso se parece al usado con una entidad de servicio.If, instead of a service principal, you'd rather have interactive individual user authentication, the process is similar to that for a service principal. De hecho, debe seguir el mismo procedimiento, con algunos cambios menores.In fact, you need to follow the same procedure, but make a few minor changes.

Importante

Siga estos pasos únicamente si opta por usar la autenticación de usuario individual en lugar de una entidad de servicio.Only follow these next steps if you are choosing to use individual user authentication instead of a service principal.

  1. Al crear la aplicación, en lugar de Aplicación web, elija Aplicación nativa.When creating your application, instead of Web Application, choose Native application.

    Aplicación nativa

  2. En la página siguiente, se le pedirá un URI de redirección.On the next page, you are prompted for a redirect URI. No se validará el URI, pero debe recordarlo.The URI won't be validated, but remember what you entered. Lo necesitará más adelante.You need it later.

  3. No hay necesidad de crear una clave de autenticación de cliente.There is no need to create a client authentication key.

  4. En lugar de asignar una entidad de servicio al rol CDN Profile Contributor (Colaborador de perfil de CDN), vamos a asignar usuarios individuales o grupos.Instead of assigning a service principal to the CDN Profile Contributor role, we're going to assign individual users or groups. En este ejemplo, puede ver que hemos asignado CDN Demo User (Usuario de demostración de CDN) al rol CDN Profile Contributor (Colaborador de perfil de CDN).In this example, you can see that I've assigned CDN Demo User to the CDN Profile Contributor role.

    Acceso de usuario individual

Creación del proyecto e incorporación de paquetes NuGetCreate your project and add Nuget packages

Ahora que hemos creado un grupo de recursos para los perfiles de CDN y concedido permiso a la aplicación de Azure AD para administrar perfiles y puntos de conexión de CDN dentro de ese grupo, podemos comenzar a crear la aplicación.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.

En Visual Studio 2015, haga clic en Archivo, Nuevo, Proyecto… para abrir el diálogo Nuevo proyecto.From within Visual Studio 2015, click File, New, Project... to open the new project dialog. Expanda Visual C# y seleccione Windows en el panel de la izquierda.Expand Visual C#, then select Windows in the pane on the left. Haga clic en Aplicación de consola en el panel central.Click Console Application in the center pane. Asigne un nombre al proyecto y haga clic en Aceptar.Name your project, then click OK.

Nuevo proyecto

El proyecto va a usar algunas bibliotecas de Azure contenidas en paquetes NuGet.Our project is going to use some Azure libraries contained in Nuget packages. Vamos a agregarlos al proyecto.Let's add those to the project.

  1. Haga clic en el menú Herramientas, Administrador de paquetes NuGet y, después, en Consola del Administrador de paquetes.Click the Tools menu, Nuget Package Manager, then Package Manager Console.

    Administrar paquetes NuGet

  2. En la Consola del Administrador de paquetes, ejecute el siguiente comando para instalar la biblioteca de autenticación de 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. Ejecute lo siguiente para instalar la biblioteca de administración de Azure CDN:Execute the following to install the Azure CDN Management Library:

    Install-Package Microsoft.Azure.Management.Cdn

Directivas, constantes, método Main y métodos auxiliaresDirectives, constants, main method, and helper methods

Escribamos la estructura básica del programa.Let's get the basic structure of our program written.

  1. En la pestaña Program.cs, reemplace las directivas using del principio por lo siguiente: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. Necesitamos definir algunas constantes que los métodos van a usar.We need to define some constants our methods will use. En la clase Program, pero antes del método Main, agregue lo siguiente.In the Program class, but before the Main method, add the following. Asegúrese de reemplazar los marcadores de posición (incluidos los <corchetes angulares> ) con sus propios valores según sea necesario.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. También en el nivel de clase, defina estas dos variables.Also at the class level, define these two variables. Las usaremos más adelante para determinar si el perfil y el punto de conexión ya existen.We'll use these later to determine if our profile and endpoint already exist.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Reemplace el método Main de la siguiente forma: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. Algunos de los otros métodos van a plantear al usuario preguntas que necesitan "Sí" o "No" como respuesta.Some of our other methods are going to prompt the user with "Yes/No" questions. Agregue el método siguiente para hacerlo algo más fácil: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);
        }
    }
    

Ahora que ya hemos escrito la estructura básica del programa, deberíamos crear los métodos a los que llama Main .Now that the basic structure of our program is written, we should create the methods called by the Main method.

AuthenticationAuthentication

Para poder usar la biblioteca de administración de Azure CDN, es necesario autenticar la entidad de servicio y obtener un token de autenticación.Before we can use the Azure CDN Management Library, we need to authenticate our service principal and obtain an authentication token. Este método usa ADAL para recuperar el token.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;
}

Si utiliza la autenticación de usuario individual, el método GetAccessToken tendrá un aspecto algo distinto.If you are using individual user authentication, the GetAccessToken method will look slightly different.

Importante

Use este ejemplo de código únicamente si opta por la autenticación de usuario individual en lugar de una entidad de servicio.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;
}

No se olvide de reemplazar <redirect URI> por el URI de redirección que especificó al registrar la aplicación en Azure AD.Be sure to replace <redirect URI> with the redirect URI you entered when you registered the application in Azure AD.

Lista de perfiles y puntos de conexión de CDNList CDN profiles and endpoints

Ahora estamos preparados para realizar operaciones de CDN.Now we're ready to perform CDN operations. Lo primero que hace el método es proporcionar una lista de todos los perfiles y puntos de conexión en el grupo de recursos y, si encuentra una coincidencia para los nombres de perfil y punto de conexión especificados en nuestras constantes, lo tiene en cuenta más adelante para no crear duplicados.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();
    }
}

Creación de perfiles y puntos de conexión de CDNCreate CDN profiles and endpoints

A continuación, vamos a crear un perfil.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);
    }
}

Una vez creado el perfil, crearemos un punto de conexión.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);
    }
}

Nota

En el ejemplo anterior se asigna al punto de conexión el origen Contoso con el nombre de host www.contoso.com.The example above assigns the endpoint an origin named Contoso with a hostname www.contoso.com. Debe cambiarlo para que señale al nombre de host de su propio origen.You should change this to point to your own origin's hostname.

Purga de un punto de conexiónPurge an endpoint

Suponiendo que se haya creado el punto de conexión, una tarea habitual que podríamos llevar a cabo en el programa es purgar el contenido del punto de conexión.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();
    }
}

Nota

En el ejemplo anterior, la cadena /* denota que queremos purgar todo el contenido en la raíz de la ruta de acceso del punto de conexión.In the example above, the string /* denotes that I want to purge everything in the root of the endpoint path. Esto equivale a activar Purgar todo en el cuadro de diálogo de purga del Portal de Azure.This is equivalent to checking Purge All in the Azure portal's "purge" dialog. En el método CreateCdnProfile hemos creado el perfil como un perfil de Azure CDN de Verizon con el código Sku = new Sku(SkuName.StandardVerizon), por lo que será correcto.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. Pero los perfiles de Azure CDN de Akamai no admiten Purgar todo (en el caso de usar un perfil de Akamai para este tutorial, tendría que incluir las rutas de acceso específicas que quiera purgar).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.

Eliminación de perfiles y puntos de conexión de CDNDelete CDN profiles and endpoints

Los últimos métodos eliminarán el punto de conexión y el perfil.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();
    }
}

Ejecución del programaRunning the program

Ahora podemos compilar y ejecutar el programa haciendo clic en el botón Iniciar de Visual Studio.We can now compile and run the program by clicking the Start button in Visual Studio.

Programa en ejecución

Cuando el programa llega al mensaje anterior, debería poder ver, de vuelta en el grupo de recursos en el Portal de Azure, que se ha creado el perfil.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.

¡Éxito!

Después, se pueden confirmar los mensajes para ejecutar el resto del programa.We can then confirm the prompts to run the rest of the program.

Finalización del programa

Pasos siguientesNext Steps

Para ver el proyecto de este tutorial terminado, descargue el ejemplo.To see the completed project from this walkthrough, download the sample.

Para ver más documentación sobre la biblioteca de administración de Azure CDN para .NET, consulte la referencia en MSDN.To find additional documentation on the Azure CDN Management Library for .NET, view the reference on MSDN.

Administre sus recursos de red CDN con PowerShell.Manage your CDN resources with PowerShell.