Cloud DNS の操作

このページでは、Cloud DNS と Cloud Tools for PowerShell を使用してドメインの DNS 設定を構成する方法について説明します。簡単な例を使って、ドメインとそのサブドメインを管理するためのマネージド ゾーンを作成し、そのゾーンにリソース レコードを追加する手順を示します。これらのレコードの情報により、そのゾーンのドメインに送られてきたリクエストを処理するときに DNS サーバーがどのように動作するかが決まります。

このドキュメントでは、ドメイン名とドメイン名が参照できる IP アドレスがあることを前提としています。ドメインをお持ちでない場合は、Google Domains または他のお好きなドメイン登録事業者を通じてドメイン名を登録できます。

Cloud DNS コマンドレットの詳細については、Cloud Tools for PowerShell コマンドレット リファレンスをご覧ください。Cloud DNS の概要については、Cloud DNS の概要をご覧ください。

ドメインのマネージド ゾーンの作成

DNS 名前空間は数多くのドメインで構成されており、登録したドメイン名はすぐにその一員になります。Cloud DNS のマネージド ゾーンは DNS ゾーンをモデルとしており、同じ DNS 名サフィックスの DNS レコード(A、CNAME、TXT などのエントリ)を整理するためのコンテナとして機能します。たとえば、「example.com.」のレコードと、「first.example.com.」などのサブドメインのレコードは、「example.com.」というサフィックスを共有しているため、同じゾーンに含めることができます。末尾にドットが付いていることに注意してください。このドットは必要なもので、完全 DNS 名であることを示します。

まず、ドメイン名のために作成する DNS レコードを整理するためのマネージド ゾーンを作成します。新しいマネージド ゾーンを作成して Google Cloud コンソール プロジェクトに追加するには、Add-GcdManagedZone コマンドレットを使用します。

Add-GcdManagedZone `
    -Name "my-new-zone" `
    -DnsName "example.com." `
    -Description "This is my first zone."

これにより、指定した詳細に基づいて新しいゾーンが作成されます。作成されたゾーンは、デフォルトではアクティブな gcloud CLI 構成の現在のプロジェクトに追加されますが、必要に応じて別のプロジェクト ID を指定することもできます。そのほかに、そのゾーンのデフォルトの NS レコードと SOA レコードも作成されます。

ただし、ゾーンの新しいレコードをインターネットに公開するには、Cloud DNS を使用するようにドメインのネームサーバーを更新することも必要です。ドメインが Google Domains に登録されている場合でも、そのネームサーバーの更新は必要です。

ドメインを管理するマネージド ゾーンで Get-GcdManagedZone コマンドレットを使用して、ゾーンに関する情報を返すことで、ドメインに割り当てられた Cloud DNS ネームサーバーを確認できます。

Get-GcdManagedZone -Zone "my-new-zone"

リソース レコード セットの追加と削除

DNS リソース レコードの情報により、ドメインに送られてきたリクエストを処理するときに DNS サーバーがどのように動作するが決まります。たとえば、ドメインが解決される IP アドレスや、ドメインで使用できるメール交換サーバーなど、さまざまな情報を DNS レコードでサーバーに伝えることができます。

Cloud DNS では、ゾーンの DNS レコードを追加または削除して、そのような動作を構成できます。不変のリソース レコード セットを追加または削除するには、ゾーンのレコードに直接オペレーションを実行するのではなく、独立したリソース レコードを作成するか、New-GcdResourceRecordSet コマンドレットと Get-GcdResourceRecordSet コマンドレットを使用して既存のリソース レコードを取得し、Add-GcdChange コマンドレットを使用して、これらのレコードを添付して変更リクエストを特定のゾーンに送信します。

リソース レコード セットの作成

ヘルパー コマンドレット New-GcdResourceRecordSet を使用してリソース レコードセットを作成し、それを変更にセットしてマネージド ゾーンに追加または削除できます。

たとえば、ドメインが外部 IPv4 アドレスを #.#.#.# 形式で指すように A レコードを作成する場合は(IPv6 アドレスの場合は AAAA レコードを使用します)、次のコマンドを使用します。

$ARecord = New-GcdResourceRecordSet `
    -Name "example.com." -Rrdata "107.1.23.134" -Type "A"

同様に、www サブドメインの CNAME レコードを作成して、「www.example.com.」が「example.com.」と同じ IP に解決され、同じように動作するようにするには、次のようなコマンドを使用します。

