AWS
route53
aws-cli

初めてのAWS CLI 3 (Route53編)

初めてのAWS CLI 3 (Route53編)

  1. はじめに
  2. ドメイン一覧を表示
  3. ドメイン登録
  4. レコード追加
  5. レコード削除
  6. まとめ

はじめに

第3回目はRoute53を説明していきます。
個人的に使わない場合はRoute53編を読み飛ばしてもらっても構いません。

初めてのAWS CLI 1 (初期設定編)
は必須ですのでまだ設定していない方は初期設定を完了させてください。

また初期設定のIAMの設定にてRoute53へのアクセスが出来ることが前提ですのでポリシーにRoute53の権限がついていない場合は
付与してください。

ドメイン一覧を表示

Route53に設定したドメイン一覧を表示させるには以下コマンドにて出力させることができます。
登録ドメインが大量にある場合出力形式がデフォルトのjson形式だと慣れていないと
見辛いのでoutput形式をtableにすると見やすいです。

$ aws route53 list-hosted-zones --output table
----------------------------------------------------------------------------------------
|                                    ListHostedZones                                   |
+--------------------------------------------------------------------------------------+
||                                     HostedZones                                    ||
|+--------------------------------+---------------------------------------------------+|
||  CallerReference               |  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx             ||
||  Id                            |  /hostedzone/XXXXXXXXXXXXXX                       ||
||  Name                          |  xxxxxxxxx.com.(ドメイン名)                        ||
||  ResourceRecordSetCount        |  XX(レコード数)                                    ||
|+--------------------------------+---------------------------------------------------+|
|||                                      Config                                      |||
||+----------------------------+-----------------------------------------------------+||
|||  Comment                   |  (TEST) TESTTESTTESTTEST                            |||
|||  PrivateZone               |  False                                              |||
||+----------------------------+-----------------------------------------------------+||
||                                     HostedZones                                    ||
|+-----------------------------------+------------------------------------------------+|
||  CallerReference                  |  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy                ||
||  Id                               |  /hostedzone/YYYYYYYYYYYYYY                    ||
||  Name                             |  yyyyyyyy.com.                                 ||
||  ResourceRecordSetCount           |  YY                                            ||
|+-----------------------------------+------------------------------------------------+|
|||                                      Config                                      |||
||+-----------------------------+----------------------------------------------------+||
|||  Comment                    |  (TEST)TESTTESTドメイン1                            |||
|||  PrivateZone                |  False                                             |||
||+-----------------------------+----------------------------------------------------+||

ドメイン登録

一覧表示確認できたら次はRoute53にドメインを登録してみましょう。
※ドメイン取得しなくてもRoute53への登録は可能です。

$ aws route53 create-hosted-zone --name hoge.com --caller-reference "20XXXXXX-hoge.com"
{
    "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/ZZZZZZZZZZZZZ",
    "HostedZone": {
        "Id": "/hostedzone/ZZZZZZZZZZZZZ", ※1
        "Name": "hoge.com.",
        "CallerReference": "20XXXXXX-hoge.com",
        "Config": {
            "PrivateZone": false
        },
        "ResourceRecordSetCount": 2
    },
    "ChangeInfo": {
        "Id": "/change/AAAAAAAAAAAAA",
        "Status": "PENDING",
        "SubmittedAt": "2018-01-24T08:06:16.464Z"
    },
    "DelegationSet": {
        "NameServers": [
            "ns-XXX.awsdns-XX.org", ←ネームサーバー情報
            "ns-XXX.awsdns-XX.com",  ←ネームサーバー情報
            "ns-XX.awsdns-XX.net",   ←ネームサーバー情報
            "ns-XXX.awsdns-XX.co.uk" ←ネームサーバー情報
        ]
    }
}

--caller-referenceに関しては一意の識別子を入力します。

作成した日付や日付+ドメイン名で入力すると良いかと思います。今回は日付-ドメインにて例を載せています。

