Azure CLI を使用して Azure DNS の DNS レコードおよびレコードセットを管理する

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

この記事の例では、Azure CLI のインストール、サインイン、DNS ゾーンの作成が既に完了していることを前提としています。

はじめに

Azure DNS で DNS レコードを作成する前に、まず、Azure DNS における DNS レコード セットでの DNS レコードの編成方法を理解する必要があります。

レコード名

Azure DNS では、相対名を使用してレコードを指定します。 "完全修飾" ドメイン名 (FQDN) にはゾーン名が含まれますが、"相対" 名には含まれません。 たとえば、contoso.com ゾーン内の相対レコード名 www によって、完全修飾レコード名 www.contoso.com が示されます。

DNS ゾーンのルート ("頂点") にある DNS レコードを apex (頂点) レコードと言います。 たとえば、DNS ゾーン contoso.com であれば、apex レコードの完全修飾名も contoso.com です (これを "ネイキッド" ドメインと呼ぶことがあります)。 慣例により、apex レコードを表すには相対名として \'\@\' を使用します。

レコードの種類

各 DNS レコードには名前と種類があります。 レコードは、含まれるデータによってさまざまな種類に分けられます。 最も一般的な種類は "A" レコードで、名前が IPv4 アドレスにマップされます。 また、"MX" レコードもよく使用される種類で、名前がメール サーバーにマップされます。

Azure DNS では、一般的な DNS レコードの種類である A、AAAA、CAA、CNAME、MX、NS、PTR、SOA、SRV、TXT をすべてサポートしています。 SPF レコードは TXT レコードを使用して表されることに注意してください。

レコード セット

場合によっては、特定の名前と種類の DNS レコードを複数作成する必要があることもあります。 たとえば、"www.contoso.com" という Web サイトが 2 つの異なる IP アドレスでホストされているとします。 この Web サイトには、IP アドレスごとに異なる A レコードが、合計 2 つ必要になります。 次に、レコード セットの例を示します。

www.contoso.com.        3600    IN    A    134.170.185.46
www.contoso.com.        3600    IN    A    134.170.188.221

Azure DNS は、"レコード セット" を使用してすべての DNS レコードを管理します。 レコード セット ("リソース" レコード セットとも呼ばれます) とは、1 つのゾーン内にある同じ名前、同じ種類の DNS レコードのコレクションです。 ほとんどのレコード セットには、1 つのレコードが含まれています。 ただし、上の例のように複数のレコードが含まれているレコード セットも珍しくはありません。

たとえば、ゾーン "contoso.com" に A レコード "www" が既に作成されているとします。この A レコードは IP アドレス "134.170.185.46" (上記の 1 つ目のレコード) を指しています。 2 つ目のレコードを作成する際は、追加のレコード セットを作成するのではなく、そのレコードを既存のレコード セットに追加します。

SOA レコードと CNAME レコードは例外です。 DNS 標準では、これらのレコードの種類で同じ名前を持つ複数のレコードを作成することが許可されていません。そのため、これらのレコード セットにはレコードを 1 つしか含めることができません。

Azure DNS における DNS レコードの詳細については、「DNS ゾーンとレコード」を参照してください。

DNS レコードを作成する

DNS レコードを作成するには、az network dns record-set <record-type> add-record コマンドを使用します (<record-type> は a、srv、txt など、レコードの種類です)。ヘルプについては、az network dns record-set --help を参照してください。

レコードを作成するときは、次の情報を指定する必要があります。

  • リソース グループ名
  • ゾーン名
  • レコード セット名
  • レコード タイプ

指定するレコード セット名は、ゾーン名を除いた相対名にする必要があります。 レコード セットがまだ存在していない場合は、このコマンドによって作成されます。 ただしこのコマンドでは、レコード セットが既に存在する場合、指定したレコードが追加されます。

新しいレコード セットが作成される場合は、既定の Time-to-Live (TTL) である 3600 が使用されます。 さまざまな TTL を使用する方法については、「DNS レコード セットを作成する」を参照してください。

次の例では、リソース グループ MyResourceGroup のゾーン contoso.comwww という A レコードを作成します。 A レコードの IP アドレスは、1.2.3.4 です。

az network dns record-set a add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name www --ipv4-address 1.2.3.4

