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 には ResourceRecordSet が含まれています。

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. ResourceRecordSet を管理する

このセクションを終えると、ドメインのバーチャル プライベート ネットワーク経由の 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 接続します。この例では、「dns-codelab」という名前の VM インスタンスを使用します。「us-central1-a」

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 がマッピングされました。www.my-domain.com を 1.2.3.4 にマッピングすると、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..
...

DELETE を使用してクリーンアップする

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 の管理方法について学習できました。

参考資料

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