ご注意
この記事は 2014年12月26日 に書かれたものです。内容が古い可能性がありますのでご注意ください。
こんにちは。
GoogleのAPIを隔週で片っ端から紹介する、GoogleAPI千本ノック
第三回目は、Google Cloud DNS APIです。
目次
Google Cloud DNS とは?
Googleが提供する高いパフォーマンスを特徴とするDNSサーバを使用して、ゾーン・レコードの設定と管理が行えます。お名前.com等でも無料のDNSサーバは提供されており、ゾーン・レコードの設定・管理が行えますが、それらをGoogle Cloud DNSに移譲することができます。また、AWSにも同様のサービス(Amazon Route 53)があります。有料になりますがメリットは応答速度・信頼性の向上・より詳細な設定が可能なこと等です。
※レジストラとしての機能はGoogleドメインです。
CLIとAPI、最近はDevelopers Consoleでも設定ができるようになりました。
APIでプログラマブルに設定できるという点が、他にない良い点だと思われます。
今日は、このサービスのAPIを叩いてどんな感じで使えるのか試してみましょう。
料金体系
クエリ数とゾーン数によって料金がかかる体系になっています。
Google Cloud DNS (Google Cloud Platform)
クエリ数 0~10億クエリまでは、100万クエリ毎に$0.40/月
クエリ数 10億クエリ以上では、100万クエリ毎に$0.20/月加算されます。
Managed Zones数 0~25ゾーンまでは、1ゾーン毎に$0.20/月
Managed Zones数 26ゾーン以上では、1ゾーン毎に$0.10/月加算されます。
Amazon Route 53 (Amazon Web Services)
参考までに確認しましたが、Amazon Web Servicesでもゾーンコストが若干高めになっていますがほぼ同じ料金になっていました。
(標準的)クエリ数 0~10億クエリまでは、100万クエリ毎に$0.40/月
(標準的)クエリ数 10億クエリ以上では、100万クエリ毎に$0.20/月加算されます。
ホストゾーン数 0~25ゾーンまでは、1ゾーン毎に$0.50/月
ホストゾーン数 26ゾーン以上では、1ゾーン毎に$0.10/月加算されます。
OAuth2.0のスコープ
Google Cloud DNS APIにアクセスする際には、次の3種類のスコープを使用します。
スコープ | スコープ概要 | |
(1) | https://www.googleapis.com/ auth/cloud-platform |
Google Cloud Platform サービスを介して利用者のデータを確認・管理するスコープ |
(2) | https://www.googleapis.com/ auth/ndev.clouddns.readonly |
Google Cloud DNS によってホストされたDNSレコードを確認するのみのスコープ |
(3) | https://www.googleapis.com/ auth/ndev.clouddns.readwrite |
Google Cloud DNSによってホストされたDNSレコードを確認・管理するスコープ |
APIのメソッド
Google Cloud DNSは、ゾーンと レコードの2種類のリソースから構成されていて、ゾーンは1つのドメインを管理し、その中で各レコードを管理します。順序としては、dns.managedZones でゾーンを生成し、dns.changes でレコードを追加していきます。
レコードのタイプは A, AAAA, CNAME, MX, NAPTR, NSPTR, SOA, SFP, SRV, TXT が指定できます。
メソッド | 操作 | スコープ |
dns.changes.create | レコードを追加・削除することができます。 | (1),(3) |
dns.changes.get, dns.changes.list |
レコード一覧を返します。 | (1),(2),(3) |
dns.managedZones.create, dns.managedZones.delete |
ゾーンを追加・削除します。 | (1),(3) |
dns.managedZones.get, dns.managedZones.list |
ゾーンの情報を返します。 | (1),(2),(3) |
dns.projects.get | プロジェクト内のAPI制約状態を返します。 | (1),(2),(3) |
APIを叩いてみた
ではAPIを叩いて実際にドメインが反映されるか試してみたいと思います。
手順は、最初にdns.managedZonesで1つのドメイン管理リソースを作り、dns.changesでAレコードを追加し、ブラウザからWebページが反映されているか確認します。
メソッド:dns.managedZones.create
1つのドメインを登録して、managedZonesを生成します。
OAuth2.0のスコープは、表1の(1)・(3)を使用
下の例では、cloud-aceという名前のゾーン管理を生成し、cloud-ace.jpというドメインを登録しています。
リクエスト
POST https://www.googleapis.com/dns/v1beta1/projects/my-cloud/managedZones { ”name”: “cloud-ace”, ”description”: “Zone for testing Google Cloud DNS”, ”dnsName”: “cloud-ace.jp.”, ”kind”: “dns#managedZone” } |
レスポンス
{ ”kind”: “dns#managedZone”, ”name”: “cloudace”, ”dnsName”: “cloudace.jp.”, ”description”: “for Cloud Ace”, ”id”: “9182328335091994291”, ”nameServers”: [ ”ns-cloud-c1.googledomains.com.”, ”ns-cloud-c2.googledomains.com.”, ”ns-cloud-c3.googledomains.com.”, ”ns-cloud-c4.googledomains.com.” ], ”creationTime”: “2014-12-18T02:37:52.675Z” } |
レスポンスに nameServers (ネームサーバのアドレス)が含まれて返ってきました。
このnameServersをお名前.com等のレジストラに設定することで、ネームサーバ管理をGoogle Cloud DNS に移譲することができます。
下の例では、お名前.comの管理画面でnameServersの4件のアドレスを設定しています。
完了しますと、ネームサーバをお名前.comが用意したネームサーバではなく、Google Cloud DNSを利用するようになります。
メソッド:dns.managedZones.get
名前を指定してゾーン管理情報を取得します。
OAuth2.0のスコープは、表1の(1)・(2)・(3)を使用
下の例では、先ほど登録したcloud-aceという名前のゾーン管理情報を取得しています。
リクエスト
GET https://www.googleapis.com/dns/v1beta1/projects/my-cloud/managedZones/cloud-ace/ |
レスポンス
{ ”kind”: “dns#resourceRecordSetsListResponse”, ”rrsets”: [ { “kind”: “dns#resourceRecordSet”, “name”: “cloud-ace.jp.”, “type”: “NS”, “ttl”: 21600, “rrdatas”: [ “ns-cloud-c1.googledomains.com.”, “ns-cloud-c2.googledomains.com.”, “ns-cloud-c3.googledomains.com.”, “ns-cloud-c4.googledomains.com.” ] }, { “kind”: “dns#resourceRecordSet”, “name”: “cloud-ace.jp.”, “type”: “SOA”, “ttl”: 21600, “rrdatas”: [ “ns-cloud-c1.googledomains.com. dns-admin.google.com. 0 21600 3600 1209600 300” ] } ] } |
Developers Console の Cloud DNS から確認することもできました。
メソッド:dns.changes.create
ゾーンにレコードを追加します。
OAuth2.0のスコープは、表1の(1)・(3)を使用
下の例では、Aレコードとして、107.167.183.215 を追加しています。
ご存知の通りAレコードは、指定されたホスト名とIPアドレスをひもづけます。
リクエスト
POST https://www.googleapis.com/dns/v1beta1/projects/my-cloud/managedZones/cloud-ace/changes { “additions”: [ { “kind”: “dns#resourceRecordSet”, “name”: “www.cloud-ace.jp.”, “rrdatas”: [ “107.167.183.215” ], “ttl”: 60, “type”: “A” } ] } |
レスポンス
{ “kind”: “dns#change”, “additions”: [ { “kind”: “dns#resourceRecordSet”, “name”: “www.cloud-ace.jp.”, “type”: “A”, “ttl”: 60, “rrdatas”: [ “107.167.183.215” ] } ], “startTime”: “2014-12-18T03:02:36.243Z”, “id”: “1”, “status”: “pending” } |
Aレコードの登録が完了しましたのでDevelopers Consoleから確認してみます。
www.cloud-ace.jp の A レコードに 107.167.183.215 が登録されているのが確認できました。
107.167.183.215 には予めapacheを起動しておき、ブラウザからwww.cloud-ace.jpにアクセスしてみますと、反映されているのを確認できました。
DNSの管理もGoogle Cloud Platformのプロジェクト内で管理ができ、益々Google一本でなんでもできてしまいます。
クライアントライブラリも公開されてますので、実際にプログラムから利用する場合はそちらを使って実装することになるでしょう。