Introducción a la biblioteca de Azure CDN para .NET

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. Este tutorial describe la creación de una aplicación de consola .NET sencilla que muestra algunas de las operaciones disponibles. Con este tutorial no se pretende describir todos los aspectos de la biblioteca de Azure CDN para .NET en detalle.

Necesita Visual Studio 2015 para completar este tutorial. Visual Studio Community 2015 está disponible gratis para descargarse.

Sugerencia

El proyecto completado en este tutorial está disponible para descargarse en MSDN.

Requisitos previos

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. Para hacer esta preparación, deberá:

  • Crear un grupo de recursos que contenga el perfil de CDN creado en este tutorial.
  • Configuración de Microsoft Entra ID para proporcionar autenticación para la aplicación
  • Aplicar permisos al grupo de recursos para que solo los usuarios autorizados del inquilino de Microsoft Entra puedan interactuar con el perfil de CDN

Creación del grupo de recursos

  1. Inicie sesión en Azure Portal.

  2. Haga clic en Crear un recurso.

  3. Busque Grupo de recursos y, en el panel Grupo de recursos, haga clic en Crear.

    Crear un grupo de recursos

  4. Llame al grupo de recursos CdnConsoleTutorial. Seleccione la suscripción y elija una ubicación cercana. Si lo desea, puede hacer clic en la casilla Anclar al panel para anclar el grupo de recursos al panel en el portal. El anclaje hará que sea más fácil encontrarlo luego. Cuando termine las selecciones, haga clic en Crear.

    Captura de pantalla del cuadro de diálogo 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. Para abrirlo, haga clic en el grupo de recursos. Tome nota del valor en Id. de suscripción. Lo necesitará más adelante.

    Captura de pantalla de la sección del tutorial de la consola de CDN.

Creación de la aplicación de Microsoft Entra y aplicación de los permisos

Existen dos enfoques para la autenticación de la aplicación con Microsoft Entra ID: usuarios individuales o una entidad de servicio. Una entidad de servicio se parece a una cuenta de servicio en 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. Las entidades de servicio se suelen utilizar para procesos automatizados no interactivos. Aunque en este tutorial escribimos una aplicación de consola interactiva, nos centraremos en el enfoque de entidad de servicio.

Para crear una entidad de servicio, se siguen varios pasos, incluida la creación de una aplicación de Microsoft Entra. Para crearlo, complete este tutorial.

Importante

Asegúrese de seguir los pasos descritos en el tutorial vinculado. Es importante que lo complete exactamente como se describe. 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. 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.

Cuando llegue al paso denominado Configuración de aplicación multiinquilino, seleccione 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. 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.

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.

Hoja Usuarios

Autenticación interactiva de usuarios

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. De hecho, debe seguir el mismo procedimiento, con algunos cambios menores.

Importante

Siga estos pasos únicamente si opta por usar la autenticación de usuario individual en lugar de una entidad de servicio.

  1. Al crear la aplicación, en lugar de Aplicación web, elija Aplicación nativa.

    Aplicación nativa

  2. En la página siguiente, se le pedirá un URI de redirección. No se validará el URI, pero debe recordarlo. Lo necesitará más adelante.

  3. No hay necesidad de crear una clave de autenticación de cliente.

  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. En este ejemplo, puede ver que hemos asignado Usuario de demostración de CDN al rol CDN Profile Contributor (Colaborador de perfil de CDN).

    Acceso de usuario individual

Creación del proyecto e incorporación de paquetes NuGet

Ahora que hemos creado un grupo de recursos para los perfiles de CDN y concedido permiso a la aplicación de Microsoft Entra para administrar perfiles y puntos de conexión de CDN dentro de ese grupo, podemos comenzar a crear la aplicación.

Importante

El paquete Microsoft.IdentityModel.Clients.ActiveDirectory NuGet y la Biblioteca de autenticación (ADAL) de Azure AD han quedado obsoletos. No se han agregado nuevas características desde el 30 de junio de 2020. Le recomendamos encarecidamente que haga una actualización. Para más información, consulte la guía de migración.

En Visual Studio 2015, seleccione Archivo, Nuevo, Proyecto… para abrir el diálogo Nuevo proyecto. Expanda Visual C# y seleccione Windows en el panel de la izquierda. Seleccione Aplicación de consola en el panel central. Asigne un nombre al proyecto y seleccione Aceptar.

Nuevo proyecto

El proyecto va a usar algunas bibliotecas de Azure contenidas en paquetes NuGet. Vamos a agregarlas al proyecto.

  1. Seleccione el menú Herramientas, Administrador de paquetes NuGet y, después, Consola del Administrador de paquetes.

    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) :

    Install-Package Microsoft.Identity.Client

  3. Ejecute lo siguiente para instalar la biblioteca de administración de Azure CDN:

    Install-Package Microsoft.Azure.Management.Cdn

Directivas, constantes, método Main y métodos auxiliares

Escribamos la estructura básica del programa.

  1. En la pestaña Program.cs, reemplace las directivas using del principio por el comando siguiente:

    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. Debemos definir algunas constantes que usan los métodos. En la clase Program, pero antes del método Main, agregue los bloques de código siguientes. Asegúrese de reemplazar los marcadores de posición (incluidos los <corchetes angulares> ) con sus propios valores según sea necesario.

    //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. Usamos estas variables más adelante para determinar si el perfil y el punto de conexión ya existen.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Reemplace el método Main de la siguiente forma:

    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. Agregue el método siguiente para hacerlo algo más fácil:

    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 .

Authentication

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. Este método usa la Biblioteca de autenticación de Active Directory para recuperar el 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 tiene un aspecto algo distinto.

Importante

Use este ejemplo de código únicamente si opta por la autenticación de usuario individual en lugar de una entidad de servicio.

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

Asegúrese de reemplazar <redirect URI> por el URI de redireccionamiento que especificó al registrar la aplicación en Microsoft Entra ID.

Lista de perfiles y puntos de conexión de CDN

Ahora estamos preparados para realizar operaciones de CDN. 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.

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 CDN

A continuación, vamos a crear un perfil.

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, creamos un punto de conexión.

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. Debe cambiarlo para que señale al nombre de host de su propio origen.

Purga de un punto de conexión

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.

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

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. Esto equivale a activar Purgar todo en el cuadro de diálogo de purga del Portal de Azure. En el método CreateCdnProfile, he creado nuestro perfil como un perfil de Azure CDN de Edgio usando el código Sku = new Sku(SkuName.StandardVerizon), por lo que esto se realizará correctamente.

Eliminación de perfiles y puntos de conexión de CDN

Los últimos métodos eliminan el punto de conexión y el perfil.

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 programa

Ahora podemos compilar y ejecutar el programa haciendo clic en el botón Iniciar de 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.

¡Correcto!

Después, se pueden confirmar los mensajes para ejecutar el resto del programa.

Finalización del programa

Pasos siguientes

Para ver el proyecto de este tutorial terminado, descargue el ejemplo.

Para ver más documentación sobre la biblioteca de administración de Azure CDN para .NET, consulte la referencia en MSDN.

Administre sus recursos de red CDN con PowerShell.