Cloud DNS ResourceRecordSets API

1. はじめに

64e18005b6cdcd83.png

最終更新日: 2021 年 1 月 6 日

Cloud DNS とは

ホームページをご覧ください。

作成するアプリの概要

この Codelab では、gcloud を使用して Cloud DNS ManagedZone と関連する ResourceRecordSet を作成し、一部の VM インスタンスへの名前解決を管理します。

学習内容

個々の ResourceRecordSet の作成、読み取り、削除、更新の方法。

必要なもの

2. 設定方法

Google Cloud Platform プロジェクトを設定する

gcloud にログインする

gcloud auth login

プロジェクトを作成する

gcloud projects create my-codelab-project

Cloud DNS API を有効にする

gcloud services enable dns.googleapis.com

この設定が有効になるまでに数分かかることがあります

3. 限定公開 ManagedZone の作成

ManagedZone には ResourceRecordSets が含まれます。

DNS レコードを追加するドメイン名をメモします。この例では、「my-domain.com」を使用し、VM インスタンスがデフォルト ネットワーク上にあるとします。

gcloud dns managed-zones create my-zone \
    --description="ManagedZone for Cloud DNS ResourceRecordSets codelab." \
    --dns-name=my-domain.com. \
    --networks=default \
    --visibility=private

4. ResourceRecordSets を管理する

このセクションの最後までに、ドメインの仮想プライベート ネットワーク経由の DNS リクエストが VM の IP アドレスに解決されます。

たとえば、VM の IP アドレスが「1.2.3.4」で、「my-domain.com.」をその IP アドレスに解決する場合は、「A レコード」を作成する必要があります。

A レコードを作成する

gcloud dns record-sets create "my-domain.com." --type="A" --ttl="60" --rrdatas="1.2.3.4" --zone="my-zone"
  • 位置引数 "my-domain.com."。(dnsName)は、DNS 解決を定義する名前です。
  • –type: 作成しようとしている DNS レコードタイプを示します。
  • –ttl: このレコードの有効期間を示します。
  • –rrdatas: クエリの実際の回答を保持します。
  • –zone: このレコードを作成する ManagedZone を指定するために必要です。

DNS のコンセプトの詳細については、こちらをご覧ください。

A レコードを作成したので、DNS 解決をテストできるようになりました。

マシンに SSH で接続します。この例では、「us-central1-a」に「dns-codelab」という名前の VM インスタンスを使用します。

gcloud compute ssh codelab --zone=us-central1-a

「dig」コマンドを使用できるように dnsutils をインストールする

sudo apt install dnsutils

ドメインをクエリする

dig my-domain.com.

次のような出力が生成されます。

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19979
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;my-domain.com.                        IN        A

;; ANSWER SECTION:
my-domain.com.                60        IN        A        1.2.3.4
...

CNAME レコードの作成、PATCH、GET

my-domain.com. を 1.2.3.4 にマッピングしたので、www.my-domain.com. も 1.2.3.4 に解決されるようにします。「www.」プレフィックスのレコードは自動的に作成されません。

www.my-domain.com をクエリする場合。

dig www.my-domain.com.

次のような出力が表示されます。

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...

ドメインの DNS レコードがないことを示します。

別の A レコードを作成するのではなく、別のレコードへのポインタである CNAME レコードを作成する必要があります。これにより、別の IP アドレスを使用する場合に両方のレコードを変更する必要がなくなります。

VM インスタンスを終了します。

exit

CNAME レコードを作成する

gcloud dns record-sets create "www.my-domain.com." --type="CNAME" --ttl="60" --rrdatas="my-domin.com." --zone="my-zone"

CNAME レコードを作成したので、DNS 解決をテストできるようになりました。

マシンに再度 SSH 接続する

gcloud compute ssh codelab --zone=us-central1-a

ドメインをクエリする

dig www.my-domain.com.

次のような出力が表示されます。

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...

残念ながら「–rrdatas」フラグで CNAME レコードを作成する際に、タイプミスがあったようです。レコードを削除して再作成するのではなく、正しい変更をパッチで適用できます。

VM インスタンスを終了する

exit

CNAME レコードをパッチ適用する

gcloud dns record-sets update "www.my-domain.com." --type="CNAME" --rrdatas="my-domain.com." --zone="my-zone"

変更しないため、"–ttl" フラグは省略できますが、他のすべてのフラグは ResourceRecordSet の汎用一意識別子の一部であるため、含める必要があります。

gcloud を使用して、レコードが想定どおりであることを確認することもできます。

gcloud dns record-sets describe "www.my-domain.com." --type="CNAME" --zone="my-zone"

出力が生成されます。

NAME                    TYPE    TTL  DATA
www.my-domain.com.      CNAME   60  "my-domain.com."

CNAME レコードが正しく解決されていることを確認する

gcloud compute ssh codelab --zone=us-central1-a
dig www.my-domain.com.

次のような出力が表示されます。

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7471
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;www.my-domain.com.                IN        A

;; ANSWER SECTION:
www.my-domain.com.        60        IN        CNAME         my-domain.com..
...

削除してクリーンアップ

ManagedZone を削除する前に、ManagedZone 内のすべての ResourceRecordSet を削除する必要があります(NS レコードと SOA レコードは自動的に生成され、常に ManagedZone に存在する必要があるため、例外です)。

VM インスタンスを終了する

exit

CNAME レコードを削除する

gcloud dns record-sets delete "www.my-domain.com." --type="CNAME" --zone="my-zone"

A レコードを削除する

gcloud dns record-sets delete "my-domain.com." --type="A" --zone="my-zone"

ManagedZone を削除する

gcloud dns managed-zones delete "my-zone"

5. 完了

これで、ResourceRecordSet の管理方法を学習できました。

参考資料

リファレンス ドキュメント