Criar zonas DNS e conjuntos de registos com o SDK .NET

Pode automatizar operações para criar, eliminar ou atualizar zonas DNS, conjuntos de registos e registos ao utilizar o SDK do DNS com a Biblioteca de gestão de DNS .NET. Está disponível um projeto completo do Visual Studio aqui.

Criar uma conta do principal de serviço

Normalmente, o acesso programático aos recursos do Azure é concedido com uma conta dedicada em vez das suas próprias credenciais de utilizador. Estas contas dedicadas são denominadas contas de "principal de serviço". Para utilizar o projeto de exemplo do SDK DNS do Azure, primeiro tem de criar uma conta do principal de serviço e atribuí-la com as permissões corretas.

  1. Criar uma conta do principal de serviço. O projeto de exemplo do SDK DNS do Azure pressupõe a autenticação baseada em palavra-passe.)

  2. Em seguida, crie um grupo de recursos.

  3. Utilize o RBAC do Azure para conceder permissões de "Contribuidor de Zona DNS" à conta principal de serviço ao grupo de recursos.

  4. Se estiver a utilizar o projeto de exemplo do SDK DNS do Azure, edite o ficheiro "program.cs" da seguinte forma:

    • Insira os valores corretos para o tenantId, clientId (também conhecido como ID da conta), secret (palavra-passe da conta do principal de serviço) e subscriptionId conforme utilizado no passo 1.
    • Introduza o nome do grupo de recursos criado no passo 2.
    • Introduza um nome de zona DNS à sua escolha.

Pacotes NuGet e declarações de espaços de nomes

Para utilizar o SDK .NET do DNS do Azure, tem de instalar o pacote NuGet da Biblioteca de Gestão de DNS do Azure e outros pacotes do Azure necessários.

  1. No Visual Studio, abra um projeto ou um novo projeto.

  2. Aceda a Ferramentas> Gestor > dePacotes NuGetGerir Pacotes NuGet para Solução....

  3. Selecione Procurar, ative a caixa de verificação Incluir pré-lançamento e escreva Microsoft.Azure.Management.Dns na caixa de pesquisa.

  4. Selecione o pacote e, em seguida, selecione Instalar para adicioná-lo ao seu projeto do Visual Studio.

  5. Repita o processo acima para instalar também os seguintes pacotes: Microsoft.Rest.ClientRuntime.Azure.Authentication e Microsoft.Azure.Management.ResourceManager.

Adicionar declarações de espaço de nomes

Adicionar as seguintes declarações de espaço de nomes

using Microsoft.Rest.Azure.Authentication;
using Microsoft.Azure.Management.Dns;
using Microsoft.Azure.Management.Dns.Models;

Inicializar o cliente de gestão de DNS

Contém DnsManagementClient os métodos e propriedades necessários para gerir zonas DNS e conjuntos de registos. O código seguinte inicia sessão na conta do principal de serviço e cria um DnsManagementClient objeto.

// Build the service credentials and DNS management client
var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, secret);
var dnsClient = new DnsManagementClient(serviceCreds);
dnsClient.SubscriptionId = subscriptionId;

Criar ou atualizar uma zona DNS

Para criar uma zona DNS, primeiro tem de criar um objeto "Zone" que contenha os parâmetros da zona DNS. Uma vez que as zonas DNS não estão ligadas a uma região específica, a localização está definida como "global". Neste exemplo, também é adicionada uma "etiqueta" de Resource Manager do Azure à zona.

Para criar ou atualizar a zona no DNS do Azure, o objeto de zona que contém os parâmetros de zona é transmitido ao DnsManagementClient.Zones.CreateOrUpdateAsyc método.

Nota

DnsManagementClient suporta três modos de operação: síncrono ('CreateOrUpdate'), assíncrono ('CreateOrUpdateAsync') ou assíncrono com acesso à resposta HTTP ('CreateOrUpdateWithHttpMessagesAsync'). Pode escolher qualquer um destes modos, consoante as necessidades da sua aplicação.

O DNS do Azure suporta simultaneidade otimista, denominada Etags. Neste exemplo, especificar "*" para o cabeçalho "If-None-Match" indica ao DNS do Azure para criar uma zona DNS se ainda não existir. A chamada falha se uma zona com o nome especificado já existir no grupo de recursos especificado.

// Create zone parameters
var dnsZoneParams = new Zone("global"); // All DNS zones must have location = "global"

// Create an Azure Resource Manager 'tag'.  This is optional.  You can add multiple tags
dnsZoneParams.Tags = new Dictionary<string, string>();
dnsZoneParams.Tags.Add("dept", "finance");

// Create the actual zone.
// Note: Uses 'If-None-Match *' ETAG check, so will fail if the zone exists already.
// Note: For non-async usage, call dnsClient.Zones.CreateOrUpdate(resourceGroupName, zoneName, dnsZoneParams, null, "*")
// Note: For getting the http response, call dnsClient.Zones.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, zoneName, dnsZoneParams, null, "*")
var dnsZone = await dnsClient.Zones.CreateOrUpdateAsync(resourceGroupName, zoneName, dnsZoneParams, null, "*");

