2026年6月11日
2026年6月11日
Azure DNS でレコードを追加する手順|レコードセットの考え方・Azure CLI での種類別の追加・反映の確認
Azure DNS でレコードを追加するときは、「同じ名前と種類のレコードは1つのレコードセットにまとまり、TTL もレコードセット単位で決まる」という仕組みを先に押さえておくと、操作で迷わなくなります。この記事では、Azure ポータルと Azure CLI での追加方法を、A・CNAME・MX・TXT・CAA の種類別に説明し、ゾーンの頂点の扱い、エイリアスレコード、削除や変更で気をつける点、Azure DNS のネームサーバーに直接問い合わせる確認方法までをまとめます。
Azure ポータルの表記や Azure CLI の引数は更新されることがあります(2026年10月現在)。以下の CLI の例は代表的な書き方なので、実行前に az network dns record-set a add-record --help などで手元のバージョンの説明を確認してください。本番のゾーンを変更する前には、後述の方法で現在のレコードを書き出しておくと安心です。
レコードセットという単位を理解する
Azure DNS では、レコードを「レコードセット」の中に入れて管理します。レコードセットは「名前(www など)と種類(A など)の組み合わせ」ごとに1つあり、その中に1つ以上の値が入ります。たとえば www の A レコードに IP を2つ登録したい場合は、www という A のレコードセットに値を2つ追加します。
TTL はレコードセットごとに1つです。同じ名前と種類で値ごとに TTL を変えることはできません。また、名前の指定はゾーン名を除いた相対名で行い、ゾーンの頂点(example.com そのもの)は @ で表します。
ゾーンの頂点には、ゾーン作成時に NS と SOA のレコードセットが自動で作られます。NS レコードセットには、このゾーンに割り当てられた Azure DNS のネームサーバーが入っており、レジストラに登録する値でもあります。意図せず書き換えると委任が壊れるので、通常は触りません。
作業前に権限と現在の状態を確認する
レコードを追加するには、ゾーンに対する書き込み権限が必要です。Azure の組み込みロールには DNS ゾーンを扱うためのロール(DNS Zone Contributor)があり、レコードの変更だけを任せたい人やサービスプリンシパルには、リソースグループ全体ではなくゾーンに限って割り当てる方法が使えます。
変更前に、現在のレコードを一覧と書き出しで残しておきます。
# ゾーンのレコードセット一覧
az network dns record-set list \
--resource-group my-rg --zone-name example.com -o table
# ゾーンファイル形式で書き出して保管する
az network dns zone export \
--resource-group my-rg --name example.com \
--file-name example.com.zone.bak
書き出したファイルは、誤って削除したときに値を確かめて戻す材料になります。
Azure ポータルで追加する
ポータルでは、DNS ゾーンの画面を開き、レコードセットを追加する操作を選びます。入力する主な項目は次のとおりです。
- 名前:サブドメイン部分だけを入れます(
www)。頂点は空欄または@で指定します。 - 種類:A、AAAA、CNAME、MX、TXT、CAA など
- エイリアスのレコードセットにするか:Azure のリソースを指す場合の選択(後述)
- TTL:レコードセット全体の TTL
- 値:IP アドレスやホスト名など。種類によって入力欄が変わります
すでに同じ名前と種類のレコードセットがある場合は、新しく作るのではなく、既存のレコードセットを開いて値を追加します。
Azure CLI で種類別に追加する
CLI の add-record は、レコードセットがなければ作成し、あれば値を追加します。TTL を既定値以外にしたい場合は、先に create で TTL を指定してレコードセットを作ってから値を追加すると、意図した TTL で作れます。
A レコード
# TTL 300 のレコードセットを作ってから IP を追加する
az network dns record-set a create \
--resource-group my-rg --zone-name example.com \
--name www --ttl 300
az network dns record-set a add-record \
--resource-group my-rg --zone-name example.com \
--record-set-name www --ipv4-address 203.0.113.10
頂点に A レコードを置く場合は --record-set-name @ を指定します。IPv6 の AAAA は az network dns record-set aaaa add-record と --ipv6-address で同じように追加します。
CNAME レコード
az network dns record-set cname set-record \
--resource-group my-rg --zone-name example.com \
--record-set-name blog --cname target.example.net
CNAME は1つの名前に1つの値しか持てないため、add-record ではなく set-record を使います。CNAME を置いた名前には、ほかの種類のレコードを同時に置けません。また、頂点(@)には CNAME を作れないため、頂点を別のホスト名へ向けたい場合は、A レコードで IP を指定するか、次に説明するエイリアスレコードを使います。
MX レコード
az network dns record-set mx add-record \
--resource-group my-rg --zone-name example.com \
--record-set-name @ --exchange mail.example.net --preference 10
--preference は数字が小さいほど優先されます。予備の受信サーバーがある場合は、同じレコードセットに別の優先度で追加します。
TXT レコード
az network dns record-set txt add-record \
--resource-group my-rg --zone-name example.com \
--record-set-name @ --value "v=spf1 include:_spf.example.net ~all"
az network dns record-set txt add-record \
--resource-group my-rg --zone-name example.com \
--record-set-name _dmarc --value "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
頂点の TXT レコードセットには、SPF のほかにサービスの所有確認用の値なども同居します。SPF(v=spf1 で始まる値)は1つの名前に1つだけにします。2つあると受信側で SPF の評価が失敗扱いになることがあるため、送信サービスを増やすときは既存の SPF に include を足して1つにまとめます。DKIM の長い公開鍵を追加したあとは、改行や余計な空白が混ざっていないかを確認します。
CAA レコード
az network dns record-set caa add-record \
--resource-group my-rg --zone-name example.com \
--record-set-name @ --flags 0 --tag issue --value "letsencrypt.org"
CAA は、そのドメインの証明書を発行してよい認証局を指定するレコードです。追加すると、指定していない認証局からは発行できなくなるため、今使っている証明書の発行元を確認してから登録します。
エイリアスレコードで Azure のリソースを指す
Azure DNS のエイリアスレコードは、IP やホスト名の代わりに Azure のリソース(パブリック IP アドレス、Traffic Manager のプロファイル、Azure Front Door など)を参照するレコードです。参照先のリソースの IP が変わっても、レコードを書き換えずに追従します。頂点に CNAME を置けない制約を回避する手段としても使われます。
az network dns record-set a create \
--resource-group my-rg --zone-name example.com --name @ \
--target-resource "/subscriptions/<subscription-id>/resourceGroups/my-rg/providers/Microsoft.Network/publicIPAddresses/my-ip"
参照できるリソースの種類は変わることがあるため、使う前に公式ドキュメントで対象を確認してください。参照先のリソースを削除するとレコードは空の応答になるので、リソースの削除と DNS の整理をセットで行います。
変更と削除で気をつけること
値を消すときは remove-record を使います。
az network dns record-set a remove-record \
--resource-group my-rg --zone-name example.com \
--record-set-name www --ipv4-address 203.0.113.10
最後の値を消すと、既定ではレコードセットごと削除されます。レコードセットを残しておきたい場合は --keep-empty-record-set を付けます。IP を入れ替えるときは、新しい値を先に追加してから古い値を消すと、途中で応答が空になる時間を作らずに済みます。
TTL を後から変える方法は、ポータルではレコードセットの編集画面、CLI では update 系のコマンドで行います。CLI の引数はバージョンによって書き方が異なることがあるため、--help で確認してください。本番のゾーンを誤って削除しないよう、ゾーンのリソースに削除ロックをかけておく運用もあります。
反映を確認する
追加したら、まず Azure DNS のネームサーバーへ直接問い合わせます。ゾーンに割り当てられたネームサーバーは次のコマンドで確認できます。
az network dns zone show \
--resource-group my-rg --name example.com \
--query nameServers -o tsv
# 表示されたネームサーバーの1つに直接問い合わせる(名前は置き換える)
dig @ns1-01.azure-dns.com www.example.com A +short
dig @ns1-01.azure-dns.com example.com MX +short
dig @ns1-01.azure-dns.com example.com TXT +short
ここで答えが返れば、Azure DNS 側の登録は済んでいます。公開 DNS(dig @1.1.1.1 など)で古い値が返る場合は、以前の TTL が切れるのを待っている状態です。ネームサーバーへの直接の問い合わせでも答えが返らないときは、名前の入力(相対名か、@ か)、リソースグループやゾーンの取り違え、レジストラに登録したネームサーバーがこのゾーンのものか、の順に確認します。
限定公開の名前を扱う Azure Private DNS ゾーンでは、コマンドが az network private-dns record-set a add-record のように別系統になり、仮想ネットワークへのリンクがないと名前解決されません。公開ゾーンと混同しないよう注意してください。
まとめ
- Azure DNS のレコードは「名前と種類」ごとのレコードセットにまとまり、TTL もレコードセット単位です。
- CLI では A・MX・TXT・CAA は
add-record、CNAME はset-recordを使い、頂点は@で指定します。 - 頂点を Azure のリソースへ向けるときはエイリアスレコードが使えます。
- 最後の値を消すとレコードセットごと消える点と、SPF を1つにまとめる点に注意します。
- 変更前にゾーンを書き出し、変更後は Azure DNS のネームサーバーへ直接問い合わせて確認します。