この Codelab について
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"