C# で Microsoft Azure の DNS ゾーンに A レコードを登録する

Azure.ResourceManager.Dns パッケージを使って DNS ゾーンを操作できる。

www.nuget.org

A レコードを追加するサンプルコードは次の通り。既存のパブリックIPアドレスリソースのエイリアスにしている。

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Dns;
using Azure.ResourceManager.Network;

const string dnsZoneSubscriptionId = "DNS ゾーンリソースがあるサブスクリプションの ID";
const string dnsZoneResourceGroupName = "DNS ゾーンリソースがあるリソースグループの名前";
const string zoneName = "DNS ゾーンりそーずの名前";
const string aRecordName = "A レコードの名前";
const string publicIPAddressSubscriptionId = "IP アドレスリソースがあるサブスクリプションの ID";
const string publicIPAddressResourceGroupName = "IP アドレスリソースがあるリソースグループの名前";
const string publicIPAddressName = "IP アドレスリソースの名前";

var armClient = new ArmClient(new DefaultAzureCredential());

var dnsZoneId = DnsZoneResource.CreateResourceIdentifier(
    subscriptionId: dnsZoneSubscriptionId,
    resourceGroupName: dnsZoneResourceGroupName,
    zoneName: zoneName);
var dnsZoneResponse = await armClient.GetDnsZoneResource(dnsZoneId).GetAsync();
var dnsZone = dnsZoneResponse.Value;
Console.WriteLine(dnsZone.Data.Name);

var dnsARecords = dnsZone.GetDnsARecords();
DnsARecordResource dnsARecord;
if (await dnsARecords.ExistsAsync(aRecordName))
{
    var dnsARecordResponse = await dnsARecords.GetAsync(aRecordName);
    dnsARecord = dnsARecordResponse.Value;
}
else
{
    var publicIPAddressId = PublicIPAddressResource.CreateResourceIdentifier(
        subscriptionId: publicIPAddressSubscriptionId,
        resourceGroupName: publicIPAddressResourceGroupName,
        publicIPAddressName: publicIPAddressName);

    var dnsARecordOperation = await dnsARecords.CreateOrUpdateAsync(
        waitUntil: WaitUntil.Completed,
        aRecordName: aRecordName,
        data: new DnsARecordData
        {
            TtlInSeconds = 60 * 60,
            TargetResourceId = publicIPAddressId,
        });
    var dnsARecordResponse = await dnsARecordOperation.WaitForCompletionAsync();
    dnsARecord = dnsARecordResponse.Value;
}
Console.WriteLine($"Name: {dnsARecord.Data.Name}");
Console.WriteLine($"Fqdn: {dnsARecord.Data.Fqdn}");
Console.WriteLine($"TtlInSeconds: {dnsARecord.Data.TtlInSeconds}");
Console.WriteLine($"TargetResourceId: {dnsARecord.Data.TargetResourceId}");
Console.ReadLine();