Aan de slag met de Azure CDN-bibliotheek voor .NET

U kunt de Azure CDN-bibliotheek voor .NET gebruiken om het maken en beheren van CDN-profielen en -eindpunten te automatiseren. In deze zelfstudie wordt uitgelegd hoe u een eenvoudige .NET-consoletoepassing maakt die verschillende van de beschikbare bewerkingen demonstreert. Deze zelfstudie is niet bedoeld om alle aspecten van de Azure CDN-bibliotheek voor .NET in detail te beschrijven.

U hebt Visual Studio 2015 nodig om deze zelfstudie te voltooien. Visual Studio Community 2015 is gratis beschikbaar voor download.

Tip

Het voltooide project uit deze zelfstudie is beschikbaar voor download op MSDN.

Vereisten

Voordat u CDN-beheercode schrijft, moet u enige voorbereiding uitvoeren om de code in te schakelen voor interactie met Azure Resource Manager. Om deze voorbereiding uit te voeren, moet u het volgende doen:

  • Een resourcegroep maken die het CDN-profiel bevat dat in deze zelfstudie is gemaakt
  • Microsoft Entra-id configureren om verificatie voor de toepassing te bieden
  • Machtigingen toepassen op de resourcegroep, zodat alleen geautoriseerde gebruikers van uw Microsoft Entra-tenant kunnen communiceren met het CDN-profiel

De resourcegroep maken

  1. Meld u aan bij Azure-portal.

  2. Klik op Een resource maken.

  3. Zoek naar resourcegroep en klik in het deelvenster Resourcegroep op Maken.

    Een nieuwe resourcegroep maken

  4. Geef uw resourcegroep de naam CdnConsoleTutorial. Selecteer uw abonnement en kies een locatie bij u in de buurt. U kunt desgewenst op het selectievakje Vastmaken aan dashboard klikken om de resourcegroep vast te maken aan het dashboard in de portal. Vastmaken maakt het gemakkelijker om later te vinden. Nadat u de selecties hebt gemaakt, klikt u op Maken.

    Schermopname van het dialoogvenster Resourcegroep.

  5. Nadat de resourcegroep is gemaakt en u deze niet aan uw dashboard hebt vastgemaakt, kunt u deze vinden door te klikken op Bladeren en vervolgens op Resourcegroepen. Klik op de resourcegroep om deze te openen. Noteer uw abonnements-id. We hebben het later nodig.

    Schermopname van de sectie C D N-consolezelfstudie.

De Microsoft Entra-toepassing maken en machtigingen toepassen

Er zijn twee benaderingen voor app-verificatie met Microsoft Entra-id: Afzonderlijke gebruikers of een service-principal. Een service-principal is vergelijkbaar met een serviceaccount in Windows. In plaats van een bepaalde gebruikersmachtiging te verlenen voor interactie met de CDN-profielen, worden in plaats daarvan machtigingen verleend aan de service-principal. Service-principals worden doorgaans gebruikt voor geautomatiseerde, niet-interactieve processen. Hoewel deze zelfstudie een interactieve console-app schrijft, richten we ons op de benadering van de service-principal.

Het maken van een service-principal bestaat uit verschillende stappen, waaronder het maken van een Microsoft Entra-toepassing. We gaan deze zelfstudie volgen om deze te maken.

Belangrijk

Zorg ervoor dat u alle stappen in de gekoppelde zelfstudie volgt. Het is belangrijk dat u het precies voltooit zoals beschreven. Noteer uw tenant-id, tenantdomeinnaam (meestal een .onmicrosoft.com-domein, tenzij u een aangepast domein hebt opgegeven), client-id en clientverificatiesleutel, omdat we deze informatie later nodig hebben. Zorg ervoor dat u uw client-id en clientverificatiesleutel bewaakt, omdat deze referenties door iedereen kunnen worden gebruikt om bewerkingen uit te voeren als de service-principal.

