ハンズオンの後始末として、使わないドメインのhosted zoneを削除します。
前提条件
Route53への権限
Route53に対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.10.38
aws --version
aws-cli/1.10.38 Python/2.7.11 Darwin/15.5.0 botocore/1.4.28
- 準備
=======
0.1. リージョンの決定
構築するリージョンを決めます。 (カレントユーザが利用するカレントリージョンも切り変わります。)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. 変数の確認
プロファイルが想定のものになっていることを確認します。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile administrator-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
AssumeRoleを利用している場合はprofileが ''と表示されます。 それ以外のときにprofileが '' と表示される場合は、以下を実行してください。
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
0.3. 削除対象サブドメインの指定
Route53から削除するサブドメインを決めます。
バケットの作成 (独自ドメイン)
( http://qiita.com/tcsh/items/1f707443e667b6b3c8cf )で独自ドメイン用のバケットが対象であれば、下記のように変数にドメイン名を格納します。
R53_ZONE_NAME="${DOMAIN_NAME}" \
&& echo ${R53_ZONE_NAME}
0.4. hosted zone idの取得
削除するドメインのhosted zone idを取得します。
R53_ZONE_ID=$( \
aws route53 list-hosted-zones \
--query "HostedZones[?Name == \`${R53_ZONE_NAME}.\`].Id" \
--output text \
| sed 's/\/hostedzone\///' \
) && echo ${R53_ZONE_ID}
Zxxxxxxxxxxxx
- 事前作業
===========
(なし)
- 全レコードの削除
===================
hosted zoneを削除するには、登録されている全レコードをあらかじめ削除しておく必要があります。
2.1. 登録レコードの確認
登録レコードを確認します。
aws route53 list-resource-record-sets \
--hosted-zone-id /hostedzone/${R53_ZONE_ID} \
--query 'ResourceRecordSets[?Type != `SOA`]'
[
{
"ResourceRecords": [
{
"Value": "ns-xxx.awsdns-xx.co.uk."
},
{
"Value": "ns-xxx.awsdns-xx.net."
},
{
"Value": "ns-xxx.awsdns-xx.com."
},
{
"Value": "ns-xxx.awsdns-xx.org."
}
],
"Type": "NS",
"Name": "example.jp.",
"TTL": 172800
},
{
"AliasTarget": {
"HostedZoneId": "Z3BJ6K6RIION7M",
"EvaluateTargetHealth": false,
"DNSName": "s3-website-ap-northeast-1.amazonaws.com."
},
"Type": "A",
"Name": "www.example.jp."
}
]
ここに表示されたリソースレコードのうち、登録したゾーンのNS以外のレコードを削除する必要があります。
2.2. 削除レコードセットの作成
削除するリソースレコードセットの定義をJSON形式で記述します。
R53_RRSET_NAME="www.${R53_ZONE_NAME}"
R53_RRSET_TYPE='A'
R53_ACTION='DELETE'
DNS_NAME='s3-website-ap-northeast-1.amazonaws.com.'
FILE_INPUT='delete.json'
cat << ETX
R53_RRSET_NAME: ${R53_RRSET_NAME}
R53_RRSET_TYPE: ${R53_RRSET_TYPE}
R53_ACTION: ${R53_ACTION}
DNS_NAME: ${DNS_NAME}
FILE_INPUT: ${FILE_INPUT}
ETX
cat << EOF > ${FILE_INPUT}
{
"Changes": [
{
"Action": "${R53_ACTION}",
"ResourceRecordSet": {
"Name": "${R53_RRSET_NAME}.",
"Type": "${R53_RRSET_TYPE}",
"AliasTarget": {
"HostedZoneId": "${S3_HOSTED_ZONE_ID}",
"DNSName": "${DNS_NAME}",
"EvaluateTargetHealth": false
}
}
}
]
}
EOF
cat ${FILE_INPUT}
JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。
jsonlint -q ${FILE_INPUT}
エラーが出力されなければOKです。
2.3. レコードの削除
実際にレコードを削除します。
cat << ETX
R53_ZONE_ID: ${R53_ZONE_ID}
FILE_INPUT: ${FILE_INPUT}
ETX
aws route53 change-resource-record-sets \
--hosted-zone-id ${R53_ZONE_ID} \
--change-batch file://${FILE_INPUT}
{
"ChangeInfo": {
"Status": "PENDING",
"SubmittedAt": "2014-05-27T07:56:56.970Z",
"Id": "/change/CXXXXXXXXXXXXX"
}
}
2.4. 繰り返し
残登録レコードを確認します。
aws route53 list-resource-record-sets \
--hosted-zone-id /hostedzone/${R53_ZONE_ID} \
--query 'ResourceRecordSets[?Type != `SOA`]'
[
{
"ResourceRecords": [
{
"Value": "ns-xxx.awsdns-xx.co.uk."
},
{
"Value": "ns-xxx.awsdns-xx.net."
},
{
"Value": "ns-xxx.awsdns-xx.com."
},
{
"Value": "ns-xxx.awsdns-xx.org."
}
],
"Type": "NS",
"Name": "example.jp.",
"TTL": 172800
}
]
ゾーンのNSレコード以外のリソースレコードがなくなるまで、リソースレコードの削除を繰り返します。
- hosted zoneの削除
====================
SOAレコード、NSレコード以外のリソースレコードを削除が完了したら、hosted zoneを削除します。
cat << ETX
R53_ZONE_ID: ${R53_ZONE_ID}
ETX
aws route53 delete-hosted-zone \
--id ${R53_ZONE_ID}
{
"ChangeInfo": {
"Status": "PENDING",
"SubmittedAt": "6月 20, 2016T01:23:45.678Z",
"Id": "/change/CXXXXXXXXXXXXX"
}
}
- 事後作業
===========
削除確認
削除対象のドメインがhosted zoneの一覧に無ければ、削除は完了しています。
aws route53 list-hosted-zones
{
"HostedZones": []
}