[JAWS-UG CLI] Route53:#5 Aレコードの登録

このハンズオンでは、Route53で管理しているドメインにAレコードを登録してみます。

前提条件
========

- Route53へのフルアクセス権限
- hosted zoneの作成が完了している。


0. 事前作業
===========

0.1. レコードデータセットの作成
-------------------------------

リソースレコードセットの定義をJSON形式で記述します。

```bash:command:
R53_ZONE_NAME='example.jp'
R53_NODE_NAME="test.${R53_ZONE_NAME}"
R53_ACT='CREATE'
R53_TYPE='A'
R53_VALUE='192.0.2.1'
R53_TTL='86400'
FILE_R53_RECORD_SET='create-a.json'
```

```bash:command:
cat << EOF > ${FILE_R53_RECORD_SET}
  {
     "Changes": [
       {
         "Action": "${R53_ACT}",
         "ResourceRecordSet": {
           "Name": "${R53_NODE_NAME}.",
           "ResourceRecords": [
             {
               "Value": "${R53_VALUE}"
             }
           ],
           "Type": "${R53_TYPE}",
           "TTL": ${R53_TTL}
         }
       }
     ]
  }
EOF
```


```json:create-a.json(sample):
{
     "Changes": [
       {
         "Action": "CREATE",
         "ResourceRecordSet": {
           "Name": "test.example.jp.",
           "ResourceRecords": [
             {
               "Value": "192.0.2.1"
             }
           ],
           "Type": "A",
           "TTL": 86400
         }
       }
     ]
}
```

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認しましょう。

```bash:command:
jsonlint -q ${FILE_R53_RECORD_SET} 
```

```text:result:
(戻り値なし)
```


0.2. hosted zone idの取得
-------------------------

Aレコードを登録するドメインのhosted zone idを取得します。

```bash:command:
R53_ZONE_ID=$( \
        aws route53 list-hosted-zones \
          --query "HostedZones[?Name == \`${R53_ZONE_NAME}.\`].Id" \
          --output text \
        | sed 's/\/hostedzone\///' \
) && echo ${R53_ZONE_ID}
```

```text:result(sample):
ZXXXXXXXXXXXXX
```


1. Aレコードの作成
==================

Aレコードを作成します。

```bash:command:
aws route53 change-resource-record-sets \
  --hosted-zone-id ${R53_ZONE_ID} \
  --change-batch file://${FILE_R53_RECORD_SET}
```

```json:result:
{
       "ChangeInfo": {
           "Status": "PENDING", 
           "SubmittedAt": "2014-05-27T07:56:56.970Z", 
           "Id": "/change/CXXXXXXXXXXXXX"
       }
}
```

2. Aレコードの確認
==================

Aレコードが作成されたことを確認します。

```bash:command:
aws route53 list-resource-record-sets \
  --hosted-zone-id /hostedzone/${R53_ZONE_ID}
```

```json:result:
{
       "ResourceRecordSets": [
           {
               "ResourceRecords": [
                   {
                       "Value": "ns-X.awsdns-XX.com."
                   }, 
                   {
                       "Value": "ns-XXXX.awsdns-XX.co.uk."
                   }, 
                   {
                       "Value": "ns-XXX.awsdns-XX.net."
                   }, 
                   {
                       "Value": "ns-XXXX.awsdns-XX.org."
                   }
               ], 
               "Type": "NS", 
               "Name": "example.jp.", 
               "TTL": 172800
           }, 
           {
               "ResourceRecords": [
                   {
                       "Value": "ns-8.awsdns-01.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                   }
               ], 
               "Type": "SOA", 
               "Name": "example.jp.", 
               "TTL": 900
           }, 
           {
               "ResourceRecords": [
                   {
                       "Value": "192.0.2.1"
                   }
               ], 
               "Type": "A", 
               "Name": "test.example.jp.", 
               "TTL": 86400
           }, 
           {
               "AliasTarget": {
                   "HostedZoneId": "ZXXXXXXXXXXXXX", 
                   "EvaluateTargetHealth": false, 
                   "DNSName": "s3-website-us-east-1.amazonaws.com."
               }, 
               "Type": "A", 
               "Name": "www.example.jp."
           }
       ]
}
```

* 今回作成したAエイリアスレコードの登録内容は、"Type":"A"が含まれるブロックに反映されています。


3. インターネット上での名前解決確認
===================================

インターネットに接続されたホストで、登録したAレコードが名前解決できることを確認します。

```bash:command:
dig ${R53_NODE_NAME} |grep ^${R53_NODE_NAME}
```


```text:result:
www.example.jp.               60      IN      A       xxx.xxx.xxx.xxx
```


4. ホストへのアクセス確認
=========================

実際にホストにアクセスしてみます。(このハンズオンではpingを打ってみます。)

```bash:command:
ping -c 3 ${R53_NODE_NAME}
```

```text:result:
   PING test.example.jp (192.0.2.1): 56 data bytes
   64 bytes from 192.0.2.1: icmp_seq=0 ttl=58 time=72.463 ms
   64 bytes from 192.0.2.1: icmp_seq=1 ttl=58 time=12.172 ms
   64 bytes from 192.0.2.1: icmp_seq=2 ttl=58 time=12.750 ms

   --- test.example.jp ping statistics ---
   3 packets transmitted, 3 packets received, 0.0% packet loss
   round-trip min/avg/max/stddev = 12.172/32.462/72.463/28.286 ms
```

完了
====

以上で、Route53へのAレコードの登録作業は完了です。