Wanneer u bij de stap met de naam Multitenant-toepassing configureren komt, selecteert u Nee.

Wanneer u bij de stap De toepassing toewijzen aan een rol krijgt, gebruikt u de resourcegroep die u eerder hebt gemaakt, CdnConsoleTutorial, maar wijst u in plaats van de rol Lezer de rol Inzender voor het CDN-profiel toe. Nadat u de toepassing de rol Inzender voor CDN-profielen in uw resourcegroep hebt toegewezen, gaat u terug naar deze zelfstudie.

Nadat u de service-principal hebt gemaakt en de rol Inzender voor CDN-profiel hebt toegewezen, moet de blade Gebruikers voor uw resourcegroep er ongeveer uitzien als in de volgende afbeelding.

Blade Gebruikers

Interactieve gebruikersverificatie

Als u liever interactieve afzonderlijke gebruikersverificatie hebt in plaats van een service-principal, is het proces vergelijkbaar met die voor een service-principal. In feite moet u dezelfde procedure volgen, maar enkele kleine wijzigingen aanbrengen.

Belangrijk

Volg deze volgende stappen alleen als u ervoor kiest om afzonderlijke gebruikersverificatie te gebruiken in plaats van een service-principal.

  1. Wanneer u uw toepassing maakt, kiest u in plaats van een webtoepassing systeemeigen toepassing.

    Systeemeigen toepassing

  2. Op de volgende pagina wordt u gevraagd om een omleidings-URI. De URI wordt niet gevalideerd, maar onthoud wat u hebt ingevoerd. U hebt het later nodig.

  3. U hoeft geen clientverificatiesleutel te maken.

  4. In plaats van een service-principal toe te wijzen aan de rol Inzender voor CDN-profielen, gaan we afzonderlijke gebruikers of groepen toewijzen. In dit voorbeeld ziet u dat ik cdn-demogebruiker heb toegewezen aan de rol Inzender voor CDN-profielen.

    Individuele gebruikerstoegang

Uw project maken en NuGet-pakketten toevoegen

Nu we een resourcegroep voor onze CDN-profielen hebben gemaakt en onze Microsoft Entra-toepassingsmachtigingen hebben gekregen voor het beheren van CDN-profielen en eindpunten binnen die groep, kunnen we beginnen met het maken van onze toepassing.

Belangrijk

Het Microsoft.IdentityModel.Clients.ActiveDirectory NuGet-pakket en de Azure AD Authentication Library (ADAL) zijn afgeschaft. Er zijn sinds 30 juni 2020 geen nieuwe functies toegevoegd. We raden u ten zeere aan om een upgrade uit te voeren. Zie de migratiehandleiding voor meer informatie.

Vanuit Visual Studio 2015 selecteert u Bestand, Nieuw, Project... om het nieuwe projectdialoogvenster te openen. Vouw Visual C# uit en selecteer Vervolgens Windows in het deelvenster aan de linkerkant. Selecteer Consoletoepassing in het middelste deelvenster. Geef uw project een naam en selecteer VERVOLGENS OK.

Nieuw project

Ons project gaat enkele Azure-bibliotheken gebruiken die zijn opgenomen in NuGet-pakketten. Laten we deze bibliotheken toevoegen aan het project.

  1. Selecteer het menu Extra, Nuget Pakketbeheer en Pakketbeheer Console.

    Nuget-pakketten beheren

  2. Voer in de Pakketbeheer-console de volgende opdracht uit om de ADAL (Active Directory Authentication Library) te installeren:

    Install-Package Microsoft.Identity.Client

  3. Voer het volgende uit om de Azure CDN-beheerbibliotheek te installeren:

    Install-Package Microsoft.Azure.Management.Cdn

Instructies, constanten, hoofdmethode en helpermethoden

