1. はじめに

最終更新日: 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 の管理方法を学習できました。