レコードの管理

Cloud DNS API の DNS レコードを管理するときに、変更リクエストを API に送信する場合があります。このページでは、リソース レコードセットのコレクションに対する追加と削除を行う変更方法について説明します。また、importexporttransaction コマンドを使用して、目的の変更を API に送信する方法についても説明します。

始める前に

すでにマネージド ゾーンを作成していて、そのタスクの前提条件を満たしている必要があります。

レコードの追加または削除

レコードを追加するときに、同じ DNS 名のレコードセットに 2 つの値または文字列を追加できます。レコードセットを追加するときは、最初の値と 2 番目の値の間にスペースを追加する必要があります。

レコードセットで DNS レコードを追加または削除する場合は、実行する操作を指定したトランザクションを作成して実行します。トランザクションは、一緒に伝播すべき 1 つ以上のレコード変更のグループです。トランザクション全体が成功または失敗のいずれかになるため、データが中間状態のままになることはありません。

Console

Cloud Console でレコードセットを作成するには:

  1. Cloud DNS ページに移動します
  2. レコードを追加するマネージド ゾーンの名前をクリックします。
  3. ゾーンの詳細画面で、[レコードセットの追加] をクリックします。
  4. [レコードセットを作成] 画面で、[DNS 名] フィールドに DNS ゾーンのサブドメインを入力します。例: mail末尾にドットが自動的に追加されます。

    ワイルドカード DNS レコードを作成するには、アスタリスクを入力します。例:*.example.com

  5. [リソース レコードのタイプ] を選択します。例: MX

  6. [TTL] フィールドにリソース レコードの有効期間を数値で入力します。これは、キャッシュに保存されている時間です。この値は正の整数である必要があります。[TTL ユニット] プルダウン メニューから、時間の単位を選択します。例: 30 minutes

  7. 選択したリソース レコードのタイプに応じて、表の説明に従って残りのフィールドに値を入力します。

  8. [項目を追加] をクリックして追加情報を入力できます。

  9. [作成] をクリックします。

gcloud

a. トランザクションを開始するには、gcloud dns record-sets transaction start コマンドを使用します。

    gcloud dns record-sets transaction start --zone="my-zone-name"
      

ここで

  • --zone は、管理するレコードセットのマネージド ゾーンの名前です。

b. レコードセットをトランザクションの一部として追加するには、gcloud dns record-sets transaction add コマンドを使用します。

    gcloud dns record-sets transaction add 10.2.3.4 --name="test.example.com" \
      --ttl="30" \
      --type="A" \
      --zone="my-zone-name"
      

ここで

  • --name は、追加するレコードセットの DNS またはドメイン名です。
  • --ttl はレコードセットの秒数で表された TTL(有効期間)です。
  • --type は、で説明されているレコードタイプです。
  • --zone は、管理するレコードセットのマネージド ゾーンの名前です。

c. トランザクションを実行するには、gcloud dns record-sets transaction execute コマンドを使用します。

    gcloud dns record-sets transaction execute --zone="my-zone-name"

ワイルドカード トランザクションを追加するには:

    gcloud dns record-sets transaction add --zone="my-zone-name" \
        --name="*.example.com." \
        --type=CNAME \
        --ttl=300 "sinkhole.example.com"
     

ここで

  • --name は、追加するレコードセットの DNS またはドメイン名です。
  • --ttl はレコードセットの秒数で表された有効期間です。
  • --type は、で説明されているレコードタイプです。
  • --zone は、管理するレコードセットのマネージド ゾーンの名前です。

トランザクションを削除するには、gcloud dns record-sets transaction remove コマンドを使用します。

    gcloud dns record-sets transaction remove 10.2.3.4 --name="test.example.com" \
        --ttl="number of seconds" \
        --type="record type" \
        --zone="zone name"
      

ここで

  • --name は、削除するレコードセットの DNS またはドメイン名です。
  • --ttl はレコードセットの秒数で表された有効期間です。
  • --type は、で説明されているレコードタイプです。

既存のレコードを置き換えるには、remove コマンドの後に add コマンドを実行します。

API

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/managedZone/changes

    {
      "deletions": [
        {
          "name": "test.example.com.",
          "type": "A",
          "ttl": "30",
          "rrdatas": [
            "198.51.100.5"
          ]
        }
      ]
      "additions": [
        {
          "name": "test.example.com.",
          "type": "A",
          "ttl": "30",
          "rrdatas": [
            "203.0.113.1"
          ]
        }
      ]
    }
    

PROJECT_ID は実際のプロジェクト ID、managedZone はマネージド ゾーンの名前または ID です。

サポートされる DNS レコードタイプのリスト

ここをクリックして API Explorer で試してください

リソース レコードタイプの選択に関する詳細

レコードタイプ 入力
A

ホストの IP アドレス(ドット付き 10 進数形式)。

AAAA

ホストの IP アドレス(IPv6 16 進数形式)。

CAA

このドメインの証明書を発行する権限のある証明局。

