Azure DNSの料金体系を完全解説!クエリ数とゾーン数から算出するコスト計算ガイド
生徒
「自社のドメインをAzure(アジュール)で管理したいのですが、Azure DNS(アジュール ディーエヌエス)の料金って高いんでしょうか?」
先生
「Azure DNSは使った分だけ支払う従量課金制(じゅうりょうかきんせい)なので、小規模なサイトなら非常に安く抑えられますよ。」
生徒
「具体的に、何に対してお金がかかるのか計算方法が知りたいです!」
先生
「主な要素は『ホストされているゾーンの数』と『クエリの数』の2つです。初心者の方でも計算できるように詳しく解説しますね!」
1. Azure DNSとは?基本的な仕組みを解説
Azure DNS(アジュール ディーエヌエス)とは、Microsoft(マイクロソフト)が提供するクラウドサービス「Azure」の一部で、ドメイン名を管理・運用するためのサービスです。DNS(Domain Name System:ドメイン ネーム システム)は、インターネット上の住所である「IPアドレス」と、私たちが普段目にする「example.com」のようなドメイン名を結びつける、いわばインターネットの電話帳のような役割を果たしています。
Azure DNSを利用する最大のメリットは、世界中に配置されたネームサーバー(名前解決を行うサーバー)ネットワークを利用できるため、高速かつ高い信頼性(可用性)を確保できる点にあります。また、Azureの他のサービス(仮想マシンやWebアプリなど)と同じポータル画面で一元管理できるため、インフラエンジニアにとっても非常に便利なツールです。
ちなみに、Azure DNSは「ドメインの登録(取得)」を行うサービスではなく、すでに持っているドメインを「運用・管理」するためのサーバーを提供するサービスであるという点に注意しましょう。お名前.comやムームードメインなどで取得したドメインを、Azureの高性能なサーバーで動かすというイメージです。
2. 料金を決定する2つの大きな要素
Azure DNSのコスト計算は、非常にシンプルです。複雑な初期費用や契約期間の縛りはなく、以下の2つの合計で月額料金が決まります。
- ホストされているDNSゾーンの数:管理しているドメインの数。
- DNSクエリの数:そのドメインに対して、世界中からアクセス(問い合わせ)があった回数。
この2つの項目が、月々の請求書に反映されます。例えば、アクセスが全くない月でも「ゾーンの維持費」は発生しますし、逆にアクセスが急増した月は「クエリ数」に応じて料金が変動します。これを従量課金制と呼びます。予期せぬ出費を防ぐためにも、それぞれの単価を理解しておくことが大切です。
3. ゾーン数に応じた課金(固定費的な側面)
「ゾーン」とは、特定のドメイン(例:example.com)に対するDNSレコードの集まりを指します。Azure DNSでは、このゾーンを1つ作成するごとに月額料金が発生します。
現在の標準的な価格設定では、最初の25ゾーンまでは1ゾーンあたり月額約60円(0.50ドル)程度です。25ゾーンを超える分については、1ゾーンあたりの単価が安くなる仕組みになっています。なお、この料金は日割り計算されるため、月の途中でゾーンを削除した場合は、保持していた時間分だけが請求されます。
初心者の場合、まずは1つのドメインから始めることが多いでしょうから、固定費として月額数十円程度と考えておけば間違いありません。非常にリーズナブルですね。
4. DNSクエリ数に応じた課金(変動費的な側面)
「クエリ」とは、ユーザーがあなたのWebサイトを訪れようとしたときに、ブラウザがAzure DNSに対して「このドメインのIPアドレスを教えてください」と問い合わせるリクエストのことです。この問い合わせ回数に応じて料金が発生します。
課金単位は「100万クエリ」ごととなっており、最初の10億クエリまでは、100万クエリにつき約48円(0.40ドル)程度です。個人のブログや小規模なコーポレートサイトであれば、月間に数百万回もアクセスが来ることは稀ですので、ここでの費用も数十円から数百円程度に収まることが一般的です。
ただし、世界中から大量のアクセスがある大規模サービスや、DNSを利用した特殊なシステムを構築する場合は、このクエリ数が膨大になる可能性があるため注意が必要です。
5. 具体的なコスト計算シミュレーション
それでは、具体的にいくらかかるのか、計算例を見てみましょう。例として、2つのドメインを運用し、合計で月に200万回のクエリが発生した場合を想定します。(1ドル150円で換算した概算です)
| 項目 | 計算式 | 概算費用(円) |
|---|---|---|
| ゾーン料金(2つ分) | 0.50ドル * 2ゾーン | 約150円 |
| クエリ料金(200万回) | 0.40ドル * 2(100万単位) | 約120円 |
| 合計月額料金 | 150円 + 120円 | 約270円 |
このように、月額数百円という非常に低コストで、Microsoftの堅牢なDNS基盤を利用できることがわかります。これなら初心者の方でも安心して導入できますね。
6. Azure CLIを使ってDNSゾーンを確認する方法
Azureの操作はブラウザ(Azureポータル)からも可能ですが、コマンドラインインターフェース(CLI)を使うと効率的です。現在のゾーン一覧を確認するコマンドを紹介します。エンジニアを目指すなら覚えておくと便利です。
az network dns zone list --output table
Name ResourceGroup IsPrivate RegistrationVirtualNetworks ResolutionVirtualNetworks
----------- ------------- ----------- ----------------------------- ---------------------------
example.com MyResourceGroup False None None
testsite.net MyResourceGroup False None None
上記のコマンドを実行すると、現在作成されているゾーンの一覧が表示されます。これにより、今いくつのゾーンに対して課金が発生しているかを一目で把握できます。
7. PowerShellを利用したレコードセットの作成
Windowsユーザーによく使われるPowerShell(パワーシェル)を使って、新しいレコードを追加する例です。DNSレコードとは、ドメイン名とIPアドレスの対応ルールのことです。
$rs = New-AzDnsRecordSet -Name "www" -RecordType "A" -ResourceGroupName "MyRG" -ZoneName "example.com" -Ttl 3600
Add-AzDnsRecordConfig -RecordSet $rs -Ipv4Address "1.2.3.4"
Set-AzDnsRecordSet -RecordSet $rs
このスクリプトでは、「www.example.com」に「1.2.3.4」というIPアドレスを割り当てています。こうした設定作業自体には料金はかかりませんが、正しく設定してクエリが発生することで、前述のクエリ課金が計算されるようになります。
8. データベースでのコスト管理イメージ
Azure内部では、どのリソースがどれだけ使われたかがデータベースのように管理されています。簡易的なイメージをSQL形式で表現すると、以下のようなデータに基づいて請求額が計算されます。
id | resource_name | zone_count | query_count_millions | billing_month
---+---------------+------------+----------------------+---------------
1 | DnsService_A | 1 | 0.5 | 2026-03
2 | DnsService_B | 3 | 12.0 | 2026-03
3 | DnsService_C | 10 | 150.0 | 2026-03
例えば、上記のID 2のユーザーの料金を算出するクエリを考えてみましょう。
SELECT
resource_name,
(zone_count * 0.50) AS zone_price_usd,
(query_count_millions * 0.40) AS query_price_usd,
((zone_count * 0.50) + (query_count_millions * 0.40)) AS total_price_usd
FROM azure_billing_data
WHERE id = 2;
実行結果は以下のようになります。
resource_name | zone_price_usd | query_price_usd | total_price_usd
--------------+----------------+-----------------+-----------------
DnsService_B | 1.50 | 4.80 | 6.30
このように、システムが自動的に使用量を集計し、単価を掛け合わせて最終的な支払額を決定しています。
9. プライベートDNSとパブリックDNSの違い
Azure DNSには、インターネット上に公開する「パブリックDNS」と、仮想ネットワーク内のみで利用する「プライベートDNS」の2種類があります。料金体系は基本的に同じですが、利用シーンが異なります。
パブリックDNSは、一般のユーザーがサイトを見るために使われます。一方、プライベートDNSは、社内システムやクラウド内部のサーバー同士が名前解決をするために使われます。プライベートDNSの場合、外部からの攻撃によるクエリ急増のリスクが低いため、予算管理がより容易になるという特徴があります。
どちらも「ゾーン数」と「クエリ数」で計算される点は変わりません。自分の用途がどちらに当てはまるかを確認しておきましょう。
10. 費用を抑えるためのポイント
最後に、Azure DNSの運用コストを賢く節約するためのコツをいくつか紹介します。
まず1つ目は、「不要なゾーンはすぐに削除する」ことです。テスト用に作成したドメイン設定をそのまま放置しておくと、たとえアクセスがなくても月額のゾーン料金が発生し続けてしまいます。プロジェクトが終わったら、Azure CLIやポータルからクリーンアップする習慣をつけましょう。
2つ目は、「TTL(Time To Live)の設定」です。TTL(ティーティーエル)とは、名前解決の結果をキャッシュ(一時保存)しておく時間のことです。TTLを長めに設定すると、ユーザーのブラウザやプロバイダーのサーバーに情報が長く残るため、Azure DNSへの直接的なクエリ回数が減り、結果としてクエリ料金を抑えることができます。
ただし、TTLを長くしすぎると、サーバーのIPアドレスを変更したときに情報の反映が遅くなるというデメリットもあります。通常は3600秒(1時間)程度が推奨されますが、頻繁に設定を変えない安定したサイトであれば、もう少し長めに設定することを検討しても良いでしょう。
まとめ
これまでに解説してきた内容を振り返ると、Azure DNS(アジュール ディーエヌエス)の料金体系は非常にシンプルで、透明性が高いことがわかります。主なコスト要因は「ホストされているDNSゾーンの数」と「DNSクエリの数」の2点に集約されます。固定費としてのゾーン料金は、最初の25ゾーンまで1ゾーンあたり月額約0.50ドル(約75円程度)と極めて安価に設定されており、大規模なドメイン管理を行わない限り、家計やプロジェクトの予算を圧迫することはありません。
また、変動費となるクエリ料金についても、100万クエリ単位での課金(約0.40ドル)となっており、一般的なWebサイトやブログのアクセス規模であれば、月額数百円程度でMicrosoftの堅牢なインフラを享受できる点が大きな魅力です。さらに、Azure CLIやPowerShellを活用した自動化、SQLライクなデータ管理の考え方を取り入れることで、エンジニアとしてのスキルアップと同時に、効率的なリソース運用が可能になります。
運用面では、不要なゾーンを放置しないことや、TTL(キャッシュ有効期限)を適切に設定することで、さらにコストを最適化できる余地があります。クラウドサービスの利点である「使った分だけ支払う」という特性を最大限に活かし、高可用性と低コストを両立させたドメイン運用を目指しましょう。Azure DNSは、初心者からプロフェッショナルまで、あらゆるフェーズのユーザーにとって最適なネームサーバー環境を提供してくれます。
C#によるクエリ料金計算のシミュレーション実装
実際にプログラムで料金計算のロジックを組む場合のサンプルを紹介します。C#(シーシャープ)を使用して、ゾーン数とクエリ数から月額費用を算出する簡単なクラスを作成してみましょう。
using System;
namespace AzureBillingApp
{
class DnsCalculator
{
public static void Main(string[] args)
{
// 設定値(1ドル150円換算)
double exchangeRate = 150.0;
double zoneUnitPrice = 0.50;
double queryUnitPricePerMillion = 0.40;
// 使用量
int hostedZones = 3;
long totalQueries = 5500000; // 550万クエリ
// 計算ロジック
double zoneCostUsd = hostedZones * zoneUnitPrice;
double queryCostUsd = (totalQueries / 1000000.0) * queryUnitPricePerMillion;
double totalUsd = zoneCostUsd + queryCostUsd;
double totalJpy = totalUsd * exchangeRate;
Console.WriteLine("--- Azure DNS 料金見積結果 ---");
Console.WriteLine($"ゾーン数: {hostedZones}");
Console.WriteLine($"クエリ数: {totalQueries:N0}");
Console.WriteLine($"合計(USD): ${totalUsd:F2}");
Console.WriteLine($"合計(JPY): {totalJpy:N0}円");
}
}
}
このコードを実行すると、コンソールには以下のような見積結果が表示されます。
--- Azure DNS 料金見積結果 ---
ゾーン数: 3
クエリ数: 5,500,000
合計(USD): $3.70
合計(JPY): 555円
SQLによる利用状況データの分析
次に、複数のプロジェクトで利用しているAzure DNSの統計データをSQLで分析するケースを考えます。まずは、現在のデータベース内のテーブル状態を確認しましょう。
id | project_name | zone_count | query_count | region
---+--------------+------------+-------------+---------
1 | WebPortal | 1 | 1200000 | JapanEast
2 | TestingDev | 5 | 50000 | EastUS
3 | Enterprise | 20 | 45000000 | JapanEast
4 | PersonalBlog | 1 | 300000 | JapanWest
5 | BackupSite | 2 | 100000 | NorthEurope
このデータから、クエリ数が100万回を超えているプロジェクトを抽出し、日本リージョンのものに絞り込むSQLコードを記述します。
SELECT
project_name,
zone_count,
query_count
FROM dns_usage_stats
WHERE query_count > 1000000
AND region = 'JapanEast';
実行結果は以下の通りです。
project_name | zone_count | query_count
-------------+------------+-------------
WebPortal | 1 | 1200000
Enterprise | 20 | 45000000
Linuxコマンドでのリソース管理
運用現場では、Linux(リナックス)サーバーからAzure CLIを使用して、リソースグループ内のDNSゾーンを素早く特定することがよくあります。
az network dns zone list --resource-group MyProductionRG --query "[].{Name:name, ResourceGroup:resourceGroup}" -o table
Name ResourceGroup
-------------- ----------------
mycompany.com MyProductionRG
api.mycorp.jp MyProductionRG
このようにコマンドを活用することで、どのドメインに対して課金が発生しているかを即座にリストアップできます。
生徒
「先生、ありがとうございました!Azure DNSの料金が『ゾーン数』と『クエリ数』のたった2つで決まると知って、すごくスッキリしました。」
先生
「それは良かったです。複雑な基本料金がないので、初心者の方でも予算が立てやすいのがAzure DNSのいいところですね。」
生徒
「さっき教えてもらったC#の計算プログラムを動かしてみたら、自分の個人サイトだと月100円もいかない計算になりました。これなら安心して引っ越しできます!」
先生
「ええ、まさにその通りです。ただ、大規模なサイトだとクエリ数が数億回になることもあるので、その時はTTLの設定を調整して節約することを忘れないでくださいね。」
生徒
「はい!TTLはキャッシュの有効期限でしたよね。反映の速さとコストのバランスを考えて設定してみます。あと、Linuxコマンドのaz network dns zone listも便利そうなので、今のうちにメモしておきました!」
先生
「素晴らしい!コマンドでサッと確認できるエンジニアは現場でも重宝されますよ。SQLでのデータ集計の考え方も、将来的に複数のAzureリソースを管理するようになったら必ず役立ちます。一歩ずつ、クラウドマスターを目指しましょう!」
生徒
「頑張ります!まずは自分のテスト環境で、実際にゾーンを作ってレコードを追加するところから始めてみます!」