AWS CLI で Route53 のホストゾーンのレコードを操作してみた

コマンドで レコード操作 やってみた
2020.09.14

コンサル部のYui(@MayForBlue)です。

今回は、AWS CLI を使って Route53 のホストゾーンのレコード内容を変更する機会があったので、手順をご紹介します。

やってみる

前提

今回の環境では AWS CLI v2 を使用しています。

$ aws --version
aws-cli/2.0.0 Python/3.7.4 Darwin/19.4.0 botocore/2.0.0dev4

準備

今回は検証用として、test01.example.comという名前のプライベートホストゾーンを用意しました。

レコード変更用のファイルを用意する

今回は change-resource-record-sets のコマンドを使用します。 このコマンドを実行するために、レコード変更の内容を記述したjsonファイルを用意し、任意のフォルダに保存します。
(今回は~/sample.jsonとしました。)
ファイルに以下を記述します。

  • Comment: 任意のコメント
  • Changes: 変更内容
  • Action: 変更の種類(CREATE/DELETE/UPSERT のいずれか)
  • ResourceRecordSet: 変更対象レコードの情報
  • Name: レコード名
  • Type: レコードタイプ
  • TTL: レコードに関する情報をキャッシュする時間
  • ResourceRecords: 値/トラフィックのルーティング先
    {
                "Comment": "CREATE/DELETE/UPSERT a record ",
                "Changes": [{
                "Action": "CREATE",
                            "ResourceRecordSet": {
                                        "Name": "a.example.com",
                                        "Type": "A",
                                        "TTL": 300,
                                     "ResourceRecords": [{ "Value": "4.4.4.4"}]
    }}]
    }

確認

検証前にレコード一覧を確認しておきます。
この時点ではデフォルトで用意されているNSレコード、SOAレコードのみが存在します。

検証前のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx
{
    "ResourceRecordSets": [
        {
            "Name": "test01.example.com.",
            "Type": "NS",
            "TTL": 172800,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk."
                },
                {
                    "Value": "ns-0.awsdns-00.com."
                },
                {
                    "Value": "ns-1024.awsdns-00.org."
                },
                {
                    "Value": "ns-512.awsdns-00.net."
                }
            ]
        },
        {
            "Name": "test01.example.com.",
            "Type": "SOA",
            "TTL": 900,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ]
        }
    ]
}

レコード作成

まずはレコード作成からやってみます。
sample.json の内容を以下のようにします。

{
            "Comment": "CREATE a record ",
            "Changes": [{
            "Action": "CREATE",
                        "ResourceRecordSet": {
                                    "Name": "hoge.test01.example.com",
                                    "Type": "A",
                                    "TTL": 300,
                                 "ResourceRecords": [{ "Value": "4.4.4.4"}]
}}]
}

コマンドを実行します。

$ aws route53 change-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx --change-batch file://sample.json
{
    "ChangeInfo": {
        "Id": "/change/C00067102AWDNYCR9D6J",
        "Status": "PENDING",
        "SubmittedAt": "2020-09-14T03:03:29.308000+00:00",
        "Comment": "CREATE a record "
    }
}

コマンドが成功すると、レコード変更の一意のIDが生成されます。
以下のコマンドでそのIDを指定すると、変更のステータスを確認することができます。
ステータスがPENDINGからINSYNCに変われば変更完了です。

$ aws route53 get-change --id /change/C00067102AWDNYCR9D6J
{
    "ChangeInfo": {
        "Id": "/change/C00067102AWDNYCR9D6J",
        "Status": "INSYNC",
        "SubmittedAt": "2020-09-14T03:03:29.308000+00:00",
        "Comment": "CREATE a record "
    }
}

コマンド実行後のホストゾーンのレコード一覧を取得して、レコードが作成できていることを確認します。

