Amazon-Route-53

AWS CLIでRoute53のホストゾーン作成からやってみた

ごあいさつ

こんばんは。まだまだたまごエンジニアのもに倉です。
今回は、最近私がハマっているAWS CLIを使って、Route53のホストゾーン作成から、
レコードの追加・削除、最後にホストゾーンの削除までを
行っていこうと思います。

Amazon CLIを使う利点

「コンソールからぽちぽちでできるからわざわざCLI使わなくてもいいんじゃない?」
と思う方もいらっしゃるかもしれません。
実際、コンソールから作業するのは直感的でとてもやりやすいです。
しかし、誰かに作業のやり方を教えるとき、「右端のボタンを押して~」と伝えるよりも、
CLIのコマンドを教えるほうがミスがないと思います。
「使えなくても大丈夫だけど、使えると便利」
これが、CLIを使う理由です。

環境

今回は、すぐにAWS CLIを使うことができて便利なCloud Shellを使います。

[cloudshell-user@ip-10-0-81-97 ~]$ aws --version
aws-cli/2.2.15 Python/3.8.8 Linux/4.14.238-182.422.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

ホストゾーン作成

作成

それでは、早速ホストゾーンを作っていきます。

ホストゾーンネーム:hogemoni.com

aws route53 create-hosted-zone --name hogemoni.com --caller-reference `date +%Y-%m-%d_%H-%M-%S`

これだけでOKです。

確認

できたかどうか確認します。

aws route53 list-hosted-zones

このコマンドでRoute53にあるホストゾーンの一覧を見ることができます。
いっぱいあるよって人は、さっき作ったはずのホストゾーンネームで検索しましょう。

