Prise en main de la bibliothèque Azure CDN pour .NET
Important
Azure CDN Standard de Microsoft (classique) sera mis hors service le 30 septembre 2027. Pour éviter toute interruption de service, il est important de migrer vos profils du niveau Azure CDN Standard de Microsoft (classique) vers le niveau Azure Front Door Standard ou Premium au plus tard le 30 septembre 2027. Pour plus d’informations, consultez Mise hors service d’Azure CDN Standard de Microsoft (classique).
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
Connectez-vous au Portail Azure.
Cliquez sur Créer une ressource.
Recherchez Groupe de ressources, puis dans le volet Groupe de ressources, cliquez sur Créer.
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.
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.
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.
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.
Lors de la création de votre application, au lieu de choisir Application web, sélectionnez Application native.
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.
Il est inutile de créer une clé d’authentification de client.
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 .
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.
Notre projet va utiliser certaines bibliothèques Azure contenues dans des packages NuGet. Ajoutez les bibliothèques suivantes au projet.
Dans le menu Outils, sélectionnez Gestionnaire de package NuGet, puis Console du Gestionnaire de package.
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
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.
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;
Nous devons définir certaines constantes que nos méthodes utilisent. Dans la classe
Program
mais avant la méthodeMain
, 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>";
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;
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(); }
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.
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éé.
Nous pouvons alors confirmer les invites pour exécuter le reste 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.