Deleting Route 53 Zones That Contain Records:
Route 53 zones cannot be deleted if they contain records and there’s not a quick easy way to do purge a domain other than something like this. Pass in your zone id, and this will handle the rest.
#!/bin/bash
define(){ IFS='\n' read -r -d '' $1 || true; }
JSON_FILE=`mktemp`
ZONE_ID=$1
for i in `aws --no-verify-ssl route53 list-resource-record-sets --hosted-zone-id "$ZONE_ID" | jq -c '.[][]' | grep -Ev 'SOA|NS'`; do
# This is beacuse of artifact with ssl intercepts at my org. Wont hurt to leave it
echo "$i" | grep "Name" > /dev/null
if [ $? != 0 ]; then
continue
fi
DNS_NAME=`echo "$i" | jq -r .Name`
RECORD_TYPE=`echo "$i" | jq -r .Type`
TTL=`echo "$i" | jq -r .TTL`
RESOURCE_RECORDS=`echo "$i" | jq -r .ResourceRecords`
define DELETE_JSON <<EOC
cat <<EOF > $JSON_FILE
{
"Comment": "Delete single record set",
"Changes": [
{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "$DNS_NAME",
"Type": "$RECORD_TYPE",
"TTL": $TTL,
"ResourceRecords": $RESOURCE_RECORDS
}
}
]
}
EOF
EOC
eval "$DELETE_JSON"
aws --no-verify-ssl route53 change-resource-record-sets --hosted-zone-id "$ZONE_ID" --change-batch file://$JSON_FILE
aws --no-verify-ssl route53 delete-hosted-zone --id $ZONE_ID
done