ゾーンの頂点 (この場合は "contoso.com") にレコード セットを作成するには、レコード名 "\@\" (引用符を含みます) を使用します。

az network dns record-set a add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "@" --ipv4-address 1.2.3.4

DNS レコード セットを作成する

上記の例では、DNS レコードは既存のレコード セットに追加されるか、レコード セットが暗黙的に作成されました。 レコード セットは、レコードを追加する前に明示的に作成することもできます。 Azure DNS では、DNS レコードの作成前に DNS 名を予約するためのプレースホルダーとして機能する "空" のレコード セットがサポートされています。 空のレコード セットは、Azure DNS コントロール プレーンには表示されるものの、Azure DNS ネーム サーバーには表示されません。

レコード セットは、az network dns record-set <record-type> create コマンドを使用して作成します。 az network dns record-set <record-type> create --help を使用すると、ヘルプが表示されます。

レコード セットを明示的に作成すると、Time-To-Live (TTL) などのレコード セット プロパティとメタデータを指定することができます。 レコード セット メタデータを使用すると、アプリケーション固有のデータを、キーと値のペアとして各レコード セットに関連付けることができます。

次の例では、'A' タイプの空のレコード セットを作成しますが、--ttl パラメーター (短縮形は -l) を指定することで 60 秒間の TTL を設定します。

az network dns record-set a create --resource-group myresourcegroup --zone-name contoso.com --name www --ttl 60

次の例では、--metadata パラメーターを使用して、"dept=finance" と "environment=production" の 2 つのメタデータ エントリを含むレコード セットを作成します。

az network dns record-set a create --resource-group myresourcegroup --zone-name contoso.com --name www --metadata "dept=finance" "environment=production"

空のレコード セットが作成されたため、「DNS レコードの作成」で説明したように、azure network dns record-set <record-type> add-record を使用してレコードを追加することができます。

その他の種類のレコードの作成

先ほど "A" レコードの作成方法について詳しく説明しましたが、次の例では、Azure DNS でサポートされているその他の種類のレコードの作成方法を示します。

レコード データを指定するためのパラメーターは、レコードの種類によって異なります。 たとえば、種類 "A" のレコードの場合は、パラメーター --ipv4-address <IPv4 address> に IPv4 アドレスを指定します。 各レコードの種類のパラメーターは、az network dns record-set <record-type> add-record --help を使用して表示できます。

各ケースで、1 つのレコードの作成方法を説明します。 レコードは、既存のレコード セットまたは暗黙的に作成されたレコード セットに追加されます。 レコード セットを作成してレコード セット パラメーターを明示的に定義する方法の詳細については、「DNS レコード セットを作成する」を参照してください。

SOA は DNS ゾーンごとに作成および削除されるため、SOA レコード セットの作成例はありません。 SOA レコードを個別に作成または削除することはできません。 ただし、後の例に示すとおり、SOA を変更することはできます。

AAAA レコードの作成

az network dns record-set aaaa add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-aaaa --ipv6-address 2607:f8b0:4009:1803::1005

CAA レコードの作成

az network dns record-set caa add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-caa --flags 0 --tag "issue" --value "ca1.contoso.com"

CNAME レコードを作成する

Note

DNS 標準では、ゾーンの頂点 (--Name "@") に CNAME レコードを作成することは許可されていません。また、複数のレコードを含むレコード セットの作成も許可されていません。

詳細については、「CNAME レコード」を参照してください。

az network dns record-set cname set-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-cname --cname www.contoso.com

MX レコードの作成

この例では、レコード セット名 "@" を使用してゾーンの頂点 (この場合は "contoso.com" ) に MX レコードを作成します。

az network dns record-set mx add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "@" --exchange mail.contoso.com --preference 5

NS レコードの作成

az network dns record-set ns add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-ns --nsdname ns1.contoso.com

PTR レコードの作成

ここで "my-arpa-zone.com" は IP 範囲を表す ARPA ゾーンを表します。 このゾーンの各 PTR レコード セットは、この IP の範囲内の IP アドレスに対応します。 レコード名「10」は、このレコードによって表されるこの IP 範囲内の IP アドレスの最後のオクテットです。

az network dns record-set ptr add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name my-arpa.zone.com --ptrdname myservice.contoso.com

SRV レコードの作成

