Introdução à Biblioteca CDN do Azure para .NET
Importante
O Azure CDN Standard da Microsoft (clássico) será desativado em 30 de setembro de 2027. Para evitar qualquer interrupção do serviço, é importante migrar o Azure CDN Standard dos perfis Microsoft (clássicos) para o Azure Front Door Standard ou Premium até 30 de setembro de 2027. Para obter mais informações, consulte Azure CDN Standard da aposentadoria (clássica) da Microsoft.
A CDN do Azure de Edgio será aposentada em 15 de janeiro de 2025. Você deve migrar sua carga de trabalho para o Azure Front Door antes dessa data para evitar a interrupção do serviço. Para obter mais informações, consulte CDN do Azure das Perguntas frequentes sobre aposentadoria do Edgio.
Você pode usar a Biblioteca CDN do Azure para .NET para automatizar a criação e o gerenciamento de perfis e pontos de extremidade da CDN. Este tutorial descreve a criação de um aplicativo de console .NET simples que demonstra várias das operações disponíveis. Este tutorial não se destina a descrever todos os aspetos da Biblioteca CDN do Azure para .NET em detalhes.
Você precisa do Visual Studio 2015 para concluir este tutorial. O Visual Studio Community 2015 está disponível gratuitamente para download.
Gorjeta
O projeto concluído deste tutorial está disponível para download no MSDN.
Pré-requisitos
Antes de escrever o código de gerenciamento da CDN, você deve fazer alguma preparação para permitir que o código interaja com o Gerenciador de Recursos do Azure. Para fazer essa preparação, você precisa:
- Criar um grupo de recursos para conter o perfil CDN criado neste tutorial
- Configurar o Microsoft Entra ID para fornecer autenticação para o aplicativo
- Aplique permissões ao grupo de recursos para que apenas usuários autorizados do locatário do Microsoft Entra possam interagir com o perfil CDN
Criar o grupo de recursos
Inicie sessão no Portal do Azure.
Clique em Criar um recurso.
Procure por Grupo de recursos e, no painel Grupo de recursos, clique em Criar.
Nomeie seu grupo de recursos como CdnConsoleTutorial. Selecione a sua subscrição e escolha uma localização perto de si. Se desejar, clique na caixa de seleção Fixar no painel para fixar o grupo de recursos no painel no portal. A fixação facilita a localização posterior. Depois de fazer suas seleções, clique em Criar.
Depois que o grupo de recursos for criado, se você não o fixou no seu painel, poderá encontrá-lo clicando em Procurar e, em seguida, em Grupos de Recursos. Para abri-lo, clique no grupo de recursos. Anote o seu ID de Subscrição. Precisamos dela mais tarde.
Criando o aplicativo Microsoft Entra e aplicando permissões
Há duas abordagens para a autenticação de aplicativos com o Microsoft Entra ID: usuários individuais ou uma entidade de serviço. Uma entidade de serviço é semelhante a uma conta de serviço no Windows. Em vez de conceder a um usuário específico permissões para interagir com os perfis CDN, as permissões são concedidas à entidade de serviço. As entidades de serviço são normalmente usadas para processos automatizados e não interativos. Embora este tutorial esteja escrevendo um aplicativo de console interativo, vamos nos concentrar na abordagem da entidade de serviço.
A criação de uma entidade de serviço consiste em várias etapas, incluindo a criação de um aplicativo Microsoft Entra. Para criá-lo, vamos seguir este tutorial.
Importante
Certifique-se de seguir todas as etapas no tutorial vinculado. É importante que o complete exatamente como descrito. Certifique-se de anotar seu ID de locatário, nome de domínio do locatário (geralmente um domínio .onmicrosoft.com , a menos que você tenha especificado um domínio personalizado), ID do cliente e chave de autenticação do cliente, pois precisamos dessas informações mais tarde. Tenha cuidado para proteger sua ID de cliente e chave de autenticação de cliente, pois essas credenciais podem ser usadas por qualquer pessoa para executar operações como a entidade de serviço.
Quando chegar à etapa chamada Configurar aplicativo multilocatário, selecione Não.
Quando chegar à etapa Atribuir o aplicativo a uma função, use o grupo de recursos criado anteriormente, CdnConsoleTutorial, mas, em vez da função Leitor, atribua a função de Colaborador de Perfil CDN. Depois de atribuir ao aplicativo a função de Colaborador de Perfil CDN em seu grupo de recursos, retorne a este tutorial.
Depois de criar a entidade de serviço e atribuir a função de Colaborador do Perfil CDN, a folha Usuários do seu grupo de recursos deverá ser semelhante à imagem a seguir.
Autenticação interativa do usuário
Se, em vez de uma entidade de serviço, você preferir ter autenticação de usuário individual interativa, o processo será semelhante ao de uma entidade de serviço. Na verdade, você precisa seguir o mesmo procedimento, mas fazer algumas pequenas alterações.
Importante
Siga estas próximas etapas somente se você estiver optando por usar a autenticação de usuário individual em vez de uma entidade de serviço.
Ao criar seu aplicativo, em vez de Aplicativo Web, escolha Aplicativo nativo.
Na página seguinte, será solicitado um URI de redirecionamento. O URI não será validado, mas lembre-se do que você inseriu. Você precisa dele mais tarde.
Não há necessidade de criar uma chave de autenticação de cliente.
Em vez de atribuir uma entidade de serviço à função de Colaborador do Perfil CDN, vamos atribuir usuários ou grupos individuais. Neste exemplo, você pode ver que eu atribuí Usuário de Demonstração de CDN à função de Colaborador de Perfil de CDN .
Crie seu projeto e adicione pacotes NuGet
Agora que criamos um grupo de recursos para nossos perfis de CDN e demos permissão ao nosso aplicativo Microsoft Entra para gerenciar perfis de CDN e pontos de extremidade dentro desse grupo, podemos começar a criar nosso aplicativo.
Importante
O pacote NuGet Microsoft.IdentityModel.Clients.ActiveDirectory e a Biblioteca de Autenticação do Azure AD (ADAL) foram preteridos. Nenhum novo recurso foi adicionado desde 30 de junho de 2020. Recomendamos vivamente que atualize. Para obter mais informações, consulte o guia de migração.
No Visual Studio 2015, selecione Arquivo, Novo, Projeto... para abrir a caixa de diálogo do novo projeto. Expanda Visual C# e, em seguida, selecione Windows no painel à esquerda. Selecione Aplicativo de console no painel central. Atribua um nome ao seu projeto e, em seguida, selecione OK.
Nosso projeto usará algumas bibliotecas do Azure contidas em pacotes NuGet. Vamos adicionar essas bibliotecas ao projeto.
Selecione o menu Ferramentas , Gerenciador de Pacotes Nuget e, em seguida , Console do Gerenciador de Pacotes.
No Console do Gerenciador de Pacotes, execute o seguinte comando para instalar a Biblioteca de Autenticação do Ative Directory (ADAL):
Install-Package Microsoft.Identity.Client
Execute o seguinte para instalar a Biblioteca de Gerenciamento de CDN do Azure:
Install-Package Microsoft.Azure.Management.Cdn
Diretivas, constantes, método principal e métodos auxiliares
Vamos escrever a estrutura básica do nosso programa.
De volta à guia Program.cs, substitua as
using
diretivas na parte superior pelo seguinte comando: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;
Precisamos definir algumas constantes que nossos métodos usam.
Program
Na classe, mas antes doMain
método, adicione os seguintes blocos de código. Certifique-se de substituir os espaços reservados, incluindo os <colchetes> angulares, por seus próprios valores, conforme necessário.//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>";
Também ao nível da turma, defina estas duas variáveis. Usamos essas variáveis posteriormente para determinar se nosso perfil e endpoint já existem.
static bool profileAlreadyExists = false; static bool endpointAlreadyExists = false;
Substitua o
Main
método da seguinte forma: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(); }
Alguns dos nossos outros métodos vão avisar o usuário com perguntas "Sim/Não". Adicione o seguinte método para tornar isso um pouco mais fácil:
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); } }
Agora que a estrutura básica do nosso programa está escrita, devemos criar os métodos chamados pelo Main
método.
Autenticação
Antes de podermos usar a Biblioteca de Gerenciamento de CDN do Azure, precisamos autenticar nossa entidade de serviço e obter um token de autenticação. Esse método usa a Biblioteca de Autenticação do Ative Directory para recuperar o 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 você estiver usando a autenticação de usuário individual, o GetAccessToken
método será ligeiramente diferente.
Importante
Use este exemplo de código somente se você estiver optando por ter autenticação de usuário individual em vez de uma entidade de serviço.
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;
}
Certifique-se de substituir <redirect URI>
pelo URI de redirecionamento que você inseriu quando registrou o aplicativo no Microsoft Entra ID.
Listar perfis CDN e pontos de extremidade
Agora estamos prontos para executar operações CDN. A primeira coisa que nosso método faz é listar todos os perfis e pontos de extremidade em nosso grupo de recursos e, se encontrar uma correspondência para os nomes de perfil e ponto final especificados em nossas constantes, anote para mais tarde para que não tentemos criar duplicatas.
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();
}
}
Criar perfis CDN e pontos de extremidade
Em seguida, criamos um perfil.
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);
}
}
Depois que o perfil é criado, criamos um ponto de extremidade.
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
O exemplo acima atribui ao ponto de extremidade uma origem chamada Contoso com um nome www.contoso.com
de host. Você deve alterar isso para apontar para o nome de host da sua própria origem.
Limpar um ponto de extremidade
Supondo que o ponto de extremidade tenha sido criado, uma tarefa comum que podemos querer executar em nosso programa é limpar o conteúdo em nosso ponto de extremidade.
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
No exemplo anterior, a cadeia de caracteres /*
indica que quero limpar tudo na raiz do caminho do ponto de extremidade. Isso equivale a verificar Limpar Tudo na caixa de diálogo "Limpar" do portal do Azure. CreateCdnProfile
No método, criei nosso perfil como uma CDN do Azure a partir do perfil Edgio usando o códigoSku = new Sku(SkuName.StandardVerizon)
, então isso será bem-sucedido.
Excluir perfis CDN e pontos de extremidade
Os últimos métodos excluem nosso endpoint e perfil.
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();
}
}
Executando o programa
Agora podemos compilar e executar o programa clicando no botão Iniciar no Visual Studio.
Quando o programa atingir o prompt acima, você poderá retornar ao seu grupo de recursos no portal do Azure e ver se o perfil foi criado.
Podemos então confirmar os prompts para executar o resto do programa.
Passos Seguintes
Para encontrar mais documentação na Biblioteca de Gerenciamento de CDN do Azure para .NET, consulte a referência no MSDN.
Gerencie seus recursos de CDN com o PowerShell.