Začínáme s knihovnou Azure CDN pro .NET

Knihovnu Azure CDN pro .NET můžete použít k automatizaci vytváření a správy profilů a koncových bodů CDN. Tento kurz vás provede vytvořením jednoduché konzolové aplikace .NET, která ukazuje několik dostupných operací. Tento kurz není určený k podrobnému popisu všech aspektů knihovny Azure CDN pro .NET.

K dokončení tohoto kurzu potřebujete Visual Studio 2015. Visual Studio Community 2015 je volně dostupné ke stažení.

Tip

Dokončený projekt z tohoto kurzu je k dispozici ke stažení na webu MSDN.

Požadavky

Než začnete psát kód pro správu CDN, musíte udělat určitou přípravu, abyste umožnili kódu interakci s Azure Resource Managerem. Pokud chcete tuto přípravu provést, musíte:

  • Vytvořte skupinu prostředků, která bude obsahovat profil CDN vytvořený v tomto kurzu.
  • Nakonfigurujte ID Microsoft Entra tak, aby poskytovalo ověřování pro aplikaci.
  • Použití oprávnění pro skupinu prostředků, aby s profilem CDN mohli pracovat jenom autorizovaní uživatelé z vašeho tenanta Microsoft Entra

Vytvoření skupiny prostředků

  1. Přihlaste se na webu Azure Portal.

  2. Klikněte na Vytvořit prostředek.

  3. Vyhledejte skupinu prostředků a v podokně Skupina prostředků klikněte na Vytvořit.

    Vytvoření nové skupiny prostředků

  4. Pojmenujte skupinu prostředků CdnConsoleTutorial. Vyberte své předplatné a zvolte umístění blízko vás. Pokud chcete, můžete kliknout na zaškrtávací políčko Připnout na řídicí panel a připnout skupinu prostředků na řídicí panel na portálu. Připnutí usnadňuje pozdější vyhledání. Po výběru klikněte na Vytvořit.

    Snímek obrazovky s dialogovým oknem Skupina prostředků

  5. Pokud jste skupinu prostředků po vytvoření nepřipnuli na řídicí panel, najdete ji kliknutím na Procházet a skupinami prostředků. Otevřete ho kliknutím na skupinu prostředků. Poznamenejte si ID předplatného. Potřebujeme to později.

    Snímek obrazovky s částí Kurz konzoly C D N

Vytvoření aplikace Microsoft Entra a použití oprávnění

Existují dva přístupy k ověřování aplikací pomocí ID Microsoft Entra: jednotliví uživatelé nebo instanční objekt. Instanční objekt je podobný účtu služby ve Windows. Místo udělení konkrétních uživatelských oprávnění pro interakci s profily CDN se místo toho udělí instančnímu objektu oprávnění. Instanční objekty se obvykle používají pro automatizované neinteraktivní procesy. I když tento kurz píše interaktivní konzolovou aplikaci, zaměříme se na přístup instančního objektu.

Vytvoření instančního objektu se skládá z několika kroků, včetně vytvoření aplikace Microsoft Entra. Abychom ho vytvořili, budeme postupovat podle tohoto kurzu.

Důležité

Nezapomeňte postupovat podle všech kroků v propojeném kurzu. Je důležité , abyste ho dokončili přesně podle popisu. Nezapomeňte si poznamenat ID tenanta, název domény tenanta (obvykle doménu .onmicrosoft.com , pokud nezadáte vlastní doménu), ID klienta a ověřovací klíč klienta, protože tyto informace budeme potřebovat později. Dávejte pozor na ochranu ID klienta a ověřovacího klíče klienta, protože tyto přihlašovací údaje můžou používat všichni k provádění operací jako instančního objektu.

Až se dostanete ke kroku Konfigurovat aplikaci s více tenanty, vyberte Ne.

Když se dostanete ke kroku Přiřadit aplikaci k roli, použijte skupinu prostředků vytvořenou dříve, CdnConsoleTutorial, ale místo role Čtenář přiřaďte roli Přispěvatel profilu CDN. Po přiřazení aplikace roli Přispěvatel profilu CDN ve skupině prostředků se vraťte do tohoto kurzu.

Po vytvoření instančního objektu a přiřazení role Přispěvatel profilu CDN by okno Uživatelé pro vaši skupinu prostředků mělo vypadat podobně jako na následujícím obrázku.

Okno Uživatelé

Interaktivní ověřování uživatelů

Pokud byste místo instančního objektu raději měli interaktivní ověřování jednotlivých uživatelů, je proces podobný tomu pro instanční objekt. Ve skutečnosti musíte postupovat stejným postupem, ale provést několik menších změn.

Důležité

Pokud se rozhodnete použít ověřování jednotlivých uživatelů místo instančního objektu, postupujte podle následujících kroků.

  1. Při vytváření aplikace místo webové aplikace zvolte Nativní aplikace.

    Nativní aplikace

  2. Na další stránce se zobrazí výzva k zadání identifikátoru URI přesměrování. Identifikátor URI se neověří, ale zapamatujte si, co jste zadali. Budete ho potřebovat později.

  3. Není potřeba vytvořit ověřovací klíč klienta.

  4. Místo přiřazení instančního objektu k roli Přispěvatel profilu CDN přiřadíme jednotlivé uživatele nebo skupiny. V tomto příkladu vidíte, že jsem přiřadil ukázkového uživatele CDN k roli Přispěvatel profilu CDN.

    Přístup jednotlivých uživatelů

