Criar zonas DNS e conjuntos de registros usando o SDK do .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. Um projeto completo do Visual Studio está disponível 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 de suas próprias credenciais de usuário. Essas contas dedicadas são chamadas de contas "principais de serviço". Para usar o projeto de exemplo SDK do DNS do Azure, primeiro você precisa criar uma conta principal de serviço e atribuí-la com as permissões corretas.
Crie uma conta principal de serviço. O projeto de exemplo SDK do DNS do Azure pressupõe autenticação baseada em senha.)
Em seguida, crie um grupo de recursos.
Use o RBAC do Azure para conceder à conta principal de serviço 'Colaborador da Zona DNS' permissões para o grupo de recursos.
Se você estiver usando o projeto de exemplo SDK do DNS do Azure, edite o arquivo 'program.cs' da seguinte maneira:
- Insira os valores corretos para o ,
clientId
(também conhecido como ID da conta),secret
(senha da conta principal dotenantId
serviço) esubscriptionId
conforme usado na etapa 1. - Insira o nome do grupo de recursos criado na etapa 2.
- Insira um nome de zona DNS de sua escolha.
- Insira os valores corretos para o ,
Pacotes NuGet e declarações de espaços de nomes
Para usar o SDK .NET do Azure DNS, você precisa instalar o pacote NuGet da Biblioteca de Gerenciamento de DNS do Azure e outros pacotes necessários do Azure.
No Visual Studio, abra um projeto ou novo projeto.
Vá para Ferramentas > Gerenciador de Pacotes > NuGet Gerenciar Pacotes NuGet para Solução....
Selecione Procurar, ative a caixa de seleção Incluir pré-lançamento e digite Microsoft.Azure.Management.Dns na caixa de pesquisa.
Selecione o pacote e, em seguida, selecione Instalar para adicioná-lo ao seu projeto do Visual Studio.
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
Adicione as seguintes declarações de namespace:
using Microsoft.Rest.Azure.Authentication;
using Microsoft.Azure.Management.Dns;
using Microsoft.Azure.Management.Dns.Models;
Inicializar o cliente de gerenciamento DNS
O DnsManagementClient
contém os métodos e propriedades necessários para gerenciar zonas DNS e conjuntos de registros. O código a seguir faz logon na conta 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 você precisa criar um objeto "Zone" contendo os parâmetros da zona DNS. Como as zonas DNS não estão vinculadas a uma região específica, o local é definido como 'global'. Neste exemplo, uma 'tag' do Azure Resource Manager também é adicionada à zona.
Para criar ou atualizar a zona no DNS do Azure, o objeto de zona que contém os parâmetros de zona é passado para o DnsManagementClient.Zones.CreateOrUpdateAsync
método.
Nota
O DnsManagementClient suporta três modos de operação: síncrono ('CreateOrUpdate'), assíncrono ('CreateOrUpdateAsync') ou assíncrono com acesso à resposta HTTP ('CreateOrUpdateWithHttpMessagesAsync'). Você pode escolher qualquer um desses modos, dependendo das necessidades do seu aplicativo.
O DNS do Azure dá suporte à simultaneidade otimista, chamada Etags. Neste exemplo, especificar "*" para o cabeçalho 'If-None-Match' informa ao DNS do Azure para criar uma zona DNS se ainda não existir. A chamada falhará se já existir uma zona com o nome fornecido no grupo de recursos determinado.
// 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 registros DNS são gerenciados como um conjunto de registros. Um conjunto de registros é um conjunto de registros com o mesmo nome e tipo de registro dentro de uma zona. O nome do conjunto de registros é relativo ao nome da zona, não ao nome DNS totalmente qualificado.
Para criar ou atualizar um conjunto de registros, um objeto de parâmetros "RecordSet" é criado e passado 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, como 'If-Match' ou 'If-None-Match' não é especificado, o conjunto de registros é 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
recuperam zonas individuais e conjuntos de registros, respectivamente. Os RecordSets são identificados por seu tipo, nome e zona e grupo de recursos em que existem. As zonas são identificadas pelo seu nome e pelo grupo de recursos em que existem.
var recordSet = dnsClient.RecordSets.Get(resourceGroupName, zoneName, recordSetName, RecordType.A);
Atualizar um conjunto de registros existente
Para atualizar um conjunto de registros DNS existente, primeiro recupere o conjunto de registros. Em seguida, atualize o conteúdo do conjunto de registros antes de enviar as alterações. Neste exemplo, especificamos o 'Etag' do conjunto de registros recuperados no parâmetro 'If-Match'. A chamada falhará se uma operação simultânea tiver modificado o conjunto de registros 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 registros
Para listar zonas, use os métodos DnsManagementClient.Zones.List... , que dão suporte à listagem de todas as zonas em um determinado grupo de recursos ou todas as zonas em uma determinada assinatura do Azure (entre grupos de recursos).
Para listar conjuntos de registros, use os métodos DnsManagementClient.RecordSets.List... , que suportam listar todos os conjuntos de registros em uma determinada zona ou apenas os conjuntos de registros de um tipo específico.
Observe que, ao listar zonas e conjuntos de registros, os resultados podem ser paginados. O exemplo a seguir mostra como iterar pelas páginas de resultados. (Um tamanho de página artificialmente pequeno de '2' é usado para forçar a paginação; na prática, este parâmetro deve ser omitido e o tamanho de página padrão usado.)
// 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();
}
Próximos passos
Baixe o projeto de exemplo do Azure DNS .NET SDK. 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.