SRV レコード セットを作成するときは、レコード セット名に _service_protocol を指定します。 ゾーンの頂点で SRV レコード セットを作成するときは、レコード セット名に "@" を含める必要はありません。

az network dns record-set srv add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name _sip._tls --priority 10 --weight 5 --port 8080 --target sip.contoso.com

TXT レコードの作成

次の例は、TXT レコードを作成する方法を示しています。 TXT レコードでサポートされている文字列の最大長の詳細については、TXT レコードに関するセクションを参照してください。

az network dns record-set txt add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-txt --value "This is a TXT record"

レコード セットの取得

既存のレコード セットを取得するには、 az network dns record-set <record-type> showを使用します。 az network dns record-set <record-type> show --help を使用すると、ヘルプが表示されます。

レコードまたはレコード セットを作成するとき、指定するレコード セット名は相対名にする必要があります。 この名前にはゾーン名は含まれません。 レコードの種類のほか、レコード セットを含むゾーンと、ゾーンを含むリソース グループも指定する必要があります。

次の例では、リソース グループ MyResourceGroup のゾーン contoso.com から www という種類 A のレコードを取得します。

az network dns record-set a show --resource-group myresourcegroup --zone-name contoso.com --name www

レコード セットの一覧を表示する

az network dns record-set list コマンドを使用すると、DNS ゾーンの全レコードを一覧表示できます。 az network dns record-set list --help を使用すると、ヘルプが表示されます。

この例では、リソース グループ MyResourceGroup のゾーン contoso.com 内のすべてのレコード セットを返します。

az network dns record-set list --resource-group myresourcegroup --zone-name contoso.com

この例では、指定したレコードの種類 (この場合は 'A' レコード) に一致するすべてのレコード セットが返されます。

az network dns record-set a list --resource-group myresourcegroup --zone-name contoso.com 

既存のレコード セットへのレコードの追加

az network dns record-set <record-type> add-record は、新しいレコード セットのレコードの作成と、既存のレコード セットへのレコードの追加の両方に、使用することができます。

詳細については、上述の「DNS レコードの作成」と「その他の種類のレコードの作成」を参照してください。

既存のレコード セットからのレコードの削除

既存のレコード セットからレコードを削除するには、az network dns record-set <record-type> remove-record を使用します。 az network dns record-set <record-type> remove-record -h を使用すると、ヘルプが表示されます。

このコマンドは、DNS レコードをレコード セットから削除します。 レコード セットの最後のレコードを削除すると、レコード セット自体も削除されます。 代わりに空のレコード セットを維持するには、--keep-empty-record-set オプションを使用します。

az network dns record-set <record-type> add-record コマンドを使用するときは、削除されるレコードと削除元のゾーンを指定する必要があります。 このパラメーターについては、上述の「DNS レコードの作成」と「その他の種類のレコードの作成」で説明しています。

次の例では、リソース グループ MyResourceGroup のゾーン contoso.comwww というレコード セットから値 '1.2.3.4' を持つ A レコードを削除します。

az network dns record-set a remove-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "www" --ipv4-address 1.2.3.4

既存のレコード セットの変更

各レコード セットには、Time-to-Live (TTL)メタデータ、および DNS レコードが含まれています。 次のセクションでは、これらの各プロパティを変更する方法を説明します。

A、AAAA、CAA、MX、NS、PTR、SRV、TXT レコードを変更するには

種類が A、AAAA、CAA、MX、NS、PTR、SRV、TXT の既存のレコードを変更するには、最初に新しいレコードを追加してから既存のレコードを削除する必要があります。 レコードを削除し追加する方法の詳細な手順については、この記事の前半のセクションを参照してください。

次の例では、'A' レコードを IP アドレス 1.2.3.4 から IP アドレス 5.6.7.8 に変更する方法を示します。

az network dns record-set a add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name www --ipv4-address 5.6.7.8
az network dns record-set a remove-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name www --ipv4-address 1.2.3.4

ゾーンの頂点 (--Name "@"、引用符を含む) に自動的に作成された NS レコード セットのレコードを追加、削除、または変更することはできません。 このレコード セットで許可されている変更は、レコード セットの TTL とメタデータの変更のみです。

CNAME レコードを変更するには

