Delen via


DNS-zones en -recordsets maken met behulp van de .NET SDK

U kunt bewerkingen automatiseren voor het maken, verwijderen of bijwerken van DNS-zones, -recordsets en -records met behulp van de DNS-SDK met de .NET DNS-beheerbibliotheek. Hier is een volledig Visual Studio-project beschikbaar .

Een service-principal-account maken

Normaal gesproken wordt programmatische toegang tot Azure-resources verleend met een toegewezen account in plaats van uw eigen gebruikersreferenties. Deze toegewezen accounts worden 'service-principal'-accounts genoemd. Als u het Azure DNS SDK-voorbeeldproject wilt gebruiken, moet u eerst een service-principal-account maken en toewijzen met de juiste machtigingen.

  1. Maak een service-principal-account. In het azure DNS SDK-voorbeeldproject wordt ervan uitgegaan dat verificatie op basis van een wachtwoord is.)

  2. Maak vervolgens een resourcegroep.

  3. Gebruik Azure RBAC om machtigingen voor het service-principal-account 'INzender voor DNS-zone' toe te kennen aan de resourcegroep.

  4. Als u het azure DNS SDK-voorbeeldproject gebruikt, bewerkt u het bestand program.cs zoals volgt:

    • Voeg de juiste waarden in voor de tenantId, clientId (ook wel account-id genoemd), secret (wachtwoord van het service-principal-account) en subscriptionId zoals wordt gebruikt in stap 1.
    • Voer de naam van de resourcegroep in die u in stap 2 hebt gemaakt.
    • Voer een dns-zonenaam van uw keuze in.

NuGet-pakketten en naamruimtedeclaraties

Als u de Azure DNS .NET SDK wilt gebruiken, moet u het NuGet-pakket azure DNS-beheerbibliotheek en andere vereiste Azure-pakketten installeren.

  1. Open een project of nieuw project in Visual Studio.

  2. Ga naar Tools > NuGet Pakketbeheer > Manage NuGet Packages for Solution....

  3. Selecteer Bladeren, schakel het selectievakje Prerelease opnemen in en typ Microsoft.Azure.Management.Dns in het zoekvak.

  4. Selecteer het pakket en selecteer Vervolgens Installeren om het toe te voegen aan uw Visual Studio-project.

  5. Herhaal het bovenstaande proces om ook de volgende pakketten te installeren: Microsoft.Rest.ClientRuntime.Azure.Authentication en Microsoft.Azure.Management.ResourceManager.

Naamruimtedeclaraties toevoegen

Voeg de volgende naamruimtedeclaraties toe

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

De DNS-beheerclient initialiseren

De DnsManagementClient bevat de methoden en eigenschappen die nodig zijn voor het beheren van DNS-zones en -recordsets. De volgende code meldt zich aan bij het service-principal-account en maakt een DnsManagementClient object.

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

Een DNS-zone maken of bijwerken

Als u een DNS-zone wilt maken, moet u eerst een zoneobject maken met de DNS-zoneparameters. Omdat DNS-zones niet zijn gekoppeld aan een specifieke regio, wordt de locatie ingesteld op 'globaal'. In dit voorbeeld wordt ook een Azure Resource Manager-tag toegevoegd aan de zone.

Als u de zone in Azure DNS wilt maken of bijwerken, wordt het zoneobject met de zoneparameters doorgegeven aan de DnsManagementClient.Zones.CreateOrUpdateAsyc methode.

Notitie

DnsManagementClient ondersteunt drie bewerkingsmodi: synchroon ('CreateOrUpdate'), asynchroon ('CreateOrUpdateAsync' of asynchroon met toegang tot het HTTP-antwoord ('CreateOrUpdateWithHttpMessagesAsync'). U kunt een van deze modi kiezen, afhankelijk van uw toepassingsbehoeften.

Azure DNS ondersteunt optimistische gelijktijdigheid, genaamd Etags. In dit voorbeeld geeft u '*' op voor de header If-None-Match van Azure DNS om een DNS-zone te maken als deze nog niet bestaat. De aanroep mislukt als er al een zone met de opgegeven naam bestaat in de opgegeven resourcegroep.

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

DNS-recordsets en records maken met CLI

DNS-records worden beheerd als een recordset. Een recordset is een set records met dezelfde naam en hetzelfde recordtype binnen een zone. De naam van de recordset is relatief ten opzichte van de zonenaam, niet de volledig gekwalificeerde DNS-naam.

Als u een recordset wilt maken of bijwerken, wordt er een recordsetparametersobject gemaakt en doorgegeven aan DnsManagementClient.RecordSets.CreateOrUpdateAsync. Net als bij DNS-zones zijn er drie bewerkingsmodi: synchroon ('CreateOrUpdate'), asynchroon ('CreateOrUpdateAsync' of asynchroon met toegang tot het HTTP-antwoord ('CreateOrUpdateWithHttpMessagesAsync').

Net als bij DNS-zones omvatten bewerkingen in recordsets ondersteuning voor optimistische gelijktijdigheid. Omdat 'If-Match' of 'If-None-Match' niet is opgegeven, wordt de recordset altijd gemaakt. Met deze aanroep overschrijft u alle bestaande recordset met dezelfde naam en hetzelfde recordtype in deze DNS-zone.

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

Zones en recordsets ophalen

De DnsManagementClient.Zones.Get en DnsManagementClient.RecordSets.Get methoden halen respectievelijk afzonderlijke zones en recordsets op. RecordSets worden geïdentificeerd door hun type, naam en de zone en resourcegroep waarin ze bestaan. Zones worden geïdentificeerd op basis van hun naam en de resourcegroep waarin ze bestaan.

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

Een bestaande recordset bijwerken

Als u een bestaande DNS-recordset wilt bijwerken, moet u eerst de recordset ophalen. Werk vervolgens de inhoud van de recordset bij voordat u de wijzigingen indient. In dit voorbeeld geven we de 'Etag' op uit de opgehaalde recordset in de parameter If-Match. De aanroep mislukt als een gelijktijdige bewerking de recordset in de tussentijd heeft gewijzigd.

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

Lijstzones en recordsets

  • Als u zones wilt weergeven, gebruikt u de methoden DnsManagementClient.Zones.List... die ondersteuning bieden voor het weergeven van alle zones in een bepaalde resourcegroep of alle zones in een bepaald Azure-abonnement (in meerdere resourcegroepen.)

  • Als u recordsets wilt weergeven, gebruikt u DnsManagementClient.RecordSets.List...- methoden, die ondersteuning bieden voor het weergeven van alle recordsets in een bepaalde zone of alleen die recordsets van een specifiek type.

Houd er rekening mee bij het weergeven van zones en recordsets die resultaten kunnen worden gepagineerd. In het volgende voorbeeld ziet u hoe u de pagina's met resultaten kunt doorlopen. (Er wordt een kunstmatig kleine paginagrootte van '2' gebruikt om paging af te dwingen. In de praktijk moet deze parameter worden weggelaten en moet het standaardpaginaformaat worden gebruikt.)

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

Volgende stappen

Download het Azure DNS .NET SDK-voorbeeldproject. Bevat voorbeelden van het gebruik van de Azure DNS .NET SDK en voorbeelden voor andere DNS-recordtypen.