$CNAMERecord = New-GcdResourceRecordSet `
    -Name "www.example.com." -Rrdata "example.com." -Type "CNAME"

作成してゾーンに対する変更に含めることができるリソース レコードのタイプは、A、AAAA、CNAME、MX、NAPTR、NS、PTR、SOA、SPF、SRV、TXT です。必要なレコードの特定と作成については、Cloud DNS でサポートされているリソース レコード形式をご覧ください。

リソース レコード セットの取得

ゾーン内の既存のリソース レコードセットを取得する場合は、Get-GcdResourceRecordSet コマンドレットを使用してゾーン内のすべてのレコードを返し、結果をインデックスに登録できます。

$allRecords = Get-GcdResourceRecordSet -Zone "my-new-zone"
$record0 = $allRecords[0]

特定のタイプのレコードのみを取得するには、結果をフィルタリングします。

$ARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A"

マネージド ゾーンに対する変更の適用

コマンドレット New-GcdResourceRecordSetGet-GcdResourceRecordSet はどちらもリソース レコードセットを返しますが、レコードの追加や削除は行いません。そのためには、Add-GcdChange コマンドレットを使用します。

Add-GcdChange `
    -Zone "my-new-zone" -Add $record1,$record2 -Remove $record0

たとえば、上で作成した A レコードと CNAME レコードをゾーンに追加するには、次のようにします。

Add-GcdChange -Zone "my-new-zone" -Add $ARecord,$CNAMERecord

その後、ドメインが解決される IPv4 アドレスを変更する必要が生じた場合は、新しい A レコードを作成してマネージド ゾーンに追加するとともに、古い A レコードを削除します。

$oldARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A"
$newARecord = New-GcdResourceRecordSet `
    -Name "example.com." -Rrdata "104.1.34.167" -Type "A"
Add-GcdChange -Zone "my-new-zone" -Remove $oldARecord -Add $newARecord

Add-GcdChange コマンドレットを呼び出すたびに、新たに実行された変更リクエスト オブジェクトが返されます。リソース レコードセットのリストの代わりに、Add-GcdChange コマンドレットに変更リクエスト オブジェクトを渡して、直接実行することもできます。

Add-GcdChange -Zone "my-new-zone" -ChangeRequest $change0

変更リクエスト オブジェクトは、手動で作成することはおすすめしませんが、以前に適用した変更や別のゾーンで適用した変更を再適用する場合には便利です。 Get-GcdChange コマンドレットを使用して、ゾーンに適用された過去のすべての変更リクエスト オブジェクトを取得できます。

$allChanges = Get-GcdChange -Zone "my-new-zone"

特定の変更を選択するには、前の結果のインデックスを指定するか、取得する変更を ChangeId で指定します。変更リクエストには、通常、ゾーンに送信された順に、0 から始まる番号が付いています。

$firstChange = Get-GcdChange -Zone "my-new-zone" -ChangeId 0
Add-GcdChange -Zone "my-new-zone" -ChangeRequest $firstChange

マネージド ゾーンの削除

マネージド ゾーンを丸ごと削除する必要が生じる場合もあります。これにはさまざまな理由が考えられます。たとえば、「user1.example.com.」というサブドメインのために「user1-zone」というマネージド ゾーンを作成した場合、user1 のアカウントが削除されると、そのサブドメインと、それに関連するすべての DNS レコードが不要になります。

マネージド ゾーンをプロジェクトから削除するには、Remove-GcdManagedZone コマンドレットを使用します。

Remove-GcdManagedZone -Zone "user1-zone"

成功した場合は何も返されません。

ただし、このコマンドレットは、Cloud DNS で「空でない」と見なされるマネージド ゾーン(NS または SOA 以外のタイプのレコード(デフォルト以外のレコード)が含まれているゾーン)に対しては、すぐには機能しません。たとえば、A と CNAME タイプのレコードを追加した「my-new-zone」を削除するには、処理中にコマンドレットに権限を付与するか、-Force スイッチを使用します。

Remove-GcdManagedZone -Zone "my-new-zone" -Force

Remove-GcdManagedZone コマンドレットは、削除するゾーンのパイプライン入力も受け入れます。たとえば次のコマンドは、現在のプロジェクトのすべてのマネージド ゾーンを強制的に削除します。プロジェクトで作成したすべてのドメインが不要になった場合に便利です。

Get-GcdManagedZone | Remove-GcdManagedZone -Force