PowerShell を使用して DNS ゾーンを管理する方法

この記事では、Azure PowerShell を使用して DNS ゾーンを管理する方法について説明します。 DNS ゾーンは、クロスプラットフォームの Azure CLI または Azure Portal を使用して、管理することもできます。

このガイドでは、特にパブリック DNS ゾーンについて説明します。 Azure PowerShell を使用する Azure DNS での Private Zones の管理については、「PowerShell で Azure DNS プライベート ゾーンの使用を開始する」を参照してください。

DNS ゾーンは、特定のドメインの DNS レコードをホストするために使用されます。 Azure DNS でドメインのホストを開始するには、そのドメイン名用に DNS ゾーンを作成する必要があります。 ドメインの DNS レコードはすべて、この DNS ゾーン内に作成されます。

たとえば、ドメイン "contoso.com" に、"mail.contoso.com" (メール サーバー用) や "www.contoso.com" (Web サイト用) など、複数の DNS レコードを含めることができます。

Azure DNS に DNS ゾーンを作成する場合:

  • ゾーンの名前がリソース グループ内で一意であること、および作成するゾーンがまだ存在していないことが必要です。 それ以外の場合は、操作が失敗します。
  • 同じゾーン名は、別のリソース グループまたは別の Azure サブスクリプション内であれば再利用できます。
  • 複数のゾーンで同じ名前を共有できますが、各インスタンスには異なるネーム サーバー アドレスが割り当てられます。 ドメイン名レジストラーで構成できるアドレスのセットは 1 つだけです。

注意

自社で所有していないドメイン名でも、Azure DNS 内にそのドメイン名で DNS ゾーンを作成できます。 ただし、ドメイン名レジストラーでドメイン名の正しい名前サーバーとして Azure DNS ネーム サーバーを構成する場合は、ドメインを所有する必要があります。

詳細については、「Azure DNS へのドメインの委任」を参照してください。

Azure DNS 用に Azure PowerShell をセットアップする

始める前に

重要

PowerShell からこの Azure 機能を使用するには、AzureRM モジュールをインストールする必要があります。 これはもう新しい機能が追加されることのない古いモジュールであり、Windows PowerShell 5.1 でのみ使用可能です。 同じバージョンの PowerShell でインストールした場合、AzAzureRM のモジュールは同時に使用 "できません"。 両方のバージョンが必要な場合:

  1. PowerShell 5.1 セッションで Az モジュールをアンインストールします
  2. PowerShell 5.1 セッションで AzureRM モジュールをインストールします
  3. PowerShell Core 6.x 以降をダウンロードしてインストールします
  4. PowerShell Core セッションで Az モジュールをインストールします

構成を開始する前に、以下がそろっていることを確認します。

Azure アカウントへのサインイン

PowerShell コンソールを開き、アカウントに接続します。 詳細については、「Azure PowerShell を使用してサインインする」を参照してください。

Connect-AzAccount

サブスクリプションの選択

アカウントのサブスクリプションを確認します。

Get-AzSubscription

使用する Azure サブスクリプションを選択します。

Select-AzSubscription -SubscriptionName "your_subscription_name"

リソース グループを作成する

Azure リソース マネージャーでは、すべてのリソース グループの場所を指定する必要があります。 この場所は、そのリソース グループ内のリソースの既定の保存先として使用されます。 ただし、すべての DNS リソースはグローバルであり、リージョンの違いがないため、リソース グループの場所を選択しても、Azure DNS には影響しません。

既存のリソース グループを使用する場合は、この手順をスキップしてください。

New-AzResourceGroup -Name MyDNSResourceGroup -location "West US"

DNS ゾーンの作成

DNS ゾーンは、 New-AzDnsZone コマンドレットを使用して作成します。

次の例では、MyDNSResourceGroup というリソース グループに contoso.com という DNS ゾーンを作成します。

New-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

次の例では、project = demoenv = test の 2 つ Azure Resource Manager タグを含む DNS ゾーンの作成方法を示します。

New-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup -Tag @{ project="demo"; env="test" }

DNS ゾーンの取得

DNS ゾーンを取得するには、 Get-AzDnsZone コマンドレットを使用します。 この操作により、Azure DNS 内の既存のゾーンに対応する DNS ゾーン オブジェクトが返されます。 このオブジェクトには、ゾーンに関するデータ (レコード セットの数など) が含まれますが、レコード セット自体は含まれません (Get-AzDnsRecordSet を参照)。

Get-AzDnsZone -Name contoso.com –ResourceGroupName MyDNSResourceGroup

Name                  : contoso.com
ResourceGroupName     : myresourcegroup
Etag                  : 00000003-0000-0000-8ec2-f4879750d201
Tags                  : {project, env}
NameServers           : {ns1-01.azure-dns.com., ns2-01.azure-dns.net., ns3-01.azure-dns.org.,
                        ns4-01.azure-dns.info.}
