Introduzione allo sviluppo della rete CDN di AzureGet started with Azure CDN development

È possibile usare la libreria CDN di Azure per .NET per automatizzare la creazione e la gestione di profili ed endpoint di una rete CDN.You can use the Azure CDN Library for .NET to automate creation and management of CDN profiles and endpoints. Questa esercitazione illustra in dettaglio la creazione di una semplice applicazione console .NET che dimostra varie operazioni disponibili.This tutorial walks through the creation of a simple .NET console application that demonstrates several of the available operations. Lo scopo di questa esercitazione non è descrivere dettagliatamente tutti gli aspetti della libreria CDN di Azure per .NET.This tutorial is not intended to describe all aspects of the Azure CDN Library for .NET in detail.

Per completare questa esercitazione, è necessario Visual Studio 2015.You need Visual Studio 2015 to complete this tutorial. Visual Studio Community 2015 è disponibile gratuitamente per il download.Visual Studio Community 2015 is freely available for download.

Suggerimento

Il progetto completato di questa esercitazione è disponibile per il download in MSDN.The completed project from this tutorial is available for download on MSDN.

PrerequisitiPrerequisites

Prima di poter scrivere il codice di gestione della rete CDN, è necessario eseguire alcune operazioni preliminari per consentire al codice di interagire con Azure Resource Manager.Before we can write CDN management code, we need to do some preparation to enable our code to interact with the Azure Resource Manager. A tale scopo è necessario:To do this, you'll need to:

  • Creare un gruppo di risorse per includere il profilo di rete CDN che verrà creato in questa esercitazione.Create a resource group to contain the CDN profile we create in this tutorial
  • Configurare Azure Active Directory per fornire l'autenticazione per l'applicazione.Configure Azure Active Directory to provide authentication for our application
  • Applicare le autorizzazioni al gruppo di risorse in modo che solo gli utenti autorizzati dal tenant di Azure AD possano interagire con il profilo di rete CDNApply permissions to the resource group so that only authorized users from our Azure AD tenant can interact with our CDN profile

Creazione del gruppo di risorseCreating the resource group

  1. Accedere al portale di Azure.Log into the Azure Portal.
  2. Fare clic sul pulsante Nuovo in alto a sinistra e poi su Gestione e Gruppo di risorse.Click the New button in the upper left, and then Management, and Resource Group.

    Creazione di un nuovo gruppo di risorse

  3. Assegnare al gruppo di risorse il nome CdnConsoleTutorial.Call your resource group CdnConsoleTutorial. Selezionare la sottoscrizione e scegliere un percorso locale.Select your subscription and choose a location near you. Se si desidera, è possibile selezionare la casella di controllo Aggiungi al dashboard per aggiungere il gruppo di risorse al dashboard del portale.If you wish, you may click the Pin to dashboard checkbox to pin the resource group to the dashboard in the portal. In questo modo sarà più semplice trovarlo in un secondo momento.This will make it easier to find later. Dopo avere eseguito le selezioni, fare clic su Crea.After you've made your selections, click Create.

    Assegnazione di un nome al gruppo di risorse

  4. 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.After the resource group is created, if you didn't pin it to your dashboard, you can find it by clicking Browse, then Resource Groups. Fare clic sul gruppo di risorse per aprirlo.Click the resource group to open it. Annotare l' ID sottoscrizione.Make a note of your Subscription ID. Sarà necessario più avanti.We'll need it later.

    Assegnazione di un nome al gruppo di risorse

Creazione dell'applicazione Azure AD e applicazione delle autorizzazioniCreating the Azure AD application and applying permissions

Per l'autenticazione delle app con Azure Active Directory sono possibili due approcci: singoli utenti o un'entità servizio.There are two approaches to app authentication with Azure Active Directory: Individual users or a service principal. Un'entità servizio è simile a un account di servizio di Windows.A service principal is similar to a service account in Windows. Anziché concedere a un determinato utente le autorizzazioni per interagire con i profili di rete CDN, si concedono le autorizzazioni per l'entità servizio.Instead of granting a particular user permissions to interact with the CDN profiles, we instead grant the permissions to the service principal. Le entità servizio in genere vengono usate per i processi automatizzati e non interattivi.Service principals are generally used for automated, non-interactive processes. Sebbene in questa esercitazione si scriva un'applicazione console interattiva, ci si concentrerà sull'approccio dell'entità servizio.Even though this tutorial is writing an interactive console app, we'll focus on the service principal approach.