作成後のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx
{
    "ResourceRecordSets": [
        {
            "Name": "test01.example.com.",
            "Type": "NS",
            "TTL": 172800,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk."
                },
                {
                    "Value": "ns-0.awsdns-00.com."
                },
                {
                    "Value": "ns-1024.awsdns-00.org."
                },
                {
                    "Value": "ns-512.awsdns-00.net."
                }
            ]
        },
        {
            "Name": "test01.example.com.",
            "Type": "SOA",
            "TTL": 900,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ]
        },
        {
            "Name": "hoge.test01.example.com.",
            "Type": "A",
            "TTL": 300,
            "ResourceRecords": [
                {
                    "Value": "4.4.4.4"
                }
            ]
        }
    ]
}

レコード更新

sample.json を以下のように変更して、レコードの更新をやってみます。

{
            "Comment": "UPSERT a record ",
            "Changes": [{
            "Action": "UPSERT",
                        "ResourceRecordSet": {
                                    "Name": "hoge.test01.example.com",
                                    "Type": "A",
                                    "TTL": 300,
                                 "ResourceRecords": [{ "Value": "5.5.5.5"}]
}}]
}

コマンドを実行します。

$ aws route53 change-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx --change-batch file://sample.json
{
    "ChangeInfo": {
        "Id": "/change/C00764253VZ1CVLWFXDVM",
        "Status": "PENDING",
        "SubmittedAt": "2020-09-14T04:11:41.041000+00:00",
        "Comment": "UPSERT a record "
    }
}

コマンド実行後のホストゾーンのレコード一覧を取得して、レコードが更新できていることを確認します。

更新後のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx
{
    "ResourceRecordSets": [
        {
            "Name": "test01.example.com.",
            "Type": "NS",
            "TTL": 172800,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk."
                },
                {
                    "Value": "ns-0.awsdns-00.com."
                },
                {
                    "Value": "ns-1024.awsdns-00.org."
                },
                {
                    "Value": "ns-512.awsdns-00.net."
                }
            ]
        },
        {
            "Name": "test01.example.com.",
            "Type": "SOA",
            "TTL": 900,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ]
        },
        {
            "Name": "hoge.test01.example.com.",
            "Type": "A",
            "TTL": 300,
            "ResourceRecords": [
                {
                    "Value": "5.5.5.5"
                }
            ]
        }
    ]
}

レコード削除

最後に、レコード削除をやってみます。
sample.json を以下のように変更します。

{
            "Comment": "DELETE a record ",
            "Changes": [{
            "Action": "DELETE",
                        "ResourceRecordSet": {
                                    "Name": "hoge.test01.example.com",
                                    "Type": "A",
                                    "TTL": 300,
                                 "ResourceRecords": [{ "Value": "5.5.5.5"}]
}}]
}

コマンドを実行します。

$ aws route53 change-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx --change-batch file://sample.json
{
    "ChangeInfo": {
        "Id": "/change/C083149111SUUTMJ18CJF",
        "Status": "PENDING",
        "SubmittedAt": "2020-09-14T04:18:32.952000+00:00",
        "Comment": "DELETE a record "
    }
}

コマンド実行後のホストゾーンのレコード一覧を取得して、レコードが削除できていることを確認します。

更新後のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx
{
    "ResourceRecordSets": [
        {
            "Name": "test01.example.com.",
            "Type": "NS",
            "TTL": 172800,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk."
                },
                {
                    "Value": "ns-0.awsdns-00.com."
                },
                {
                    "Value": "ns-1024.awsdns-00.org."
                },
                {
                    "Value": "ns-512.awsdns-00.net."
                }
            ]
        },
        {
            "Name": "test01.example.com.",
            "Type": "SOA",
            "TTL": 900,
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ]
        }
    ]
}

さいごに

AWS CLI を使って Route53 のホストゾーンのレコード内容を変更する方法をご紹介しました。
こういった変更はマネジメントコンソールを使用することが多いと思うのですが、CLIを使って変更する機会があったので、手順を残してみました。
同じようにCLIを使って変更を行いたい方の参考になれば幸いです。

以上、コンサル部のYui(@MayForBlue)でした。

参考リンク

AWS CLI を使用して Amazon Route 53 でシンプルなリソースレコードセットを作成する方法を教えてください。
AWS CLI Command Reference Route53