CNAME

DNS 名がエイリアスとなる正規名。

DNSKEY

安全な転送のために、他のオペレーターから取得される DNSSEC キー。このレコード セットタイプを追加できるのは、転送状態の DNSSEC 対応ゾーンのみです。

DS

委任されたゾーンの安全を確保するための DNSSEC キー フィンガープリント。 このレコード セットタイプは、委任されたゾーンに対して DNSSEC を有効にしません。有効にするには、このゾーンに対して DNSSEC を手動で有効にする必要があります。

IPSECVPNKEY

IPSec 公開 VPN キー。このレコード セットタイプを使用する場合は DNSSEC が推奨されますが、DNSSEC はこのゾーンに対して有効になっていません。

MX

サーバーの優先度を示す、メール交換サーバーの番号と DNS 名です。番号が小さいサーバーから試行されます。番号と DNS 名の間に必ずスペースを入れてください。

NAPTR

Uniform Resource Name のマッピングに使用する NAPTR(Naming Authority Pointer)ルール。

NS

権威ネームサーバーの DNS 名。NS レコードがゾーンのネームサーバーと一致している必要があります。

PTR

リソースの正規名。通常は逆検索に使用されます。

SPF

SPF レコード セットタイプは非推奨です。代わりに、「v=spf1」で始まる TXT レコードを使用してください。最新のメール ソフトウェアでは、SPF タイプのレコードは使用されません。

SRV

特定のサービスのサーバーの場所(ホスト名とポート番号)を指定するデータ。詳細については、RFC 2782をご覧ください。

SSHFP

SSH サーバーのアルゴリズム番号、フィンガープリントの種類を表す番号、キー フィンガープリント。このゾーンの DNSSEC を有効にしている場合は、このレコードタイプを使用してください。

TLSA

名前付きエンティティの DNS ベースの認証(DANE)TLSA 証明書アソシエーションの情報。

TXT

テキストデータ。任意のテキストを含めることができ、セキュリティ情報や不正防止情報などのマシンが読み取れるデータを定義するためにも使用できます。TXT レコードには 1 つ以上のテキスト文字列を含めることができ、各文字列の最大長は 255 文字です。複数の文字列がある場合は、メール エージェントや他のソフトウェア エージェントによって連結されます。各文字列は引用符で囲みます。例:


    "Hello world" "Bye world"

レコードセットのインポートとエクスポート

importexport を使用すると、レコードセットをマネージド ゾーンの内外にコピーできます。インポートおよびエクスポートできる形式は、BIND ゾーンファイル形式または YAML レコード形式のいずれかです。

レコードセットをインポートするには、dns record-sets import コマンドを実行します。 --zone-file-format フラグは、import に BIND ゾーン形式のファイルが想定されていることを伝えます。このフラグを省略すると、import は YAML 形式のレコード ファイルを想定します。

    gcloud dns record-sets import -z=examplezonename \
       --zone-file-format path-to-example-zone-file
    

レコードセットをエクスポートするには、dns record-sets export コマンドを実行します。 レコードセットを BIND ゾーン形式のファイルでエクスポートするには、--zone-file-format フラグを使用して、export に指示します。例:

    example.com. 21600 IN NS ns-gcp-private.googledomains.com.
    example.com. 21600 IN SOA ns-gcp-private.googledomains.com.
    cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
    host1.example.com. 300 IN A 192.0.2.91
    

このフラグを省略すると、export はレコードセットを YAML 形式のレコード ファイルでエクスポートします。

    gcloud dns record-sets export example.zone -z=examplezonename \
       --zone-file-format
       

例:

    ---
    kind: dns#resourceRecordSet
    name: example.com.
    rrdatas:
    - ns-gcp-private.googledomains.com.
    ttl: 21600
    type: NS
    ---
    kind: dns#resourceRecordSet
    name: example.com.
    rrdatas:
    - ns-gcp-private.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600
      259200 300
    ttl: 21600
    type: SOA
    ---
    kind: dns#resourceRecordSet
    name: host1.example.com.
    rrdatas:
    - 192.0.2.91
    ttl: 300
    type: A
    

現在のレコードセットの表示

ゾーンの現在の DNS レコードを表示するには:

gcloud

gcloud dns record-sets list --zone="myzonename"
このコマンドは、最初の 100 件のレコードについてリソース レコードセットの JSON レスポンスを出力します。次の追加のパラメータを指定できます。
  • limit: 表示されるレコードセットの最大数。
  • name: このドメイン名と完全に一致するレコードセットのみをリスト表示します。
  • type: このタイプのレコードだけをリスト表示します。指定した場合、--name パラメータも指定する必要があります。

Python

def list_resource_records(project_id, zone_name):
        client = dns.Client(project=project_id)
        zone = client.zone(zone_name)

        records = zone.list_resource_record_sets()

        return [(record.name, record.record_type, record.ttl, record.rrdatas)
                for record in records]

次のステップ