Kom igång med Azure CDN-biblioteket för .NET

Du kan använda Azure CDN-biblioteket för .NET för att automatisera skapande och hantering av CDN-profiler och slutpunkter. I den här självstudien går vi igenom skapandet av ett enkelt .NET-konsolprogram som visar flera av de tillgängliga åtgärderna. Den här självstudien är inte avsedd att beskriva alla aspekter av Azure CDN-biblioteket för .NET i detalj.

Du behöver Visual Studio 2015 för att slutföra den här självstudien. Visual Studio Community 2015 är kostnadsfritt tillgängligt för nedladdning.

Dricks

Det slutförda projektet från den här självstudien är tillgängligt för nedladdning på MSDN.

Förutsättningar

Innan du skriver CDN-hanteringskoden måste du förbereda dig för att koden ska kunna interagera med Azure Resource Manager. För att göra den här förberedelsen måste du:

  • Skapa en resursgrupp som ska innehålla CDN-profilen som skapades i den här självstudien
  • Konfigurera Microsoft Entra-ID för att tillhandahålla autentisering för programmet
  • Tillämpa behörigheter på resursgruppen så att endast behöriga användare från din Microsoft Entra-klientorganisation kan interagera med CDN-profilen

Skapa resursgruppen

  1. Logga in på Azure Portal.

  2. Klicka på Skapa en resurs.

  3. Sök efter resursgrupp och klicka på Skapa i fönstret Resursgrupp.

    Skapa en ny resursgrupp

  4. Ge resursgruppen namnet CdnConsoleTutorial. Välj din prenumeration och välj en plats nära dig. Om du vill kan du klicka på kryssrutan Fäst på instrumentpanelen för att fästa resursgruppen på instrumentpanelen i portalen. Att fästa gör det lättare att hitta senare. När du har gjort dina val klickar du på Skapa.

    Skärmbild av dialogrutan Resursgrupp.

  5. När resursgruppen har skapats kan du hitta den om du inte fäster den på instrumentpanelen genom att klicka på Bläddra och sedan på Resursgrupper. Öppna den genom att klicka på resursgruppen. Anteckna ditt prenumerations-ID. Vi behöver det senare.

    Skärmbild av avsnittet Självstudie om C D N-konsolen.

Skapa Microsoft Entra-programmet och tillämpa behörigheter

Det finns två metoder för appautentisering med Microsoft Entra-ID: Enskilda användare eller tjänstens huvudnamn. Tjänstens huvudnamn liknar ett tjänstkonto i Windows. I stället för att ge en viss användare behörighet att interagera med CDN-profilerna beviljas behörigheter i stället till tjänstens huvudnamn. Tjänstens huvudnamn används vanligtvis för automatiserade, icke-interaktiva processer. Även om den här självstudien skriver en interaktiv konsolapp fokuserar vi på metoden för tjänstens huvudnamn.

Att skapa ett huvudnamn för tjänsten består av flera steg, bland annat att skapa ett Microsoft Entra-program. För att skapa den följer vi den här självstudien.

Viktigt!

Följ alla steg i den länkade självstudien. Det är viktigt att du slutför det exakt enligt beskrivningen. Observera ditt klient-ID, klientdomännamn (vanligtvis en .onmicrosoft.com-domän om du inte har angett en anpassad domän), klient-ID och klientautentiseringsnyckel, eftersom vi behöver den här informationen senare. Var noga med att skydda klient-ID:t och klientautentiseringsnyckeln, eftersom dessa autentiseringsuppgifter kan användas av vem som helst för att köra åtgärder som tjänstens huvudnamn.

När du kommer till steget Konfigurera program för flera klientorganisationer väljer du Nej.

När du kommer till steget Tilldela programmet till en roll använder du resursgruppen som skapades tidigare, CdnConsoleTutorial, men i stället för rollen Läsare tilldelar du rollen CDN-profildeltagare . När du har tilldelat programmet rollen CDN-profildeltagare i resursgruppen går du tillbaka till den här självstudien.

När du har skapat tjänstens huvudnamn och tilldelat rollen CDN-profildeltagarebör bladet Användare för resursgruppen se ut ungefär så här.

Bladet Användare

Interaktiv användarautentisering

Om du i stället för tjänstens huvudnamn hellre vill ha interaktiv individuell användarautentisering liknar processen den för ett huvudnamn för tjänsten. I själva verket måste du följa samma procedur, men göra några mindre ändringar.

Viktigt!

Följ bara dessa nästa steg om du väljer att använda individuell användarautentisering i stället för ett huvudnamn för tjänsten.

  1. När du skapar ditt program väljer du Internt program i stället för Webbprogram.

    Internt program

  2. På nästa sida uppmanas du att ange en omdirigerings-URI. URI:n verifieras inte, men kom ihåg vad du angav. Du behöver det senare.

  3. Du behöver inte skapa en klientautentiseringsnyckel.

  4. I stället för att tilldela tjänstens huvudnamn rollen CDN-profildeltagare tilldelar vi enskilda användare eller grupper. I det här exemplet kan du se att jag har tilldelat CDN Demo User till rollen CDN-profildeltagare .

    Åtkomst för enskilda användare