Laten we de basisstructuur van ons programma laten schrijven.

  1. Vervang op het tabblad Program.cs de using instructies bovenaan door de volgende opdracht:

    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. We moeten enkele constanten definiëren die door onze methoden worden gebruikt. Voeg in de Program klasse, maar vóór de Main methode, de volgende codeblokken toe. Vervang indien nodig de tijdelijke aanduidingen, inclusief de <punthaken>, door uw eigen waarden.

    //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. Definieer deze twee variabelen ook op klasseniveau. We gebruiken deze variabelen later om te bepalen of ons profiel en eindpunt al bestaan.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Vervang de Main methode als volgt:

    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. Sommige van onze andere methoden vragen aan de gebruiker met 'Ja/Nee'. Voeg de volgende methode toe om dit iets eenvoudiger te maken:

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

Nu de basisstructuur van ons programma is geschreven, moeten we de methoden maken die door de Main methode worden aangeroepen.

Verificatie

Voordat we de Azure CDN-beheerbibliotheek kunnen gebruiken, moeten we onze service-principal verifiëren en een verificatietoken verkrijgen. Deze methode maakt gebruik van de Active Directory Authentication Library om het token op te halen.

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

Als u afzonderlijke gebruikersverificatie gebruikt, ziet de GetAccessToken methode er iets anders uit.

Belangrijk

Gebruik dit codevoorbeeld alleen als u ervoor kiest om afzonderlijke gebruikersverificatie te hebben in plaats van een 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;
}

Zorg ervoor dat u vervangt door <redirect URI> de omleidings-URI die u hebt ingevoerd bij het registreren van de toepassing in Microsoft Entra-id.

CDN-profielen en -eindpunten weergeven

Nu zijn we klaar om CDN-bewerkingen uit te voeren. Het eerste wat onze methode doet, is het weergeven van alle profielen en eindpunten in onze resourcegroep en als er een overeenkomst wordt gevonden voor de profiel- en eindpuntnamen die zijn opgegeven in onze constanten, wordt er een opmerking voor later gemaakt, zodat we geen duplicaten proberen te maken.

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-profielen en -eindpunten maken

Vervolgens maken we een profiel.

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

Zodra het profiel is gemaakt, maken we een eindpunt.

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

Notitie

In het bovenstaande voorbeeld wordt het eindpunt toegewezen aan een oorsprong met de naam Contoso met een hostnaam www.contoso.com. U moet dit wijzigen zodat deze verwijst naar de hostnaam van uw eigen origin.

Een eindpunt leegmaken

Ervan uitgaande dat het eindpunt is gemaakt, wordt de inhoud in ons eindpunt opgeschoond door één veelvoorkomende taak die we in ons programma kunnen uitvoeren.

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

Notitie

In het voorbeeld eerder geeft de tekenreeks /* aan dat ik alles in de hoofdmap van het eindpuntpad wil opschonen. Dit komt overeen met het controleren van Alles opschonen in het dialoogvenster 'leegmaken' van Azure Portal. In de CreateCdnProfile methode heb ik ons profiel gemaakt als een Azure CDN van Edgio-profiel met behulp van de code Sku = new Sku(SkuName.StandardVerizon), dus dit is gelukt.

CDN-profielen en -eindpunten verwijderen

De laatste methoden verwijderen ons eindpunt en profiel.

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

Het programma uitvoeren

We kunnen het programma nu compileren en uitvoeren door te klikken op de knop Start in Visual Studio.

Programma dat wordt uitgevoerd

Wanneer het programma de bovenstaande prompt bereikt, moet u terug kunnen gaan naar uw resourcegroep in Azure Portal en zien dat het profiel is gemaakt.

Gelukt!

Vervolgens kunnen we de aanwijzingen bevestigen om de rest van het programma uit te voeren.

Programma voltooien

Volgende stappen

Als u het voltooide project uit dit scenario wilt zien, downloadt u het voorbeeld.

Bekijk de verwijzing op MSDN voor meer documentatie over de Azure CDN-beheerbibliotheek voor .NET.

Beheer uw CDN-resources met PowerShell.