Criar conjuntos de registos e registos DNS

Os registos DNS são geridos como um conjunto de registos. Um conjunto de registos é um conjunto de registos com o mesmo nome e tipo de registo numa zona. O nome do conjunto de registos é relativo ao nome da zona e não ao nome DNS completamente qualificado.

Para criar ou atualizar um conjunto de registos, é criado e transmitido um objeto de parâmetros "RecordSet" para DnsManagementClient.RecordSets.CreateOrUpdateAsync. Tal como acontece com as zonas DNS, existem três modos de operação: síncrono ('CreateOrUpdate'), assíncrono ('CreateOrUpdateAsync') ou assíncrono com acesso à resposta HTTP ('CreateOrUpdateWithHttpMessagesAsync').

Tal como acontece com as zonas DNS, as operações em conjuntos de registos incluem suporte para simultaneidade otimista. Neste exemplo, uma vez que "If-Match" ou "If-None-Match" não é especificado, o conjunto de registos é sempre criado. Esta chamada substitui qualquer conjunto de registos existente com o mesmo nome e tipo de registo nesta zona DNS.

// Create record set parameters
var recordSetParams = new RecordSet();
recordSetParams.TTL = 3600;

// Add records to the record set parameter object.  In this case, we'll add a record of type 'A'
recordSetParams.ARecords = new List<ARecord>();
recordSetParams.ARecords.Add(new ARecord("1.2.3.4"));

// Add metadata to the record set.  Similar to Azure Resource Manager tags, this is optional and you can add multiple metadata name/value pairs
recordSetParams.Metadata = new Dictionary<string, string>();
recordSetParams.Metadata.Add("user", "Mary");

// Create the actual record set in Azure DNS
// Note: no ETAG checks specified, will overwrite existing record set if one exists
var recordSet = await dnsClient.RecordSets.CreateOrUpdateAsync(resourceGroupName, zoneName, recordSetName, RecordType.A, recordSetParams);

Obter zonas e conjuntos de registos

Os DnsManagementClient.Zones.Get métodos e DnsManagementClient.RecordSets.Get obtêm zonas individuais e conjuntos de registos, respetivamente. Os Conjuntos de Registos são identificados pelo respetivo tipo, nome e zona e grupo de recursos em que existem. As zonas são identificadas pelo respetivo nome e pelo grupo de recursos em que existem.

var recordSet = dnsClient.RecordSets.Get(resourceGroupName, zoneName, recordSetName, RecordType.A);

Atualizar um conjunto de registos existente

Para atualizar um conjunto de registos DNS existente, obtenha primeiro o conjunto de registos. Em seguida, atualize o conteúdo do conjunto de registos antes de submeter as alterações. Neste exemplo, especificamos o "Etag" do conjunto de registos obtido no parâmetro "If-Match". A chamada falha se uma operação simultânea tiver modificado o conjunto de registos entretanto.

var recordSet = dnsClient.RecordSets.Get(resourceGroupName, zoneName, recordSetName, RecordType.A);

// Add a new record to the local object.  Note that records in a record set must be unique/distinct
recordSet.ARecords.Add(new ARecord("5.6.7.8"));

// Update the record set in Azure DNS
// Note: ETAG check specified, update will be rejected if the record set has changed in the meantime
recordSet = await dnsClient.RecordSets.CreateOrUpdateAsync(resourceGroupName, zoneName, recordSetName, RecordType.A, recordSet, recordSet.Etag);

Listar zonas e conjuntos de registos

  • Para listar zonas, utilize os métodos DnsManagementClient.Zones.List... que suportam a listagem de todas as zonas num determinado grupo de recursos ou de todas as zonas numa determinada subscrição do Azure (entre grupos de recursos).)

  • Para listar conjuntos de registos, utilize os métodos DnsManagementClient.RecordSets.List... que suportam a listagem de todos os conjuntos de registos numa determinada zona ou apenas os conjuntos de registos de um tipo específico.

Tenha em atenção que, ao listar zonas e conjuntos de registos, os resultados podem ser paginados. O exemplo seguinte mostra como iterar através das páginas de resultados. (É utilizado um tamanho de página artificialmente pequeno de "2" para forçar a paginação; na prática, este parâmetro deve ser omitido e o tamanho da página predefinido utilizado.)

// Note: in this demo, we'll use a very small page size (2 record sets) to demonstrate paging
// In practice, to improve performance you would use a large page size or just use the system default
int recordSets = 0;
var page = await dnsClient.RecordSets.ListAllInResourceGroupAsync(resourceGroupName, zoneName, "2");
recordSets += page.Count();

while (page.NextPageLink != null)
{
    page = await dnsClient.RecordSets.ListAllInResourceGroupNextAsync(page.NextPageLink);
    recordSets += page.Count();
}

Passos seguintes

Transfira o projeto de exemplo do SDK .NET do DNS do Azure. Inclui exemplos sobre como utilizar o DNS com o SDK .NET do DNS do Azure do Azure e exemplos de outros tipos de registos DNS.