この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンサル部の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