その他のほとんどのレコードの種類とは異なり、CNAME レコード セットはレコードを 1 つだけ含むことができます。 そのため、他のレコードの種類のように、新しいレコードを追加して既存のレコードを削除する方法で現在の値を置換することはできません。

代わりに、CNAME レコードを変更するには、az network dns record-set cname set-record を使用します。 az network dns record-set cname set-record --help を使用すると、ヘルプが表示されます。

例では、リソース グループ MyResourceGroup のゾーン contoso.com の CNAME レコード セット www を変更して、既存の値ではなく 'www.fabrikam.net' を指すようにします。

az network dns record-set cname set-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name test-cname --cname www.fabrikam.net

SOA レコードを変更するには

その他のほとんどのレコードの種類とは異なり、SOA レコード セットはレコードを 1 つだけ含むことができます。 そのため、他のレコードの種類のように、新しいレコードを追加して既存のレコードを削除する方法で現在の値を置換することはできません。

代わりに、SOA レコードを変更するには、az network dns record-set soa update を使用します。 az network dns record-set soa update --help を使用すると、ヘルプが表示されます。

次の例は、ゾーン contoso.com の SOA レコードの 'email' プロパティを設定する方法を示します。

az network dns record-set soa update --resource-group myresourcegroup --zone-name contoso.com --email admin.contoso.com

ゾーンの頂点にある NS レコードを変更するには

ゾーンの頂点にある NS レコード セットは各 DNS ゾーンで自動的に作成されます。 ゾーンに割り当てられている Azure DNS ネーム サーバーの名前が含まれています。

複数の DNS プロバイダーによる共同ホスト ドメインをサポートする目的で、この NS レコード セットにネーム サーバーを追加できます。 このレコード セットの TTL とメタデータを変更することもできます。 ただし、あらかじめ入力されている Azure DNS ネーム サーバーを削除または変更することはできません。

この制限は、ゾーンの頂点にある NS レコード セットにのみ適用されます。 (子ゾーンの委任に使用される) ゾーンの他の NS レコード セットは制約なしで変更できます。

次の例は、ゾーンの頂点にある NS レコード セットにネーム サーバーを追加する方法を示しています。

az network dns record-set ns add-record --resource-group myresourcegroup --zone-name contoso.com --record-set-name "@" --nsdname ns1.myotherdnsprovider.com 

既存のレコード セットの TTL を変更するには

既存のレコード セットの TTL を変更するには、azure network dns record-set <record-type> update を使用します。 azure network dns record-set <record-type> update --help を使用すると、ヘルプが表示されます。

次の例では、レコード セットの TTL を変更する方法を示します。ここでは 60 秒に変更します。

az network dns record-set a update --resource-group myresourcegroup --zone-name contoso.com --name www --set ttl=60

既存のレコード セットのメタデータを変更するには

レコード セット メタデータを使用すると、アプリケーション固有のデータを、キーと値のペアとして各レコード セットに関連付けることができます。 既存のレコード セットのメタデータを変更するには、az network dns record-set <record-type> update を使用します。 az network dns record-set <record-type> update --help を使用すると、ヘルプが表示されます。

次の例は、"dept=finance" と "environment=production" という 2 つのメタデータ エントリを含むレコード セットを変更する方法を示しています。 既存のメタデータは指定した値に置換されます。

az network dns record-set a update --resource-group myresourcegroup --zone-name contoso.com --name www --set metadata.dept=finance metadata.environment=production

レコード セットの削除

レコード セットは az network dns record-set <record-type> delete コマンドで削除できます。 azure network dns record-set <record-type> delete --help を使用すると、ヘルプが表示されます。 レコード セットを削除すると、そのレコード セット内のレコードもすべて削除されます。

Note

ゾーンの頂点 (--name "@") の SOA および NS レコード セットを削除することはできません。 これらはゾーンの作成時に自動的に作成され、ゾーンを削除すると自動的に削除されます。

次の例では、リソース グループ MyResourceGroup のゾーン contoso.com から www という種類 A のレコード セットを削除します。

az network dns record-set a delete --resource-group myresourcegroup --zone-name contoso.com --name www

削除操作の確認を求めるプロンプトが表示されます。 このプロンプトを抑制するには、--yes スイッチを使用します。

次のステップ

Azure DNS におけるゾーンとレコードについて確認します。
Azure DNS の使用時にゾーンとレコードを保護する方法について確認します。