Skapa projektet och lägg till NuGet-paket

Nu när vi har skapat en resursgrupp för våra CDN-profiler och gett vårt Microsoft Entra-program behörighet att hantera CDN-profiler och slutpunkter i gruppen kan vi börja skapa vårt program.

Viktigt!

NuGet-paketet Microsoft.IdentityModel.Clients.ActiveDirectory och Azure AD Authentication Library (ADAL) har blivit inaktuella. Inga nya funktioner har lagts till sedan den 30 juni 2020. Vi rekommenderar starkt att du uppgraderar. Mer information finns i migreringsguiden.

Från Visual Studio 2015 väljer du Arkiv, Nytt, Projekt... för att öppna den nya projektdialogrutan. Expandera Visual C# och välj sedan Windows i fönstret till vänster. Välj Konsolprogram i mittenfönstret. Ge projektet ett namn och välj sedan OK.

Nytt projekt

Vårt projekt kommer att använda några Azure-bibliotek som finns i NuGet-paket. Nu ska vi lägga till biblioteken i projektet.

  1. Välj menyn Verktyg, Nuget Package Manager och sedan Package Manager Console.

    Hantera Nuget-paket

  2. I Package Manager-konsolen kör du följande kommando för att installera Active Directory Authentication Library (ADAL):

    Install-Package Microsoft.Identity.Client

  3. Kör följande för att installera Azure CDN Management Library:

    Install-Package Microsoft.Azure.Management.Cdn

Direktiv, konstanter, huvudmetod och hjälpmetoder

Nu ska vi få den grundläggande strukturen i vårt program skriven.

  1. På fliken Program.cs ersätter du direktiven using längst upp med följande kommando:

    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. Vi måste definiera några konstanter som våra metoder använder. Program I klassen, men före Main metoden, lägger du till följande kodblock. Se till att ersätta platshållarna, inklusive <vinkelparenteserna>, med dina egna värden efter behov.

    //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. Definiera även dessa två variabler på klassnivå. Vi använder dessa variabler senare för att avgöra om vår profil och slutpunkt redan finns.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Ersätt metoden på Main följande sätt:

    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. Några av våra andra metoder kommer att fråga användaren om "Ja/Nej"-frågor. Lägg till följande metod för att göra det lite enklare:

    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 när den grundläggande strukturen för vårt program är skriven bör vi skapa de metoder som anropas av Main metoden.

Autentisering

Innan vi kan använda Azure CDN-hanteringsbiblioteket måste vi autentisera tjänstens huvudnamn och hämta en autentiseringstoken. Den här metoden använder Active Directory Authentication Library för att hämta 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;
}

Om du använder individuell användarautentisering GetAccessToken ser metoden något annorlunda ut.

Viktigt!

Använd endast det här kodexemplet om du väljer att ha individuell användarautentisering i stället för ett huvudnamn för tjänsten.

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

Ersätt <redirect URI> med den omdirigerings-URI som du angav när du registrerade programmet i Microsoft Entra-ID.

Lista CDN-profiler och slutpunkter

Nu är vi redo att utföra CDN-åtgärder. Det första vår metod gör är att lista alla profiler och slutpunkter i vår resursgrupp, och om den hittar en matchning för profil- och slutpunktsnamnen som anges i våra konstanter, antecknar vi senare så att vi inte försöker skapa dubbletter.

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

Skapa CDN-profiler och slutpunkter

Sedan skapar vi en 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);
    }
}

När profilen har skapats skapar vi en slutpunkt.

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

Kommentar

Exemplet ovan tilldelar slutpunkten ett ursprung med namnet Contoso med värdnamnet www.contoso.com. Du bör ändra detta så att det pekar på ditt eget ursprungs värdnamn.

Rensa en slutpunkt

Förutsatt att slutpunkten har skapats rensar en vanlig uppgift som vi kanske vill utföra i vårt program innehållet i slutpunkten.

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

Kommentar

I exemplet tidigare anger strängen /* att jag vill rensa allt i roten på slutpunktssökvägen. Detta motsvarar kontrollen Rensa alla i azure-portalens "rensningsdialogruta". CreateCdnProfile I metoden skapade jag vår profil som en Azure CDN från Edgio-profilen med hjälp av koden Sku = new Sku(SkuName.StandardVerizon), så detta kommer att lyckas.

Ta bort CDN-profiler och slutpunkter

De sista metoderna tar bort vår slutpunkt och 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();
    }
}

Köra programmet

Nu kan vi kompilera och köra programmet genom att klicka på startknappen i Visual Studio.

Program som körs

När programmet når ovanstående uppmaning bör du kunna återgå till resursgruppen i Azure-portalen och se att profilen har skapats.

Lyckades!

Sedan kan vi bekräfta uppmaningarna att köra resten av programmet.

Slutförande av program

Nästa steg

Om du vill se det slutförda projektet från den här genomgången laddar du ned exemplet.

Mer dokumentation om Azure CDN Management Library för .NET finns i referensen på MSDN.

Hantera dina CDN-resurser med PowerShell.