Prise en main de la bibliothèque Azure CDN pour .NET

Vous pouvez utiliser la bibliothèque Azure CDN pour .NET pour automatiser la création et la gestion des points de terminaison et profils CDN. Ce didacticiel présente la création d’une application console .NET simple, qui exécute plusieurs des opérations disponibles. Il n’a pas vocation à décrire en détail tous les aspects de la bibliothèque Azure CDN pour .NET.

Pour suivre ce didacticiel, vous avez besoin de Visual Studio 2015. Visual Studio Community 2015 est disponible gratuitement en téléchargement.

Conseil

Le projet achevé de ce didacticiel est disponible en téléchargement sur MSDN.

Prérequis

Avant d’écrire le code de gestion CDN, vous devez effectuer certaines tâches de préparation pour permettre à ce code d’interagir avec Azure Resource Manager. Ce travail de préparation implique les opérations suivantes :

  • Créez un groupe de ressources destiné à héberger le profil CDN créé dans ce didacticiel.
  • Configurez Microsoft Entra ID pour fournir l’authentification pour l’application
  • Octroyez des autorisations au groupe de ressources afin que seuls les utilisateurs autorisés de votre locataire Microsoft Entra puissent interagir avec le profil CDN

Création du groupe de ressources

  1. Connectez-vous au Portail Azure.

  2. Cliquez sur Créer une ressource.

  3. Recherchez Groupe de ressources, puis dans le volet Groupe de ressources, cliquez sur Créer.

    Création d’un groupe de ressources

  4. Attribuez à votre groupe de ressources le nom CdnConsoleTutorial. Sélectionnez votre abonnement et choisissez un emplacement près de chez vous. Si vous le souhaitez, vous pouvez cocher la case Épingler au tableau de bord pour épingler le groupe de ressources au tableau de bord dans le portail. Une fois épinglé, le groupe sera plus facile à repérer. Une fois vos sélections effectuées, cliquez sur Créer.

    Capture d’écran de la boîte de dialogue Groupe de ressources.

  5. Si vous n’avez pas épinglé le groupe de ressources à votre tableau de bord, cliquez sur Parcourir, puis sur Groupes de ressources pour le rechercher. Pour ouvrir le groupe de ressources, cliquez sur ce dernier. Notez votre ID d’abonnement. Nous en aurons besoin ultérieurement.

    Capture d’écran de la section Tutoriel de la console CDN.

Création de l’application Microsoft Entra et application d’autorisations

Il existe deux approches pour authentifier une application avec Microsoft Entra ID : les utilisateurs individuels ou un principal de service. Un principal de service est similaire à un compte de service dans Windows. Au lieu d’être octroyées à un utilisateur spécifique, les autorisations d’interagir avec les profils CDN sont accordées au principal de service. Les principaux de service sont généralement utilisés pour des processus automatisés non interactifs. Bien que le but de ce didacticiel soit de créer une application console interactive, nous allons nous adopter l’approche du principal de service.

La création d’un principal de service se compose de plusieurs étapes, notamment la création d’une application Microsoft Entra. Pour créer cette application, nous allons suivre ce didacticiel.

Important

Veillez à respecter toutes les étapes du didacticiel associé. Il est important que vous suiviez la procédure à la lettre. N’oubliez pas de noter votre ID de locataire, nom de domaine de locataire (généralement un domaine .onmicrosoft.com, sauf si vous avez spécifié un domaine personnalisé), ID de client et clé d’authentification, car nous aurons besoin de ces informations ultérieurement. Veillez à protéger votre ID de client et votre clé d’authentification, car toute personne peut utiliser ces informations d’identification pour exécuter des opérations en tant que principal de service.

Lorsque vous arrivez à l’étape intitulée Configurer une application mutualisée, sélectionnez Non.

Lorsque vous arrivez à l’étape Affecter l’application à un rôle, utilisez le groupe de ressources créé précédemment, CdnConsoleTutorial, mais à la place du rôle Lecteur, affectez-lui le rôle Contributeur de profil CDN. Après avoir affecté à l’application le rôle Contributeur du profil CDN dans votre groupe de ressources, revenez dans ce didacticiel.

Une fois que vous avez créé le principal de service et affecté le rôle Contributeur de profil CDN, le panneau Utilisateurs de votre groupe de ressources doit se présenter comme illustré ci-après.

Panneau Utilisateurs

Authentification interactive des utilisateurs

Si, au lieu d’un principal de service, vous préférez disposer d’une authentification des utilisateurs interactive, ce processus est comparable à celui d’un principal de service. En fait, la procédure est identique, à quelques légères différences près.

Important

Ne suivez ces étapes que si vous optez pour l’authentification des utilisateurs au lieu d’un principal de service.

  1. Lors de la création de votre application, au lieu de choisir Application web, sélectionnez Application native.

    Application native

  2. Sur la page suivante, vous êtes invité à spécifier un URI de redirection. Cette URI ne sera pas validée mais notez-la. Vous en aurez besoin ultérieurement.

  3. Il est inutile de créer une clé d’authentification de client.

  4. Au lieu d’affecter le rôle Contributeur du profil CDN à un principal de service, nous allons l’attribuer à des utilisateurs ou des groupes. Dans cet exemple, vous pouvez voir que j’ai attribué le rôle Contributeur du profil CDN à l’utilisateur CDN Demo User .

    Accès d’utilisateurs individuels

Créer votre projet et ajouter des packages NuGet

