Skapa DNS-zoner och postuppsättningar med hjälp av .NET SDK

Du kan automatisera åtgärder för att skapa, ta bort eller uppdatera DNS-zoner, postuppsättningar och poster med hjälp av DNS SDK med .NET DNS-hanteringsbiblioteket. Ett fullständigt Visual Studio-projekt finns här.

Skapa ett konto för tjänstens huvudnamn

Normalt beviljas programmatisk åtkomst till Azure-resurser med ett dedikerat konto i stället för dina egna användarautentiseringsuppgifter. Dessa dedikerade konton kallas "tjänstens huvudnamn"-konton. Om du vill använda Azure DNS SDK-exempelprojektet måste du först skapa ett konto för tjänstens huvudnamn och tilldela det med rätt behörigheter.

  1. Skapa ett konto för tjänstens huvudnamn. Azure DNS SDK-exempelprojektet förutsätter lösenordsbaserad autentisering.)

  2. Skapa sedan en resursgrupp.

  3. Använd Azure RBAC för att bevilja kontot för tjänstens huvudnamn "DNS Zone Contributor" behörighet till resursgruppen.

  4. Om du använder Azure DNS SDK-exempelprojektet redigerar du filen "program.cs" enligt följande:

    • Infoga rätt värden för tenantId, clientId (kallas även konto-ID), secret (lösenord för tjänstens huvudnamn) och subscriptionId som används i steg 1.
    • Ange resursgruppens namn som skapades i steg 2.
    • Ange ett valfritt DNS-zonnamn.

NuGet-paket och namnområdesdeklarationer

Om du vill använda Azure DNS .NET SDK måste du installera Azure DNS Management Library NuGet-paketet och andra nödvändiga Azure-paket.

  1. Öppna ett projekt eller ett nytt projekt i Visual Studio.

  2. Gå till Verktyg > NuGet Upravljač za pakete > Hantera NuGet-paket för lösning....

  3. Välj Bläddra, aktivera kryssrutan Inkludera förhandsversion och skriv Microsoft.Azure.Management.Dns i sökrutan.

  4. Välj paketet och välj sedan Installera för att lägga till det i Ditt Visual Studio-projekt.

  5. Upprepa processen ovan för att även installera följande paket: Microsoft.Rest.ClientRuntime.Azure.Authentication och Microsoft.Azure.Management.ResourceManager.

Lägga till namnrymdsdeklarationer

Lägg till följande namnområdesdeklarationer

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

Initiera DNS-hanteringsklienten

DnsManagementClient Innehåller de metoder och egenskaper som krävs för att hantera DNS-zoner och postuppsättningar. Följande kod loggar in på kontot för tjänstens huvudnamn och skapar ett DnsManagementClient objekt.

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

Skapa eller uppdatera en DNS-zon

Om du vill skapa en DNS-zon måste du först skapa ett "Zon"-objekt som innehåller DNS-zonparametrarna. Eftersom DNS-zoner inte är länkade till en viss region är platsen inställd på "global". I det här exemplet läggs även en Azure Resource Manager-tagg till i zonen.

Om du vill skapa eller uppdatera zonen i Azure DNS skickas zonobjektet som innehåller zonparametrarna till DnsManagementClient.Zones.CreateOrUpdateAsyc metoden.

Kommentar

DnsManagementClient stöder tre åtgärdslägen: synkrona ("CreateOrUpdate", asynkrona ('CreateOrUpdateAsync') eller asynkrona med åtkomst till HTTP-svaret ('CreateOrUpdateWithHttpMessagesAsync'). Du kan välja något av dessa lägen, beroende på dina programbehov.

Azure DNS stöder optimistisk samtidighet som kallas Etags. Om du i det här exemplet anger "*" för rubriken "If-None-Match" uppmanas Azure DNS att skapa en DNS-zon om det inte redan finns någon. Anropet misslyckas om det redan finns en zon med det angivna namnet i den angivna resursgruppen.

// 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, "*");

Skapa DNS-postuppsättningar och -poster

DNS-poster hanteras som en postuppsättning. En postuppsättning är en uppsättning poster med samma namn och posttyp i en zon. Postuppsättningens namn är relativt till zonnamnet, inte det fullständigt kvalificerade DNS-namnet.

Om du vill skapa eller uppdatera en postuppsättning skapas ett "RecordSet"-parameterobjekt och skickas till DnsManagementClient.RecordSets.CreateOrUpdateAsync. Precis som med DNS-zoner finns det tre åtgärdslägen: synkrona ('CreateOrUpdate'), asynkrona ('CreateOrUpdateAsync') eller asynkrona med åtkomst till HTTP-svaret ('CreateOrUpdateWithHttpMessagesAsync').

Precis som med DNS-zoner innehåller åtgärder på postuppsättningar stöd för optimistisk samtidighet. I det här exemplet, eftersom "If-Match" eller "If-None-Match" inte har angetts, skapas alltid postuppsättningen. Det här anropet skriver över alla befintliga postuppsättningar med samma namn och posttyp i den här DNS-zonen.

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

Hämta zoner och postuppsättningar

Metoderna DnsManagementClient.Zones.Get och DnsManagementClient.RecordSets.Get hämtar enskilda zoner respektive postuppsättningar. RecordSets identifieras med deras typ, namn och zon och resursgrupp som de finns i. Zoner identifieras med deras namn och den resursgrupp de finns i.

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

Uppdatera en befintlig postuppsättning

Om du vill uppdatera en befintlig DNS-postuppsättning hämtar du först postuppsättningen. Uppdatera sedan innehållet i postuppsättningen innan du skickar ändringarna. I det här exemplet anger vi "Etag" från den hämtade posten som anges i parametern "If-Match". Anropet misslyckas om en samtidig åtgärd har ändrat posten som angetts under tiden.

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

Lista zoner och postuppsättningar

  • Om du vill visa en lista över zoner använder du metoderna DnsManagementClient.Zones.List... som har stöd för att visa antingen alla zoner i en viss resursgrupp eller alla zoner i en viss Azure-prenumeration (mellan resursgrupper.)

  • Om du vill visa en lista över postuppsättningar använder du metoderna DnsManagementClient.RecordSets.List... som antingen har stöd för att visa alla postuppsättningar i en viss zon eller endast de postuppsättningar av en viss typ.

Observera när du visar zoner och postuppsättningar att resultaten kan vara sidnumrerade. I följande exempel visas hur du itererar genom resultatsidorna. (En artificiellt liten sidstorlek på "2" används för att framtvinga växling. I praktiken bör den här parametern utelämnas och standardstorleken för sidan används.)

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

Nästa steg

Ladda ned Azure DNS .NET SDK-exempelprojektet. Innehåller exempel på hur du använder Azure DNS .NET SDK och exempel för andra DNS-posttyper.