このドキュメントでは、既存のプロジェクトをグローバル DNS からゾーン DNS に移行する方法について説明します。ゾーン DNS は、ゾーン内の停止を分離することで信頼性を強化し、インスタンスの作成や自動修復などの重要なサービスの中断を防ぎます。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、サービスと API にアクセスするために ID を確認するプロセスです。 Google Cloud ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- ゾーン DNS を使用するようにプロジェクトを移行する: プロジェクトのプロジェクト編集者(
roles/resourcemanager.projectEditor
) - プロジェクト内のゾーン DNS に VM を移行する: プロジェクトの Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
) -
VM でサービス アカウントが使用されている場合: サービス アカウントまたはプロジェクトのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
) -
グローバル DNS 名と VM メタデータを確認する:
compute.projects.get
-
VM にメタデータを設定する:
compute.instances.setMetadata
-
プロジェクト全体のメタデータを設定する:
compute.projects.setCommonInstanceMetadata
-
VM がサービス アカウントを使用する場合:
iam.serviceAccounts.actAs
- プロジェクトでグローバル DNS をデフォルトで使用しているかどうかを確認する
- クエリ分析を使用してプロジェクトの移行の準備状況を判断する
- ゾーン DNS と互換性のあるプロジェクトを移行する
- 互換性のないクエリを修正する
- グローバル DNS ログをモニタリングして、移行の準備状況を確認する。
- 残りのプロジェクトをゾーン DNS に移行する
- ゾーン DNS の変更がプロジェクトに影響しているかどうかを確認する
Google Cloud コンソールで、Compute Engine の [メタデータ] ページに移動します。
[メタデータ] タブで、
vmdnssetting
の設定(存在する場合)を表示します。割り当てられた値は、プロジェクトでグローバル DNS をデフォルトで使用するかどうかを示します。GlobalDefault
: プロジェクトでグローバル DNS が有効になっています。ZonalOnly
: プロジェクトでゾーン DNS が有効になっています。このプロジェクトは移行する必要はありません。
vmdnssetting
メタデータ設定が表示されない場合は、組織でグローバル DNS をデフォルトで使用しているかどうかを確認します。GLOBAL_DEFAULT
: プロジェクトでグローバル DNS が有効になっています。ZONAL_ONLY
: プロジェクトでゾーン DNS が有効になっています。このプロジェクトは移行する必要はありません。GLOBAL_DEFAULT
: プロジェクトでグローバル DNS が有効になっています。ZONAL_ONLY
: プロジェクトでゾーン DNS が有効になっています。このプロジェクトは移行する必要はありません。zonal_dns_ready
(互換性のあるクエリ): この指標は、ゾーン DNS を使用して正常に解決できる 100 日間のクエリの合計数を表します。zonal_dns_risky
(互換性のないクエリ): この指標は、ゾーン DNS を使用して解決できないクエリの合計数を表します。これらのクエリには通常、リージョン間の通信や、ゾーン解決が失敗するその他のシナリオが含まれます。重要なのは、この指標の値がゼロ以外の場合、プロジェクトは移行の準備ができていないということです。ゾーン DNS に切り替える前に、これらの互換性のないクエリに対処する必要があります。-
Google Cloud コンソールで、[leaderboardMetrics Explorer] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。
[指標を選択] フィールドがあるツールバー右側で、[コードエディタ]、[MQL] または [PromQL] をクリックします。
クエリの入力フィールドに「MQL クエリ」という名前がない場合は、クエリの入力フィールド右下の [言語] で [MQL] を選択します。
クエリの入力フィールドに、次のテキストをそのまま入力します。
fetch compute.googleapis.com/Location | metric 'compute.googleapis.com/global_dns/request_count' | every 1d | within 7d
[クエリを実行] ボタンをクリックします。
Google Cloud コンソールに、2 つの指標(
zonal_dns_ready
とzonal_dns_risky
)と、期間中に実行された、各指標に該当するクエリの数のグラフが表示されます。zonal_dns_risky
指標の値を確認します。- 値が
0
の場合、プロジェクトはゾーン DNS に移行できます。ゾーン DNS の準備ができているプロジェクトを移行するの説明に従って、プロジェクトを移行できます。 - 上のスクリーンショットに示されているように、値がゼロ以外の数値(
0.02k
など)の場合、ゾーン DNS に移行した後に一部のクエリが機能しなくなる可能性があります。ですので、プロジェクトは移行の準備ができていません。互換性のないクエリを修正するの手順に進みます。
- 値が
Google Cloud コンソールで [Use Zonal DNS] ボタンをクリックします。
プロジェクトの [VM インスタンス] ページを表示したときに、プロジェクトを移行する準備ができている場合(ゾーン DNS クエリと互換性がある場合)、バナーでゾーン DNS を使用することが推奨されます。この推奨は、プロジェクト内の内部 DNS の使用状況に基づいていますが、過去 30 日間の使用に限定されています。
[ゾーン DNS を使用する] ボタンをクリックすると、ゾーン DNS を使用するようにプロジェクト メタデータが更新されます。
省略可: VM メタデータを表示してクエリを実行すると、メタデータの変更を確認できます。
ゾーン DNS を使用するようにプロジェクトのメタデータを手動で変更します。
プロジェクトの
vmDnsSetting
メタデータ エントリを設定して、インスタンスでゾーン DNS を有効にします。このメタデータ エントリを設定すると、検索パスを使用する場合、コンピューティング インスタンスにはゾーン DNS 名(VM_NAME.ZONE.c.PROJECT_ID.internal)でのみアクセスできます。インスタンスは引き続き、ゾーンとグローバルの両方の検索パスを保持しますが、内部 DNS 名に ZONE が含まれていないグローバル DNS 名は機能しなくなります。この設定が有効な場合、同じリージョンと同じプロジェクト内のインスタンスのみがグローバル名を使用して相互にアクセスできます。コンソール
プロジェクト レベルで設定を更新するには、Google Cloud コンソールで Compute Engine の [メタデータ] ページに移動します。
[
編集] をクリックします。値が
VmDnsSetting
のキーが存在する場合は、その値をZonalOnly
に変更します。値が
VmDnsSetting
のキーが存在しない場合は、 [項目を追加] をクリックします。- [キー] フィールドに「
VmDnsSetting
」と入力します。 - [Value] に「
ZonalOnly
」と入力します。
- [キー] フィールドに「
カスタム メタデータ エントリの変更を終了するには、[保存] をクリックします。
gcloud
現在のプロジェクトのメタデータ設定を更新するには、
project-info add-metadata
コマンドを使用します。gcloud compute project-info add-metadata \ --metadata vmDnsSetting=ZonalOnly
省略可: プロジェクトのメタデータ設定を確認するには、次のコマンドを使用します。
gcloud compute project-info describe --project=PROJECT_ID --flatten="vmDnsSetting"
PROJECT_ID は、クエリするプロジェクトの名前に置き換えます。
REST
プロジェクト レベルでメタデータ設定を更新するには、projects.setCommonInstanceMetadata メソッドを使用して
POST
リクエストを作成します。省略可: 楽観的ロックを実行するには、必要に応じてフィンガープリントを指定します。
フィンガープリントとは、Compute Engine によって生成されるランダムな文字列です。フィンガープリントはリクエストのたびに変更され、一致しないフィンガープリントを指定するとリクエストが拒否されます。
フィンガープリントを指定しない場合、整合性のチェックは行われず、
projects.setCommonInstanceMetadata
リクエストは成功します。instances.setMetadata
メソッドを使用する場合は、常に指紋認証が必要です。プロジェクトの最新のフィンガープリントを取得するには、
project.get
メソッドを呼び出します。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
出力は次のようになります。
{ "name": "myproject", "commonInstanceMetadata": { "kind": "compute#metadata", "fingerprint": "FikclA7UBC0=", ... } }
projects.setCommonInstanceMetadata
メソッドに対してPOST
リクエストを作成して、メタデータの Key-Value ペアを設定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata { "fingerprint": "FikclA7UBC0=", "items": [ { "key": "vmDnsSetting", "value": "ZonalOnly" } ] }
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。
プロジェクトの
vmDnsSetting
メタデータ エントリを構成したら、そのプロジェクト内の各インスタンスの DHCP リースを更新します。リースを更新するには、インスタンスを再起動するか、リースが期限切れになるまで待つか、次のコマンドのいずれかを実行します。Linux インスタンス
sudo dhclient -v -r
Windows インスタンス
ipconfig /renew
- 別のプロジェクトのコンピューティング インスタンスを呼び出す
- 別のリージョンのコンピューティング インスタンスを呼び出す
ログ エクスプローラを使用して、プロジェクトのコンピューティング インスタンスのグローバル DNS 使用状況にアクセスしてクエリを実行します。
プロジェクトを選択します。
リソースとログ名のフィルタを適用します。
- [リソース] をクリックします。
- [リソースの選択] ダイアログで [VM インスタンス] を選択し、[適用] をクリックします。
- [ログ名] をクリックします。
[ログ名の選択] ダイアログで [gdnsusage] を選択し、[適用] をクリックします。
別の方法として、クエリ フィールドに次のように入力することもできます。
resource.type="gce_instance" log_name="projects/PROJECT_ID/logs/compute.googleapis.com%2Fgdnsusage"
[クエリ結果] ペインでは、各クエリに
jsonPayload
フィールドがあります。各jsonPayload
フィールドには次の情報が含まれています。- ソース VM 名、そのプロジェクト ID、ゾーン名。
- 宛先 VM 名、そのプロジェクト ID、ゾーン名。
ゾーン DNS 名では解決できないグローバル DNS クエリの更新方法に関する情報を提供するデバッグ メッセージ。これらは移行をブロックするクエリとみなされ、デバッグと修正が必要になります。
"To use Zonal DNS, update the Global DNS query sent from the source VM VM_NAME.c.PROJECT_ID.internal to the following zonal FQDN: VM_NAME.ZONE.c.PROJECT_ID.internal"
クエリ数。その日に送信元 VM が宛先 VM に送信する移行ブロッククエリの数を示します。
次のスクリーンショットは、ログ エクスプローラ コンソール ページの
jsonPayload
フィールド情報を示しています。前の手順で取得した
jsonPayload
の情報を使用して、どの FQDN を使用してグローバル DNS クエリを手動で更新しゾーン DNS を使用するようにするかを決定し、プロジェクトの移行準備を整えます。FQDN を更新して互換性を解決する最も一般的なユースケースは次のとおりです。- メタデータ サーバーからの内部 DNS 名: ゾーン DNS への移行直後に、返された DNS 名がゾーン FQDN に変更されるため、対応は必要ありません。DNS 名がキャッシュに保存されている場合は、もう一度呼び出すだけでキャッシュ値を更新できます。
- 別のリージョンの VM へのアクセスに使用される内部 DNS 名: 異なるリージョンの VM に内部 DNS 名を使用するアプリケーションがある場合は、DHCP ポリシーまたは構成ファイルを変更して、別のリージョンのゾーンを含めることができます。
- ハードコードされたグローバル FQDN: VM にハードコードされたグローバル FQDN 名を使用するアプリケーションがある場合は、内部 DNS 名またはゾーン FQDN を使用するようにアプリケーション内の呼び出しを更新できます。この変更を行うには、Terraform でコードまたは構成を変更します。
- 共有 VPC ネットワークを使用するサービス プロジェクトの VM: 共有 VPC ネットワークを使用するサービス プロジェクトの VM の DNS 名を解決するには、VM のゾーン FQDN を使用する必要があります。
ゾーン DNS を使用するようにグローバル DNS クエリを更新したら、次の操作を行います。
ログ エクスプローラ ページを使用して、グローバル DNS の使用状況を再度クエリします。ブロックしているグローバル DNS クエリをすべて修正すると、クエリ結果にデバッグログは表示されなくなります。
モニタリング指標を再度確認して、互換性のない DNS クエリがすべて削除されているかどうかを確認します。
- ダッシュボードを作成する: 互換性のないグローバル DNS クエリパターンを可視化して、アプリケーションの通信動作に関する分析情報を取得します。
- ログを集約する: 組織全体の DNS ログを分析して、幅広い傾向と改善の余地を特定します。
コマンドライン インスタンスの通信
タスク: gcloud CLI を使用して、別のインスタンスから 1 つのインスタンスに ping を実行します。
gcloud compute ssh VM-A --command "ping VM-B"
考えられるエラー: 「ホストを解決できませんでした」-
VM-A
がVM-B
の IP アドレスを見つけられないことを意味します。解決策:
VM-B
に使用しているホスト名を、ゾーン名を含む完全修飾ドメイン名(FQDN)に更新します。ゾーン名はINSTANCE_NAME.ZONE.c.PROJECT_ID.internal
です。Compute Engine サービス内のインスタンス通信
タスク: 内部 DNS 名を使用するマネージド インスタンス グループ(MIG)のヘルスチェックを使用している場合は、ヘルスチェックが成功しているかどうかを確認します。
考えられるエラー: 「ヘルスチェックに失敗しました」- DNS 解決の問題により、ヘルスチェックがターゲットに到達できないことを示します。
解決策: ヘルスチェックで、ゾーン名を含むターゲット インスタンスの FQDN が使用されていることを確認します。
アプリケーション固有のユースケース
多くのアプリケーションは、次のようなタスクに内部 DNS を使用しています。
- データベース(Cloud SQL など)への接続
メッセージキュー(Pub/Sub など)とのやり取り
発生する可能性のあるエラー: アプリケーションによって異なりますが、次のようなエラーが発生する可能性があります。
- 「SERVICE_NAME に接続できません」
- 「接続がタイムアウトしました」
- 「そのようなホストは認識されていません」
解決策: アプリケーションの構成を確認して、サービスを参照するときに FQDN(ゾーン名を含む)が使用されていることを確認します。
プロジェクトのメタデータに
vmDnsSetting=GlobalDefault
を追加します。プロジェクト メタデータの値を設定する方法については、カスタム メタデータの設定と削除をご覧ください。
プロジェクト内のどのインスタンスでも、
vmDnsSetting
メタデータ値がZonalOnly
に設定されていないことを確認します。gcloud compute instances describe INSTANCE_NAME --flatten="metadata[]"
INSTANCE_NAME は、確認するインスタンスの名前に置き換えます。
各インスタンスの DHCP リースを更新します。リースを更新するには、インスタンスを再起動するか、リースが期限切れになるまで待つか、ゲスト オペレーティング システムで次のコマンドのいずれかを実行します。
- Linux インスタンス:
sudo dhclient -v -r
- Windows Server インスタンス:
ipconfig /renew
- Linux インスタンス:
インスタンスのメタデータを更新して、
vmDnsSetting=GlobalDefault
を追加します。コンピューティング インスタンスのメタデータ値を設定する方法については、カスタム メタデータの設定と削除をご覧ください。
DNS 構成を強制的に変更するには、次のいずれかのコマンドを使用してインスタンスのネットワークを再起動します。
Container-Optimized OS または Ubuntu の場合:
sudo systemctl restart systemd-networkd
CentOS、RedHat EL、Fedora CoreOS、Rocky Linux の場合:
sudo systemctl restart network
または
sudo systemctl restart NetworkManager.service
Debian の場合:
sudo systemctl restart networking
nmcli
が含まれる Linux システムの場合:sudo nmcli networking off sudo nmcli networking on
Windows の場合:
ipconfig /renew
コンテナと VM を保持するプロジェクトで、プロジェクト メタデータ設定
vmDnsSetting
をGlobalDefault
に設定します。コンテナを再起動すると、DNS 設定が元の状態に戻ります。
- 組織、フォルダ、プロジェクト間の関係については、Google Cloud リソース階層をご覧ください。
- Compute Engine の内部 DNS について詳しく学ぶ。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
ゾーン DNS を使用するようにプロジェクトを移行するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、ゾーン DNS を使用するようにプロジェクトを移行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
ゾーン DNS を使用するようにプロジェクトを移行するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
プロジェクトをゾーン DNS に移行する
ゾーン DNS を使用するようにプロジェクトを移行するには、次のタスクを完了します。
プロジェクトでグローバル DNS をデフォルトで使用しているかどうかを確認する
プロジェクトを調べて、グローバル DNS からゾーン DNS に移行する必要があるかどうかを確認します。移行する必要があるのは、プロジェクト内で作成された内部 DNS 名のデフォルトとしてグローバル DNS が構成されているプロジェクトのみです。
コンソール
gcloud
次の gcloud CLI コマンドを実行して、
vmDnsSetting
の値を確認します。gcloud compute project-info describe --project=PROJECT_ID --flatten="vmDnsSetting"
PROJECT_ID は、プロジェクトの名前に置き換えます。
返される値は、プロジェクトでグローバル DNS をデフォルトで使用するかどうかを示しています。
REST
projects.get
メソッドを使用して、vmDnsSetting
の値を確認します。この例では、fields
クエリ パラメータを使用して、表示するフィールドのみを含めます。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID?fields=id,name,vmDnsSetting
PROJECT_ID をプロジェクト ID で置き換えます。
vmDnsSetting
の値は、プロジェクトでグローバル DNS をデフォルトで使用するかどうかを示します。クエリ分析を使用してプロジェクトの移行準備状況を判断する
コードを変更したり、グローバル DNS の使用方法を変更したりせずにプロジェクトをゾーン DNS に移行できるかどうかを評価するために、 Google Cloud は DNS クエリ履歴を分析します。この分析では、ゾーン DNS とのプロジェクトの互換性を示す次の指標が提供されます。
これらの指標を表示するには、Google Cloud コンソールの Metrics Explorer を使用します。
ゾーン DNS と互換性のあるプロジェクトを移行する
ゾーン DNS に切り替える準備ができているプロジェクトを移行するには、次のいずれかのオプションを使用します。
互換性のないクエリを修正する
移行の準備ができていないプロジェクトとは、過去 30 日間など、一定の期間内に互換性のない DNS クエリが少なくとも 1 回行われたプロジェクトを意味します。互換性のないクエリには、次の属性があります。
プロジェクトに互換性のないクエリがある場合、Google Cloud コンソールの [VM インスタンス] ページに次のバナーが表示されます。
互換性のないクエリをすべて修正するには、クエリでソース インスタンスのゾーン完全修飾ドメイン名(FQDN)を使用することをおすすめします。このアプローチにより、プロジェクトをゾーン DNS に移行した後もクエリの解決が中断されなくなります。
互換性のないクエリを解決するには、次の操作を行います。
ログ エクスプローラでグローバル DNS ログを表示する
ログ エクスプローラには、ゾーン DNS と互換性がないクエリを含むプロジェクトのグローバル DNS ログが主に表示されます。これらのログは、移行前に問題のあるクエリを特定して分析するのに役立ちます。
これらの互換性のないクエリに対してログ エクスプローラを使用して、次のことができます。
ゾーン DNS の変更がプロジェクトに影響しているかどうかを確認する
ゾーン DNS に移行した後は、アプリケーションとサービスが引き続き正しく動作していることを確認することが重要です。ゾーン DNS は内部 DNS 名の解決方法を変更するため、グローバル DNS 名に依存しているアプリケーションで問題が発生することがあります。
以降のセクションでは、潜在的な影響をチェックする方法と、影響を解決する方法について説明します。
グローバル DNS を使用するように戻す
デフォルトの内部 DNS タイプをグローバル DNS に戻すと、ゾーン DNS への移行を元に戻すことができます。これは、組織、プロジェクト、インスタンス、またはコンテナのレベルで行うことができます。
プロジェクトでグローバル DNS を使用するように戻す
グローバル DNS を使用するようにプロジェクトを元に戻すには、次の手順を完了します。
インスタンスでグローバル DNS を使用するように戻す
特定のインスタンスのグローバル DNS の使用を元に戻すには、次の操作を行います。
コンテナでグローバル DNS を使用するように戻す
アプリケーションまたはワークロードをコンテナ、Google Kubernetes Engine、または App Engine フレキシブル環境で実行する場合は、コンテナ設定内の DNS 構成が自動的には更新されず、コンテナの再起動が必要になることがあります。これらのコンテナアプリでゾーン DNS を無効にするには、次の手順を完了します。
グローバル DNS からゾーン DNS への移行プロセスのトラブルシューティングを行う
移行プロセスに問題が発生した場合は、トラブルシューティング ガイドをご覧ください。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-02-21 UTC。
-