Maintenant que nous avons créé un groupe de ressources pour nos profils CDN et autorisé l’application Microsoft Entra à gérer les points de terminaison et profils CDN au sein de ce groupe, nous pouvons créer notre application.

Important

Le package NuGet Microsoft.IdentityModel.Clients.ActiveDirectory et la bibliothèque d’authentification Azure AD (ADAL) sont déconseillés. Aucune nouvelle fonctionnalité n’a été ajoutée depuis le 30 juin 2020. Nous vous encourageons vivement à effectuer la mise à niveau. Pour plus d’informations, consultez le Guide de migration.

Dans Visual Studio 2015, cliquez sur Fichier, Nouveau, Projet... pour ouvrir la boîte de dialogue Nouveau projet. Développez Visual C# , puis sélectionnez Windows dans le volet de gauche. Cliquez sur Application console dans le volet central. Nommez votre projet, puis cliquez sur OK.

Nouveau projet

Notre projet va utiliser certaines bibliothèques Azure contenues dans des packages NuGet. Ajoutez les bibliothèques suivantes au projet.

  1. Dans le menu Outils, sélectionnez Gestionnaire de package NuGet, puis Console du Gestionnaire de package.

    Gérer les packages NuGet

  2. Dans la Console du Gestionnaire de package, exécutez la commande suivante pour installer la bibliothèque ADAL (Active Directory Authentication Library) :

    Install-Package Microsoft.Identity.Client

  3. Exécutez la commande suivante pour installer la bibliothèque Azure CDN Management Library:

    Install-Package Microsoft.Azure.Management.Cdn

Directives, constantes, méthode principale et méthodes d’assistance

Rédigeons la structure de base de notre programme.

  1. Dans l’onglet Program.cs, remplacez les directives using au début par les commandes suivantes :

    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. Nous devons définir certaines constantes que nos méthodes utilisent. Dans la classe Program mais avant la méthode Main, ajoutez les blocs de code suivants. Veillez à remplacer les espaces réservés, notamment les <éléments entre chevrons> , par vos propres valeurs, si nécessaire.

    //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. De plus, au niveau de la classe, vous devez définir ces deux variables. Nous utilisons ces variables ultérieurement pour déterminer si notre profil et notre point de terminaison existent déjà.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Remplacez la méthode Main comme suit :

    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. Certaines de nos autres méthodes posent à l’utilisateur des questions fermées (de type Oui/non). Ajoutez la méthode suivante pour faciliter l’opération :

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

Maintenant que la structure de base de notre programme est écrite, nous devons créer les méthodes appelées par la méthode Main .

Authentification

Pour pouvoir utiliser la bibliothèque Azure CDN Management Library, nous devons authentifier notre principal de service et obtenir un jeton d’authentification. Cette méthode utilise la Bibliothèque d’authentification Active Directory pour récupérer le jeton.

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 vous utilisez l’authentification d’utilisateurs individuels, la méthode GetAccessToken se présente légèrement différemment.

Important

N’utilisez ce code que si vous privilégiez l’authentification d’utilisateurs individuels au principal du service.

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

Veillez à remplacer <redirect URI> par l’URI de redirection que vous avez saisie lors de l’inscription de l’application dans Microsoft Entra ID.

Répertorier les profils CDN et points de terminaison

Nous sommes maintenant prêts à effectuer des opérations CDN. La première action de notre méthode est de répertorier tous les profils et points de terminaison dans notre groupe de ressources. Si elle trouve une correspondance avec les noms de profil et de point de terminaison spécifiés dans nos constantes, elle la mémorise pour éviter de créer des doublons.

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

Créer des profils CDN et des points de terminaison

Maintenant, nous créons un profil.

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

Après le profil, nous créons un point de terminaison.

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

Notes

L’exemple ci-dessus attribue au point de terminaison une origine nommée Contoso avec un nom d’hôte www.contoso.com. Vous devez remplacer celui-ci par le nom d’hôte de votre propre origine.

Vider un point de terminaison

En supposant que le point de terminaison a été créé, une tâche courante que nous pouvons effectuer dans notre programme consiste à vider le contenu de notre point de terminaison.

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

Notes

Dans l’exemple ci-dessus, la chaîne /* indique que je souhaite vider tous les éléments à la racine du chemin d’accès du point de terminaison. Cela revient à cocher la case Purge All (Purger tout) dans la boîte de dialogue de vidage du portail Azure. Dans la méthode CreateCdnProfile, j’ai créé notre profil comme un profil Azure CDN d’Edgio à l’aide du code Sku = new Sku(SkuName.StandardVerizon), pour que l’opération aboutisse.

Supprimer des profils CDN et des points de terminaison

Les dernières méthodes supprimeront notre point de terminaison et notre profil.

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

Exécution du programme

Nous pouvons maintenant compiler et exécuter le programme en cliquant sur le bouton Démarrer dans Visual Studio.

Exécution du programme

Lorsque le programme atteint l’invite ci-dessus, vous pouvez revenir à votre groupe de ressources dans le portail Azure et vérifier que le profil a été créé.

Opération réussie.

Nous pouvons alors confirmer les invites pour exécuter le reste du programme.

Fin du programme

Étapes suivantes

Pour voir le projet achevé obtenu à partir de cette procédure pas à pas, téléchargez l’exemple.

Pour trouver de la documentation supplémentaire sur la bibliothèque Azure CDN Management Library pour .NET, consultez la référence sur MSDN.

Gérez vos ressources CDN avec PowerShell.