Introduzione alla libreria Rete CDN di Azure per .NET

È possibile usare la libreria CDN di Azure per .NET per automatizzare la creazione e la gestione di profili ed endpoint di una rete CDN. Questa esercitazione illustra in dettaglio la creazione di una semplice applicazione console .NET che dimostra varie operazioni disponibili. Questa esercitazione non è progettata per descrivere in dettaglio tutti gli aspetti della libreria Rete CDN di Azure per .NET.

Per completare questa esercitazione, è necessario Visual Studio 2015. Visual Studio Community 2015 è disponibile gratuitamente per il download.

Suggerimento

Il progetto completato di questa esercitazione è disponibile per il download in MSDN.

Prerequisiti

Prima di scrivere codice per la gestione di una rete CDN, è necessario eseguire alcune operazioni preliminari per consentire al codice di interagire con Azure Resource Manager. A tale scopo è necessario:

  • Creare un gruppo di risorse in cui includere il profilo di rete CDN creato in questa esercitazione
  • Configurare l'ID Microsoft Entra per fornire l'autenticazione per l'applicazione
  • Applicare le autorizzazioni al gruppo di risorse in modo che solo gli utenti autorizzati del tenant di Microsoft Entra possano interagire con il profilo di rete CDN

Creazione del gruppo di risorse

  1. Accedere al portale di Azure.

  2. Fare clic su Crea una risorsa.

  3. Cercare Gruppo di risorse e quindi nel riquadro Gruppo di risorse fare clic su Crea.

    Creazione di un nuovo gruppo di risorse

  4. Assegnare al gruppo di risorse il nome CdnConsoleTutorial. Selezionare la sottoscrizione e scegliere un percorso locale. Se si vuole, è possibile selezionare la casella di controllo Aggiungi al dashboard per aggiungere il gruppo di risorse al dashboard nel portale. In questo modo sarà più facile trovarlo in un secondo momento. Dopo avere eseguito le selezioni, fare clic su Crea.

    Screenshot della finestra di dialogo Gruppo di risorse.

  5. Se dopo la creazione il gruppo di risorse non viene aggiunto al dashboard, è possibile trovarlo facendo clic su Esplora e quindi su Gruppi di risorse. Fare clic sul gruppo di risorse per aprirlo. Annotare l' ID sottoscrizione. Sarà necessario in un secondo momento.

    Screenshot della sezione Esercitazione sulla console C D N.

Creazione dell'applicazione Microsoft Entra e applicazione delle autorizzazioni

Esistono due approcci all'autenticazione delle app con Microsoft Entra ID: singoli utenti o un'entità servizio. Un'entità servizio è simile a un account di servizio di Windows. Anziché concedere a un determinato utente le autorizzazioni per interagire con i profili di rete CDN, si concedono le autorizzazioni all'entità servizio. Le entità servizio vengono in genere usate per processi automatizzati non interattivi. Sebbene in questa esercitazione si scriva un'applicazione console interattiva, ci si concentrerà sull'approccio dell'entità servizio.

La creazione di un'entità servizio è costituita da diversi passaggi, tra cui la creazione di un'applicazione Microsoft Entra. Per crearla, si eseguirà questa esercitazione.

Importante

Assicurarsi di completare tutti i passaggi dell' esercitazione collegata. È importante completarla esattamente come descritto. Assicurarsi di annotare l'ID tenant, il nome di dominio del tenant (in genere un dominio .onmicrosoft.com, se non è stato specificato un dominio personalizzato), l'ID client e la chiave di autenticazione client, perché queste informazioni saranno necessarie più avanti. Proteggere con attenzione l'ID client e la chiave di autenticazione client, perché queste credenziali possono essere usate da chiunque per eseguire operazioni come entità servizio.

Quando si arriva al passaggio denominato Configurare l'applicazione multi-tenant, selezionare No.

Quando si arriva al passaggio Assegnare l'applicazione a un ruolo, usare il gruppo di risorse creato in precedenza, CdnConsoleTutorial, assegnando però il ruolo Collaboratore profilo rete CDN anziché il ruolo Lettore. Dopo aver assegnato all'applicazione il ruolo di collaboratore profilo di rete CDN nel gruppo di risorse, tornare a questa esercitazione.

Dopo la creazione dell'entità servizio e l'assegnazione del ruolo Collaboratore profilo rete CDN, il pannello Utenti per il gruppo di risorse dovrebbe avere un aspetto simile all'immagine seguente.

Pannello Utenti

Autenticazione utente interattiva

Se invece di un'entità servizio si preferisce usare l'autenticazione interattiva di un singolo utente, il processo è simile a quello per un'entità servizio. È infatti necessario seguire la stessa procedura, a parte alcune modifiche secondarie.

Importante

Seguire questa procedura solo se si sceglie di utilizzare l'autenticazione interattiva del singolo utente anziché un'entità servizio.

  1. Quando si crea l'applicazione, invece di Applicazione Web scegliere Applicazione nativa.

    Applicazione nativa

  2. Nella pagina successiva viene richiesto un URI di reindirizzamento. L'URI non verrà convalidato, ma è necessario ricordare i valori immessi. Sarà necessario in un secondo momento.

  3. Non è necessario creare una chiave di autenticazione client.

  4. Invece di assegnare un'entità servizio al ruolo di collaboratore profilo di rete CDN , verranno assegnati singoli utenti o gruppi. In questo esempio si può notare che è stato assegnato l'utente CDN Demo User al ruolo CDN Profile Contributor.

    Accesso del singolo utente