La creazione di un'entità servizio è costituita da diversi passaggi, compresa la creazione di un'applicazione Azure Active Directory.Creating a service principal consists of several steps, including creating an Azure Active Directory application. A tale scopo si eseguirà questa esercitazione.To do this, we're going to follow this tutorial.

Importante

Assicurarsi di completare tutti i passaggi dell' esercitazione collegata.Be sure to follow all the steps in the linked tutorial. È estremamente importante eseguirla esattamente come descritto.It is extremely important that you complete it exactly as described. Assicurarsi di annotare l'ID tenant, il nome di dominio tenant (in genere un dominio .onmicrosoft.com, se non è stato specificato un dominio personalizzato), l'ID client e la chiave di autenticazione client, che serviranno più avanti.Make sure to note your tenant ID, tenant domain name (commonly a .onmicrosoft.com domain unless you've specified a custom domain), client ID, and client authentication key, as we will need these later. Proteggere con attenzione l'ID client e la chiave di autenticazione client, in quanto queste credenziali possono essere usate da chiunque per eseguire operazioni come entità servizio.Be very careful to guard your client ID and client authentication key, as these credentials can be used by anyone to execute operations as the service principal.

Quando si arriva al passaggio denominato Configurare l'applicazione multi-tenant, selezionare No.When you get to the step named Configure multi-tenant application, select No.

