aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

AWS CLI で Route53のレコードを操作する

AWS CLI でRoute53を操作してみる。

ホストの追加や、切り替えをシステムから自動化したい場合などで使える。

参考

  change-resource-record-sets — AWS CLI 1.2.0 documentation

 POST ChangeResourceRecordSets - Amazon Route 53

ゾーン一覧の取得

$ aws route53 list-hosted-zones
{
    "HostedZones": [
        {
            "ResourceRecordSetCount": 11, 
            "CallerReference": "C1D3F932-D850-1792-AE9E-YYYYYYYYYYYY", 
            "Config": {
                "Comment": "example.com"
            }, 
            "Id": "/hostedzone/ABCDXYZ", 
            "Name": "example.com."
        }, 
        {
            "ResourceRecordSetCount": 6, 
            "CallerReference": "31E1727B-8557-540E-82FE-XXXXXXXXXXXX", 
            "Config": {
                "Comment": "example.net"
            }, 
            "Id": "/hostedzone/ZYXDCBA", 
            "Name": "example.net."
        }
    ], 
    "IsTruncated": false, 
    "MaxItems": "100"
}

こんな感じ

次に、ゾーンのレコードセット一覧を取得してみる 

$ aws route53 list-resource-record-sets --hosted-zone-id ABCDXYZ
{
    "IsTruncated": false, 
    "ResourceRecordSets": [
        {
            "ResourceRecords": [
                {
                    "Value": "ns-xxxx.awsdns-62.co.uk."
                }, 
 ......
            ], 
            "Type": "NS", 
            "Name": "example.com.", 
            "TTL": 172800
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "ns-XXXX.awsdns-62.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ], 
            "Type": "SOA", 
            "Name": "example.com.", 
            "TTL": 900
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "192.0.2.33"
                }, 
                {
                    "Value": "198.51.100.23"
                }, 
                {
                    "Value": "203.0.113.3"
                }
            ], 
            "Type": "A", 
            "Name": "fuga.example.com.", 
            "TTL": 300
        }, 
 .......
    ],
    "MaxItems": "100"
}

次に、新しいレコードセットを追加する

まず、jsonファイルを用意する。この例はexample.com ゾーンに、fuga.example.net を、CNAMEとしてmefu.example.com に登録する。つまり

 mefu 60 IN CNAME fuga.example.net.

のイメージ。

$ cat /home/ec2-user/create-cname.json
{
  "Comment": "create CNAME record",
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "mefu.example.com.",
        "Type": "CNAME",
        "TTL": 60,
        "ResourceRecords": [
          {
            "Value": "fuga.example.net."
          }
        ]
      }
    }
  ]
}
$ aws route53 change-resource-record-sets --hosted-zone-id ABCDXYZ --change-batch file:////home/ec2-user/create-cname.json

最後に、レコードセットを更新してみる。先ほどのCNAME mefu.example.com の内容を fuga.example.net. から、 dabo.example.net. に変更する。つまり

 mefu 60 IN CNAME fuga.example.net.

 mefu 60 IN CNAME dabo.example.net.

にするイメージ。Actionとしては、DELETEとCREATEをバッチで投げることになる。

$ cat /home/ec2-user/update-cname.json
{
  "Comment": "create CNAME record",
  "Changes": [
    {
      "Action": "DELETE",
      "ResourceRecordSet": {
        "Name": "mefu.example.com.",
        "Type": "CNAME",
        "TTL": 60,
        "ResourceRecords": [
          {
            "Value": "fuga.example.net."
          }
        ]
      }
    },
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "mefu.example.com.",
        "Type": "CNAME",
        "TTL": 60,
        "ResourceRecords": [
          {
            "Value": "dabo.example.net."
          }
        ]
      }
    }
  ]
}
$ aws route53 change-resource-record-sets --hosted-zone-id ABCDXYZ --change-batch file:////home/ec2-user/update-cname.json