Creare il progetto e aggiungere pacchetti NuGet

Dopo aver creato un gruppo di risorse per i profili di rete CDN e aver concesso all'applicazione Microsoft Entra l'autorizzazione per gestire i profili e gli endpoint rete CDN all'interno di tale gruppo, è possibile iniziare a creare l'applicazione.

Importante

Il pacchetto NuGet Microsoft.IdentityModel.Clients.ActiveDirectory e la libreria Autenticazione di Azure AD (ADAL) sono stati deprecati. Dal 30 giugno 2020 non sono state aggiunte nuove funzionalità. È consigliabile eseguire l'aggiornamento. Per altre informazioni, vedere la guida alla migrazione.

In Visual Studio 2015 selezionare File, Nuovo, Progetto per aprire la finestra di dialogo nuovo progetto. Espandere Visual C# e selezionare Windows nel riquadro a sinistra. Selezionare Applicazione console nel riquadro centrale. Assegnare un nome al progetto e quindi selezionare OK.

Nuovo progetto

Il progetto userà alcune librerie di Azure contenute nei pacchetti NuGet. Aggiungere queste librerie al progetto.

  1. Selezionare il menu Strumenti, Nuget Gestione pacchetti e quindi Gestione pacchetti Console.

    Gestisci pacchetti NuGet

  2. Nella Console di Gestione pacchetti eseguire il comando seguente per installare Active Directory Authentication Library (ADAL):

    Install-Package Microsoft.Identity.Client

  3. Eseguire il codice seguente per installare Azure CDN Management Library:

    Install-Package Microsoft.Azure.Management.Cdn

Direttive, costanti, metodo main e metodi helper

Ora si scriverà la struttura di base del programma.

  1. Nella scheda Program.cs sostituire le using direttive nella parte superiore con il comando seguente:

    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. È necessario definire alcune costanti usate dai metodi. Program Nella classe , ma prima del Main metodo , aggiungere i blocchi di codice seguenti. Sostituire i segnaposto, incluse le <parentesi acute>, con i valori necessari.

    //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. Sempre a livello della classe, definire queste due variabili. Queste variabili vengono usate in un secondo momento per determinare se il profilo e l'endpoint esistono già.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Sostituire il metodo Main come illustrato di seguito:

    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. Altri metodi che si useranno presenteranno all'utente domande "Sì/No". Aggiungere il metodo seguente per facilitare l'operazione:

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

Ora che la struttura di base del programma è stata scritta, è necessario creare i metodi chiamati dal metodo Main .

Autenticazione

Per poter usare Azure CDN Management Library, è necessario autenticare l'entità servizio e ottenere un token di autenticazione. Questo metodo usa Active Directory Authentication Library per recuperare il 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;
}

Se si usa l'autenticazione utente individuale, il GetAccessToken metodo ha un aspetto leggermente diverso.

Importante

Usare questo esempio di codice solo se si sceglie l'autenticazione interattiva del singolo utente anziché un'entità servizio.

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

Assicurarsi di sostituire <redirect URI> con l'URI di reindirizzamento immesso quando è stata registrata l'applicazione in Microsoft Entra ID.

Elencare profili ed endpoint di Rete CDN

Ora tutto è pronto per eseguire le operazioni della rete CDN. La prima cosa che il metodo esegue è elencare tutti i profili e gli endpoint nel gruppo di risorse e, se trova una corrispondenza per i nomi di profilo e endpoint specificati nelle costanti, prende nota per un secondo momento in modo da non provare a creare duplicati.

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

Creare profili ed endpoint di Rete CDN

Successivamente, creeremo un profilo.

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 volta completato il profilo, verrà creato un endpoint.

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

L'esempio precedente assegna all'endpoint un'origine denominata Contoso con il nome host www.contoso.com. È necessario modificarlo in modo che punti al nome host dell'origine personalizzata.

Ripulire un endpoint

Supponendo che l'endpoint sia stato creato, un'attività comune che potrebbe essere necessario eseguire nel programma è ripulire il contenuto dell'endpoint.

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

Nell'esempio precedente la stringa /* indica che si desidera eliminare tutti gli elementi nella radice del percorso dell'endpoint. Ciò equivale a selezionare Elimina tutti nella finestra di dialogo "Elimina" del portale di Azure. Nel metodo ho creato il CreateCdnProfile profilo come Rete CDN di Azure dal profilo Edgio usando il codice Sku = new Sku(SkuName.StandardVerizon), quindi questo avrà esito positivo.

Eliminare profili ed endpoint della rete CDN

Gli ultimi metodi eliminano l'endpoint e il profilo.

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

Esecuzione del programma

È ora possibile compilare ed eseguire il programma facendo clic sul pulsante Avvia in Visual Studio.

Il programma in esecuzione

Quando il programma raggiunge la richiesta precedente, sarà possibile ritornare al gruppo di risorse nel portale di Azure e verificare che il profilo sia stato creato.

Operazione riuscita.

È quindi possibile confermare le richieste per eseguire il resto del programma.

Il completamento del programma

Passaggi successivi

Per vedere il progetto completato di questa procedura dettagliata, scaricare l'esempio.

Per altre informazioni sulla Rete CDN di Azure Management Library per .NET, vedere le informazioni di riferimento su MSDN.

Gestire le risorse della rete CDN con PowerShell.