Vytvoření projektu a přidání balíčků NuGet

Teď, když jsme vytvořili skupinu prostředků pro naše profily CDN a udělili aplikaci Microsoft Entra oprávnění ke správě profilů a koncových bodů CDN v této skupině, můžeme začít vytvářet naši aplikaci.

Důležité

Balíček NuGet Microsoft.IdentityModel.Clients.ActiveDirectory a Knihovna ADAL (Azure AD Authentication Library) jsou zastaralé. Od 30. června 2020 nebyly přidány žádné nové funkce. Důrazně doporučujeme upgradovat. Další informace najdete v průvodci migrací.

V sadě Visual Studio 2015 vyberte Soubor, Nový, Projekt... a otevřete tak dialogové okno nový projekt. Rozbalte Visual C# a pak v podokně vlevo vyberte Windows . V prostředním podokně vyberte Konzolová aplikace . Pojmenujte projekt a pak vyberte OK.

Nový projekt

Náš projekt bude používat některé knihovny Azure obsažené v balíčcích NuGet. Pojďme tyto knihovny přidat do projektu.

  1. Vyberte nabídku Nástroje, Správce balíčků NuGet a pak Správce balíčků Konzolu.

    Správa balíčků NuGet

  2. V konzole Správce balíčků spusťte následující příkaz, který nainstaluje knihovnu Active Directory Authentication Library (ADAL):

    Install-Package Microsoft.Identity.Client

  3. Spuštěním následujícího příkazu nainstalujte knihovnu pro správu Azure CDN:

    Install-Package Microsoft.Azure.Management.Cdn

Direktivy, konstanty, hlavní metody a pomocné metody

Pojďme získat základní strukturu našeho programu napsaného.

  1. Zpět na kartě Program.cs nahraďte using direktivy v horní části následujícím příkazem:

    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. Potřebujeme definovat některé konstanty, které naše metody používají. Program Do třídy, ale před metodu Main přidejte následující bloky kódu. Podle potřeby nahraďte zástupné symboly, včetně <úhlových závorek>, vlastními hodnotami.

    //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. Na úrovni třídy také definujte tyto dvě proměnné. Tyto proměnné použijeme později k určení, jestli už náš profil a koncový bod existují.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Nahraďte metodu Main následujícím způsobem:

    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ěkteré z našich dalších metod zobrazí uživateli výzvu s dotazem "Ano/Ne". Přidejte následující metodu, která vám usnadní práci:

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

Teď, když je napsána základní struktura našeho programu, bychom měli vytvořit metody volané metodou Main .

Ověřování

Než budeme moct použít knihovnu pro správu Azure CDN, musíme ověřit instanční objekt a získat ověřovací token. Tato metoda používá k načtení tokenu knihovnu Active Directory Authentication Library.

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

Pokud používáte ověřování jednotlivých uživatelů, metoda GetAccessToken vypadá trochu jinak.

Důležité

Tuto ukázku kódu použijte pouze v případě, že se rozhodnete, že místo instančního objektu chcete mít ověřování jednotlivých uživatelů.

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

Nezapomeňte nahradit <redirect URI> identifikátorem URI přesměrování, který jste zadali při registraci aplikace v Microsoft Entra ID.

Výpis profilů a koncových bodů CDN

Teď jsme připraveni provádět operace CDN. První věc, kterou naše metoda provede, je výpis všech profilů a koncových bodů v naší skupině prostředků a pokud najde shodu pro názvy profilů a koncových bodů zadaných v našich konstantách, poznamenejte si je později, abychom se nepokoušeli vytvářet duplicity.

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

Vytvoření profilů a koncových bodů CDN

V dalším kroku vytvoříme 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);
    }
}

Po vytvoření profilu vytvoříme koncový bod.

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

Poznámka:

Výše uvedený příklad přiřadí koncovému bodu původ s názvem Contoso s názvem www.contoso.comhostitele . Měli byste to změnit tak, aby odkazovat na název hostitele vašeho původu.

Vymazání koncového bodu

Za předpokladu, že se koncový bod vytvořil, je jednou z běžných úloh, kterou můžeme v našem programu provést, vyprázdnění obsahu v našem koncovém bodu.

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

Poznámka:

V předchozím příkladu řetězec /* označuje, že chci vyprázdnit všechno v kořenovém adresáři cesty ke koncovému bodu. To je ekvivalentem kontroly vyprázdnění v dialogovém okně vyprázdnění webu Azure Portal. CreateCdnProfile V metodě jsem vytvořil náš profil jako Azure CDN z profilu Edgio pomocí kódu Sku = new Sku(SkuName.StandardVerizon), takže to bude úspěšné.

Odstranění profilů a koncových bodů CDN

Poslední metody odstraní koncový bod a 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();
    }
}

Spuštění programu

Teď můžeme program zkompilovat a spustit kliknutím na tlačítko Start v sadě Visual Studio.

Program spuštěný

Jakmile program dosáhne výše uvedené výzvy, měli byste se vrátit ke skupině prostředků na webu Azure Portal a zjistit, že byl profil vytvořen.

Výborně!

Pak můžeme potvrdit výzvy ke spuštění zbytku programu.

Dokončení programu

Další kroky

Pokud chcete zobrazit dokončený projekt z tohoto názorného postupu, stáhněte si ukázku.

Další dokumentaci ke knihovně pro správu Azure CDN pro .NET najdete v referenčních informacích na webu MSDN.

Správa prostředků CDN pomocí PowerShellu