※1 登録時にHostedZoneの下に表示されているIDを予めコピーしてください。

    "HostedZone": {
        "Id": "/hostedzone/ZZZZZZZZZZZZZ" ←こいつ

以下コマンドを入力し登録したドメインの情報を確認してみましょう。

$ aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZZZZZZZZZZZZZ --output table
---------------------------------------------------------------------------------------
|                               ListResourceRecordSets                                |
+-------------------------------------------------------------------------------------+
||                                ResourceRecordSets                                 ||
|+----------------------------------+--------------------------+---------------------+|
||               Name               |           TTL            |        Type         ||
|+----------------------------------+--------------------------+---------------------+|
||  hoge.com.                       |  172800                  |  NS                 ||
|+----------------------------------+--------------------------+---------------------+|
|||                                 ResourceRecords                                 |||
||+---------------------------------------------------------------------------------+||
|||                                      Value                                      |||
||+---------------------------------------------------------------------------------+||
|||  ns-XXX.awsdns-XX.org.                                                          |||
|||  ns-XXX.awsdns-XX.com.                                                          |||
|||  ns-XX.awsdns-XX.net.                                                           |||
|||  ns-XXX.awsdns-XX.co.uk.                                                       |||
||+---------------------------------------------------------------------------------+||
||                                ResourceRecordSets                                 ||
|+-------------------------------------+--------------------+------------------------+|
||                Name                 |        TTL         |         Type           ||
|+-------------------------------------+--------------------+------------------------+|
||  hoge.com.                          |  900               |  SOA                   ||
|+-------------------------------------+--------------------+------------------------+|
|||                                 ResourceRecords                                 |||
||+---------------------------------------------------------------------------------+||
|||                                      Value                                      |||
||+---------------------------------------------------------------------------------+||
|||  ns-XXXX.awsdns-XX.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400  |||
||+---------------------------------------------------------------------------------+||

デフォルトで登録時にNS,SOAレコードが登録されていることをご確認いただけると思います。

※Route53で登録したドメインを実際に利用したい場合はネームサーバーを切り替える必要がありますが
今回はあくまで操作説明ですのでネームサーバー切り替えなどは行わない状態で説明を進めていきます。

レコード追加

レコード追加からややこしくなります(汗)

レコード追加をするにはコマンドラインにてAレコードはこのIPアドレスという感じで入力するのではなく、
AレコードはこのIPといったファイルを準備する必要がありますのでまず以下のファイルを準備します。

$ vi addRecords
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "hoge.com.",
        "Type": "A",
        "TTL": 120,
        "ResourceRecords": [
          {
            "Value": "111.111.111.111"
          }
        ]
      }
    }
  ]
}

Nameはドメイン登録したドメインを入力します

ValueはIPアドレスを入れます ※今回は適当なIPを入力しています

ファイルの準備が出来たら以下のコマンドにてレコードを登録します

$ aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/ZZZZZZZZZZZZZ --change-batch file://addRecords
{
    "ChangeInfo": {
        "Id": "/change/DDDDDDDDDDDD",
        "Status": "PENDING",
        "SubmittedAt": "2018-01-24T09:39:18.099Z"
    }
}

実際にAレコードが登録されたか確認してみましょう

$ aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZZZZZZZZZZZZZ --output table
---------------------------------------------------------------------------------------
|                               ListResourceRecordSets                                |
+-------------------------------------------------------------------------------------+
||                                ResourceRecordSets                                 ||
|+-------------------------------------+--------------------+------------------------+|
||                Name                 |        TTL         |         Type           ||
|+-------------------------------------+--------------------+------------------------+|
||  hoge.com.                          |  120               |  A                     ||
|+-------------------------------------+--------------------+------------------------+|
|||                                 ResourceRecords                                 |||
||+---------------------------------------------------------------------------------+||
|||                                      Value                                      |||
||+---------------------------------------------------------------------------------+||
|||  111.111.111.111                                                                |||
||+---------------------------------------------------------------------------------+||
\\以下省略//

無事登録出来ましたでしょうか?

レコード登録時にエラーが出た場合、--change-batchのファイル読み込み部分で

file://は必須ですので抜けていないかなど出力されたエラー内容を確認しましょう。

レコード削除

レコード追加時に使用したaddRecordsを使いまわしでレコード削除をしてみます。

Actionの部分をUPSERTからDELETEに変更しましょう。

$ vi addRecords
{
  "Changes": [
    {
      "Action": "DELETE",
      "ResourceRecordSet": {
        "Name": "hoge.com.",
        "Type": "A",
        "TTL": 120,
        "ResourceRecords": [
          {
            "Value": "111.111.111.111"
          }
        ]
      }
    }
  ]
}

レコード登録時と同じく以下コマンドにて反映を行います。

$ aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/ZZZZZZZZZZZZZ --change-batch file://addRecords
{
    "ChangeInfo": {
        "Id": "/change/DDDDDDDDDDDD",
        "Status": "PENDING",
        "SubmittedAt": "2018-01-26T00:11:05.651Z"
    }
}

登録時と同じく削除されたかも確認してみましょう。

$ aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZZZZZZZZZZZZZ --output table

Actionのタイプについて

Actionについての補足説明

Actionタイプは3種類あります

CREATE 追加

UPSERT 存在なければ追加、既に存在していれば更新

DELETE 削除

UPSERTは既に存在していた場合上書きされてしまうので使い方注意ですが何かと便利なので今回はUPSERTにて設定を行っています。

まとめ

いろいろ説明してきましたが...Route53の操作は面倒くさいですね。。。

プログラムで自動的にレコード追加操作したい場合は便利ですが普段利用は素直にマネジメントコンソールを使う事をおすすめしますw

まだまだ説明足りない部分多いと思いますので落ち着いたらRoute53操作チートシート的なやつを死ぬまでには作りたいなw

もっといろいろやりたい人は公式を嫁!w AWS公式(Route53)