{
    "HostedZones": [
        {
        (略)
        {
            "Id": "/hostedzone/Z01363732OJ20G9YLROAW",
            "Name": "hogemoni.com.",
            "CallerReference": "2021-09-01_01-52-27",
            "Config": {
                "PrivateZone": false
            },
            "ResourceRecordSetCount": 2
        }
        (略)

ばっちりできています。

ここで、ホストゾーンIDを控えておきましょう(後で使います)。
hogemoni.comのホストゾーンIDは
"Id": "/hostedzone/Z01363732OJ20G9YLROAW"
これです。

レコードをいじる

レコードの作成・削除は、
jsonファイルを作成し、それを読み込む形になっています。
同一のjsonファイルに記述すれば
新しいレコードの作成・既存のレコードの削除を
まとめて行うことができますが、今回はひとつずつ紹介していきます。

レコード作成

jsonファイル作成

レコード作成用のjsonファイルを作ります。
今回作るレコードは以下の通りです。

レコード名:somosan.hogemoni.com
レコードタイプ:CNAME
TTL:3600
値:seppa.monihoge.com

{
        "Comment": "CREATE a record ",
        "Changes": [
                {
                        "Action": "CREATE",
                        "ResourceRecordSet": {
                                "Name": "somosan.hogemoni.com.",
                                "Type": "CNAME",
                                "TTL": 3600,
                                "ResourceRecords": [
                                        {
                                                "Value": "seppa.monihoge.com."
                                        }
                                ]
                        }
                }
        ]
}

上記の内容が書かれたファイルを、任意の名前&任意の場所で保存します。
今回は「create.json」という名前で保存しました。

jsonファイルを読み込ませる

では、作成したjsonファイルを読み込んでもらって、レコードを作りましょう。

aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/Z01363732OJ20G9YLROAW --change-batch file://create.json

※--hosted-zone-idは上のほうで出したホストゾーンIDです。
※/hostedzone/ は記述しなくても動作は同じです。
このコマンドを打った後、

{
    "ChangeInfo": {
        "Id": "/change/C0787101355N5JJZGK56R",
        "Status": "PENDING",
        "SubmittedAt": "2021-09-01T07:09:04.347000+00:00",
        "Comment": "CREATE a record "
    }
}

こんなかんじでレコード変更IDが生成されれば成功です。
なにも返ってこないときはどこかでミスってます。

aws route53 get-change --id /change/C0787101355N5JJZGK56R

このコマンドで、レコード変更の進捗確認ができます。
※--id はレコード変更IDです。
※/change/ は記述しなくても動作は同じです。

{
    "ChangeInfo": {
        "Id": "/change/C0787101355N5JJZGK56R",
        "Status": "INSYNC",
        "SubmittedAt": "2021-09-01T07:09:04.347000+00:00",
        "Comment": "CREATE a record "
    }
}

ステータスがPENDINGからINSYNCに変われば完了。レコードが無事作成されました。

作成されたレコードの確認

aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/Z01363732OJ20G9YLROAW

このコマンドでレコード一覧が見れます。

    (略)
        {
            "Name": "somosan.hogemoni.com.",
            "Type": "CNAME",
            "TTL": 3600,
            "ResourceRecords": [
                {
                    "Value": "seppa.moni.hoge.com."
                }
            ]
        }
    ]
}

ばっちりできていますね。

レコードの削除

では、この出来立てほやほやのレコードを削除していきます。
ほとんど作成時と手順は一緒です(jsonファイルの一部が違うだけ)。

jsonファイル作成

レコード削除用のjsonファイルを作ります。

{
        "Comment": "DELETE a record ",
        "Changes": [
                {
                        "Action": "DELETE",
                        "ResourceRecordSet": {
                                "Name": "somosan.hogemoni.com.",
                                "Type": "CNAME",
                                "TTL": 3600,
                                "ResourceRecords": [
                                        {
                                                "Value": "seppa.monihoge.com."
                                        }
                                ]
                        }
                }
        ]
}

上記の内容が書かれたファイルを、任意の名前&任意の場所で保存します。
今回は例によって「delete.json」という名前で保存しました。

jsonファイルを読み込ませる

では、作成したjsonファイルを読み込んでもらって、レコードを消しましょう。

aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/Z01363732OJ20G9YLROAW --change-batch file://delete.json

このコマンドを打った後、

{
    "ChangeInfo": {
        "Id": "/change/C01782873VL70O40JNZNU",
        "Status": "PENDING",
        "SubmittedAt": "2021-09-01T07:25:03.741000+00:00",
        "Comment": "DELETE a record "
    }
}

こんなかんじでレコード変更IDが生成されれば成功です。

aws route53 get-change --id /change/C01782873VL70O40JNZNU

このコマンドで確認して、

{
    "ChangeInfo": {
        "Id": "/change/C01782873VL70O40JNZNU",
        "Status": "INSYNC",
        "SubmittedAt": "2021-09-01T07:25:03.741000+00:00",
        "Comment": "DELETE a record "
    }
}

ステータスがPENDINGからINSYNCに変われば完了。レコードが無事削除されました。

削除されたレコードの確認

aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/Z01363732OJ20G9YLROAW

削除したレコードがなければOKです。
ちゃんとレコードが削除されていることが確認できました。

ホストゾーン削除

では、最後の後片付けです。

aws route53 delete-hosted-zone --id /hostedzone/Z01363732OJ20G9YLROAW

このコマンドでホストゾーンを消しちゃいます。

{
    "ChangeInfo": {
        "Id": "/change/C09321923KLU6A370XSPW",
        "Status": "PENDING",
        "SubmittedAt": "2021-09-01T07:29:57.670000+00:00"
    }
}

レコードを変更したときと同じように、変更IDが返ってきますので

aws route53 get-change --id /change/C09321923KLU6A370XSPW

これまた同じようにこのコマンドでステータスを確認。

{
    "ChangeInfo": {
        "Id": "/change/C09321923KLU6A370XSPW",
        "Status": "INSYNC",
        "SubmittedAt": "2021-09-01T07:29:57.670000+00:00"
    }
}

ステータスがPENDINGからINSYNCに変われば無事削除完了です。

削除されたか確認

aws route53 list-hosted-zones 

ちゃちゃっと確認。
無事削除されていました!

あとがき

できなくてもいいけど、できると便利なCLIでの作業でした。
やっぱりCLIをいじれるとかっこいい気がするので、これからもバンバン使っていきたいと思います。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA