HEARTBEATS

Google Cloud DNSをはじめよう #gcpja

   

こんにちは。CTOの馬場です。

今回はIaaSの中でも数少ないDNSサービス Cloud DNSを使ってみましょう。

いまはまだWebコンソールのメニューが見当たらないので、 gcutilgcloud コマンドを使います。

gcloud auth logingcloud config set project してある状態で操作します。

設定がまだの場合は Google Cloud Platformをはじめようチュートリアル を見て設定しておいてください。

手元のPCにインストールしたくない人は Google Cloud PlatformのCLIツールgcutilをDockerで使う をご覧ください。

Cloud DNSとは

AWSでいうところのRoute53のようなDNSサービスです。

レコードは A, AAAA, CNAME, MX, NS, PTR, SOA, SPF, SRV, TXT が利用できます。

IaaSはたくさんありますが、 DNSサービスはそう多くないので大変助かりますね。

ゾーン作成

gcloud dns managed-zone create で作成します。

gcloud dns managed-zone create --dns_name="example.com." --description="MY DESCRIPTION" examplecom

Y/n を聞かれたら素直に y しましょう。

Creating {'dnsName': 'example.com.', 'name': 'examplecom',
'description': 'MY DESCRIPTION'} in xxxx-xxxx-999

Do you want to continue (Y/n)?  y

{
    "creationTime": "2014-06-05T03:07:14.521Z",
    "description": "MY DESCRIPTION",
    "dnsName": "example.com.",
    "id": "2876746949389940895",
    "kind": "dns#managedZone",
    "name": "examplecom",
    "nameServers": [
        "ns-cloud1.googledomains.com.",
        "ns-cloud2.googledomains.com.",
        "ns-cloud3.googledomains.com.",
        "ns-cloud4.googledomains.com."
    ]
}

これだけで完了です。

あとはお名前.comなどで、 ドメイン(今回はexample.com)のDNSを上記の4つに設定しましょう。

レコード追加・削除

変更内容をJSONで書きます。 以下の gcloud コマンドを実行すると vim(おそらくEDITOR環境変数次第)が起動し、 JSONを書いて保存して終了です。

gcloud dns records --zone examplecom edit

SOAレコードの書き換えがあらかじめ記入されているので、 他に変更したい内容を追記します。

※以下がもともとの出力(あらかじめ記入されている)

{
    "additions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "example.com.",
            "rrdatas": [
                "ns-cloud1.googledomains.com. dns-admin.google.com. 1 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        }
    ],
    "deletions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "example.com.",
            "rrdatas": [
                "ns-cloud1.googledomains.com. dns-admin.google.com. 0 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        }
    ]
}

記入例はこちら。
※配列なので、追加する {} の直前に , も忘れずに!

{
    "additions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "example.com.",
            "rrdatas": [
                "ns-cloud1.googledomains.com. dns-admin.google.com. 1 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        }
        ,{
            "kind": "dns#resourceRecordSet",
            "name": "www.example.com.",
            "rrdatas": [
                "192.168.0.1"
            ],
            "ttl": 60,
            "type": "A"
        }
    ],
    "deletions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "example.com.",
            "rrdatas": [
                "ns-cloud1.googledomains.com. dns-admin.google.com. 0 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        }
    ]
}

保存してエディタを終了すると、 送信内容と結果がまるっとはいったJSONが表示されます。

{
    "additions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "example.com.",
            "rrdatas": [
                "ns-cloud1.googledomains.com. dns-admin.google.com. 1 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        },
        {
            "kind": "dns#resourceRecordSet",
            "name": "www.example.com.",
            "rrdatas": [
                "192.168.0.1"
            ],
            "ttl": 60,
            "type": "A"
        }
    ],
    "deletions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "example.com.",
            "rrdatas": [
                "ns-cloud1.googledomains.com. dns-admin.google.com. 0 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        }
    ],
    "id": "1",
    "kind": "dns#change",
    "startTime": "2014-06-05T09:07:07.551Z",
    "status": "pending"
}

しばし待てば完了です。

設定されているレコードは gcloud dns records list で確認できます。

gcloud dns records --zone examplecom list

ゾーン削除

ゾーンまるごと消そうとしたときにレコードが残っていると、 エラーになり削除できません。 あらかじめレコードを削除しなくてはなりません。 親切ですね。

↓エラーになるようす

Deleting MYZONENAME in xxxx-xxx-999

Do you want to continue (Y/n)?  y

{
    "error": {
        "code": 400,
        "errors": [
            {
                "domain": "global",
                "message": "The resource named 'MYZONENAME' cannot be deleted because it is not empty",
                "reason": "containerNotEmpty"
            }
        ],
        "message": "The resource named 'MYZONENAME' cannot be deleted because it is not empty"
    }
}
ERROR: (gcloud.dns.managed-zone.delete) ResponseError: status=400, code=Bad Request, reason(s)=containerNotEmpty
message=The resource named 'MYZONENAME' cannot be deleted because it is not empty

参考URL https://developers.google.com/cloud-dns/what-is-cloud-dns

ではでは、みなさまお試しください〜

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。



ハートビーツをフォロー

  • Twitter:HEARTBEATS
  • Facebook:HEARTBEATS
  • HATENA:HEARTBEATS
  • RSS:HEARTBEATS

殿堂入り記事