NumberOfRecordSets    : 2
MaxNumberOfRecordSets : 5000

DNS ゾーンの一覧表示

Get-AzDnsZoneからゾーン名を省略することで、リソース グループ内のすべてのゾーンを列挙できます。 この操作により、ゾーン オブジェクトの配列が返されます。

$zoneList = Get-AzDnsZone -ResourceGroupName MyDNSResourceGroup
$zoneList

Get-AzDnsZone でゾーン名とリソース グループ名の両方を省略すると、Azure サブスクリプションにすべてのゾーンを列挙できます。

$zoneList = Get-AzDnsZone
$zoneList

DNS ゾーンの更新

DNS ゾーンのリソースへの変更は、 Set-AzDnsZoneを使用して行うことができます。 このコマンドレットによって、ゾーン内の DNS レコード セットが更新されることはありません (「DNS レコードの管理方法」を参照)。 この操作は、ゾーンのリソース自体のプロパティを更新するためだけに使用します。 現在、書き込み可能ゾーンのプロパティは、ゾーンのリソースの Azure Resource Manager の "タグ" に限定されています。

DNS ゾーンを更新するには、次の 2 つの方法のいずれかを使用します。

ゾーン名とリソース グループを使用してゾーンを指定する

この手法では、既存のゾーン タグが、指定された値に置き換えられます。

Set-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup -Tag @{ project="demo"; env="test" }

$zone オブジェクトを使用してゾーンを指定する

この手法では、既存のゾーン オブジェクトが取得された後、タグが変更されたうえで、変更がコミットされます。 この方法では既存のタグを保持できます。

# Get the zone object
$zone = Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

# Remove an existing tag
$zone.Tags.Remove("project")

# Add a new tag
$zone.Tags.Add("status","approved")

# Commit changes
Set-AzDnsZone -Zone $zone

$zone オブジェクトで Set-AzDnsZone を使用すると、同時変更が上書きされないように Etag チェックが使用されます。 オプションの -Overwrite スイッチを使用すると、これらのチェックを抑制できます。

DNS ゾーンの削除

DNS ゾーンを削除するには、Remove-AzDnsZone コマンドレットを使用します。

Note

DNS ゾーンを削除すると、ゾーン内の DNS レコードもすべて削除されます。 この操作を元に戻すことはできません。 DNS ゾーンを使用している場合、ゾーンを削除すると、ゾーンを使用するサービスは機能しなくなります。

ゾーンを誤って削除しないようにするには、「DNS ゾーンとレコードを保護する」をご覧ください。

DNS ゾーンを削除するには、次の 2 つの方法のいずれかを使用します。

ゾーン名とリソース グループ名を使用してゾーンを指定する

Remove-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

$zone オブジェクトを使用してゾーンを指定する

削除するゾーンを指定するには、Get-AzDnsZone によって返された $zone オブジェクトを使用します。

$zone = Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup
Remove-AzDnsZone -Zone $zone

ゾーン オブジェクトは、パラメーターとして渡す代わりに、パイプすることもできます。

Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup | Remove-AzDnsZone

Set-AzDnsZone と同様に、$zone オブジェクトを使用してゾーンを指定すると、Etag チェックによって同時変更の削除を防止することができます。 これらのチェックを抑制するには、-Overwrite スイッチを使用します。

確認のプロンプト

New-AzDnsZoneSet-AzDnsZone、および Remove-AzDnsZone コマンドレットは、いずれも確認のプロンプトをサポートしています。

New-AzDnsZoneSet-AzDnsZone の両方が、$ConfirmPreference PowerShell 設定変数の値が Medium 以下である場合に、確認のプロンプトを表示します。 DNS ゾーンを削除すると望ましくない状態が発生する可能性があるため、Remove-AzDnsZone コマンドレットは、$ConfirmPreference PowerShell 変数の値が None 以外の場合に確認のプロンプトを表示します。

$ConfirmPreference の既定値は High であるため、既定では Remove-AzDnsZone のみが確認のプロンプトを表示します。

現在の $ConfirmPreference 設定は -Confirm パラメーターを使用してオーバーライドできます。 -Confirm または -Confirm:$True を指定した場合は、コマンドレットによって実行前に確認のプロンプトが表示されます。 -Confirm:$False を指定した場合は、コマンドレットによって確認のプロンプトが表示されません。

-Confirm$ConfirmPreference の詳細については、「About Preference Variables (設定変数について)」を参照してください。

次のステップ

DNS ゾーンでレコード セットとレコードを管理する方法についてはこちらをご覧ください。
Azure DNS にドメインを委任する方法についてはこちらをご覧ください。
Azure DNS PowerShell のリファレンス ドキュメントを確認します。