Quando si arriva al passaggio Assign application to role (Assegnare l'applicazione al ruolo), usare il gruppo di risorse creato in precedenza, CdnConsoleTutorial, ma anziché il ruolo di Lettore, assegnare il ruolo di CDN Profile Contributor.When you get to the step Assign application to role, use the resource group we created earlier, CdnConsoleTutorial, but instead of the Reader role, assign the CDN Profile Contributor role. Dopo aver assegnato all'applicazione il ruolo di collaboratore profilo di rete CDN nel gruppo di risorse, tornare a questa esercitazione.After you assign the application the CDN Profile Contributor role on your resource group, return to this tutorial.

Dopo aver creato l'entità servizio e assegnato il ruolo CDN Profile Contributoril pannello Utenti per il gruppo di risorse dovrebbe avere un aspetto simile a questo.Once you've created your service principal and assigned the CDN Profile Contributor role, the Users blade for your resource group should look similar to this.

Pannello Utenti

Autenticazione utente interattivaInteractive user authentication

Se, invece di un'entità servizio, si preferisce l'autenticazione interattiva del singolo utente, il processo è molto simile a quello per un'entità servizio.If, instead of a service principal, you'd rather have interactive individual user authentication, the process is very similar to that for a service principal. Infatti, è necessario seguire la stessa procedura, a parte alcune piccole modifiche.In fact, you will need to follow the same procedure, but make a few minor changes.

Importante

Seguire questa procedura solo se si sceglie di utilizzare l'autenticazione interattiva del singolo utente anziché un'entità servizio.Only follow these next steps if you are choosing to use individual user authentication instead of a service principal.

  1. Quando si crea l'applicazione, invece di Applicazione Web scegliere Applicazione nativa.When creating your application, instead of Web Application, choose Native application.

    Applicazione nativa

  2. Nella pagina successiva verrà richiesto di immettere un URI di reindirizzamento.On the next page, you will be prompted for a redirect URI. L'URI non verrà convalidato, ma è necessario ricordare i valori immessi.The URI won't be validated, but remember what you entered. Sarà necessario più avanti.You'll need it later.
  3. Non è necessario creare una chiave di autenticazione client.There is no need to create a client authentication key.
  4. Invece di assegnare un'entità servizio al ruolo di collaboratore profilo di rete CDN , verranno assegnati singoli utenti o gruppi.Instead of assigning a service principal to the CDN Profile Contributor role, we're going to assign individual users or groups. In questo esempio si può notare che è stato assegnato l'utente CDN Demo User al ruolo CDN Profile Contributor.In this example, you can see that I've assigned CDN Demo User to the CDN Profile Contributor role.

    Accesso del singolo utente

Creare il progetto e aggiungere i pacchetti NugetCreate your project and add Nuget packages

Ora che abbiamo creato un gruppo di risorse per i profili di rete CDN e assegnato all'applicazione Azure AD l'autorizzazione per gestire i profili e gli endpoint della rete CDN all'interno del gruppo, è possibile iniziare a creare l'applicazione.Now that we've created a resource group for our CDN profiles and given our Azure AD application permission to manage CDN profiles and endpoints within that group, we can start creating our application.

Da Visual Studio 2015 fare clic su File, Nuovo, Progetto per aprire la finestra di dialogo del nuovo progetto.From within Visual Studio 2015, click File, New, Project... to open the new project dialog. Espandere Visual C# e selezionare Windows nel riquadro a sinistra.Expand Visual C#, then select Windows in the pane on the left. Fare clic su Applicazione console nel riquadro centrale.Click Console Application in the center pane. Assegnare un nome al progetto e fare clic su OK.Name your project, then click OK.

Nuovo progetto

Il progetto userà alcune librerie di Azure contenute nei pacchetti Nuget.Our project is going to use some Azure libraries contained in Nuget packages. Ora si aggiungeranno al progetto.Let's add those to the project.

  1. Scegliere Gestione pacchetti NuGet dal menu Strumenti e fare clic su Console di Gestione pacchetti.Click the Tools menu, Nuget Package Manager, then Package Manager Console.

    Gestisci pacchetti NuGet

  2. Nella Console di Gestione pacchetti eseguire il comando seguente per installare Active Directory Authentication Library (ADAL):In the Package Manager Console, execute the following command to install the Active Directory Authentication Library (ADAL):

    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory

  3. Eseguire il codice seguente per installare Azure CDN Management Library:Execute the following to install the Azure CDN Management Library:

    Install-Package Microsoft.Azure.Management.Cdn

Direttive, costanti, metodo main e metodi helperDirectives, constants, main method, and helper methods

Ora si scriverà la struttura di base del programma.Let's get the basic structure of our program written.

  1. Nella scheda Program.cs sostituire la direttiva using all'inizio con il codice seguente:Back in the Program.cs tab, replace the using directives at the top with the following:

    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.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    
  2. È necessario definire alcune costanti che i metodi useranno.We need to define some constants our methods will use. Nella classe Program, ma prima del metodo Main, aggiungere il codice seguente.In the Program class, but before the Main method, add the following. Sostituire i segnaposto, incluse le <parentesi acute>, con i valori necessari.Be sure to replace the placeholders, including the <angle brackets>, with your own values as needed.

    //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.Also at the class level, define these two variables. Saranno usate in un secondo momento per determinare se il profilo e l'endpoint esistono già.We'll use these later to determine if our profile and endpoint already exist.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Sostituire il metodo Main come illustrato di seguito:Replace the Main method as follows:

    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".Some of our other methods are going to prompt the user with "Yes/No" questions. Aggiungere il metodo seguente per facilitare l'operazione:Add the following method to make that a little easier:

    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 .Now that the basic structure of our program is written, we should create the methods called by the Main method.

AutenticazioneAuthentication

Per poter usare Azure CDN Management Library, è necessario autenticare l'entità servizio e ottenere un token di autenticazione.Before we can use the Azure CDN Management Library, we need to authenticate our service principal and obtain an authentication token. Questo metodo usa ADAL per recuperare il token.This method uses ADAL to retrieve the 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 del singolo utente, il metodo GetAccessToken avrà un aspetto leggermente diverso.If you are using individual user authentication, the GetAccessToken method will look slightly different.

Importante

Usare questo esempio di codice solo se si sceglie l'autenticazione interattiva del singolo utente anziché un'entità servizio.Only use this code sample if you are choosing to have individual user authentication instead of a 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;
}

Assicurarsi di sostituire <redirect URI> con l'URI di reindirizzamento inserito al momento della registrazione dell'applicazione in Azure AD.Be sure to replace <redirect URI> with the redirect URI you entered when you registered the application in Azure AD.

Elencare i profili e gli endpoint della rete CDNList CDN profiles and endpoints

Ora tutto è pronto per eseguire le operazioni della rete CDN.Now we're ready to perform CDN operations. La prima cosa che il metodo fa è elencare tutti i profili e gli endpoint nel gruppo di risorse e, se trova una corrispondenza per i nomi di profilo e di endpoint specificati nelle costanti, ne tiene conto per un momento successivo in modo da evitare tentativi di creazione di duplicati.The first thing our method does is list all the profiles and endpoints in our resource group, and if it finds a match for the profile and endpoint names specified in our constants, makes a note of that for later so we don't try to create duplicates.

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 della rete CDNCreate CDN profiles and endpoints

Ora si creerà un profilo.Next, we'll create a profile.

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

Dopo il profilo, verrà creato un endpoint.Once the profile is created, we'll create an 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.The example above assigns the endpoint an origin named Contoso with a hostname www.contoso.com. È necessario modificarlo in modo che punti al nome host dell'origine personalizzata.You should change this to point to your own origin's hostname.

Ripulire un endpointPurge an endpoint

Supponendo che l'endpoint sia stato creato, un'attività comune che potrebbe essere necessario eseguire nel programma è ripulire il contenuto dell'endpoint.Assuming the endpoint has been created, one common task that we might want to perform in our program is purging the content in our 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(endpointName, profileName, resourceGroupName, new List<string>() { "/*" });
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

Nota

Nell'esempio precedente la stringa /* indica che si vuole ripulire tutto il contenuto della radice del percorso dell'endpoint.In the example above, the string /* denotes that I want to purge everything in the root of the endpoint path. Ciò equivale a selezionare Elimina tutti nella finestra di dialogo "Elimina" del portale di Azure.This is equivalent to checking Purge All in the Azure portal's "purge" dialog. Nel metodo CreateCdnProfile è stato creato il profilo come profilo Rete CDN di Azure da Verizon usando il codice Sku = new Sku(SkuName.StandardVerizon), perciò l'operazione avrà esito positivo.In the CreateCdnProfile method, I created our profile as an Azure CDN from Verizon profile using the code Sku = new Sku(SkuName.StandardVerizon), so this will be successful. I profili Rete CDN Azure da Akamai tuttavia non supportano Elimina tutti, perciò se si usasse un profilo Akamai per questa esercitazione si dovrebbero includere percorsi specifici da ripulire.However, Azure CDN from Akamai profiles do not support Purge All, so if I was using an Akamai profile for this tutorial, I would need to include specific paths to purge.

Eliminare profili ed endpoint della rete CDNDelete CDN profiles and endpoints

Gli ultimi metodi consentiranno di eliminare l'endpoint e il profilo.The last methods will delete our endpoint and profile.

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 programmaRunning the program

È ora possibile compilare ed eseguire il programma facendo clic sul pulsante Avvia in Visual Studio.We can now compile and run the program by clicking the Start button 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.When the program reaches the above prompt, you should be able to return to your resource group in the Azure portal and see that the profile has been created.

Completamento della procedura

È quindi possibile confermare le richieste per eseguire il resto del programma.We can then confirm the prompts to run the rest of the program.

Il completamento del programma

Passaggi successiviNext Steps

Per vedere il progetto completato di questa procedura dettagliata, scaricare l'esempio.To see the completed project from this walkthrough, download the sample.

Per altra documentazione su Azure CDN Management Library per .NET, vedere i riferimenti su MSDN.To find additional documentation on the Azure CDN Management Library for .NET, view the reference on MSDN.

Gestire le risorse della rete CDN con PowerShell.Manage your CDN resources with PowerShell.