AWS Route 53 выполняет три основные функции:
- DNS сервера, доступные в различных локациях, что уменьшает время ответа;
- регистрация доменов;
- мониторинг приложений.
Далее будет рассмотрено добавление нового домена (зоны) и управление записями на DNS Amozon-а через консоль AWS и AWS CLI.
Переходим на https://console.aws.amazon.com/route53/home:
Создаем зону:
Указываем имя домена/зоны, комментарий и выбираем тип Public (Private используется для сетей VPC — доступ снаружи будет закрыт, подробнее — тут>>>):
Проверяем:
$ dig -t ANY azinchenko.com @ns-362.awsdns-45.com +noall +answer ; <<>> DiG 9.8.3-P1 <<>> -t ANY azinchenko.com @ns-362.awsdns-45.com +noall +answer ;; global options: +cmd azinchenko.com. 172800 IN NS ns-1102.awsdns-09.org. azinchenko.com. 172800 IN NS ns-1543.awsdns-00.co.uk. azinchenko.com. 172800 IN NS ns-362.awsdns-45.com. azinchenko.com. 172800 IN NS ns-666.awsdns-19.net. azinchenko.com. 900 IN SOA ns-362.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
По умолчанию для зоны создаются только две записи — NS
и SOA
.
Добавим еще две записи — www как CNAME
, и vault — IN A
.
Жмем Create record set, и заполняем поля:
- Name — имя записи/субдомена;
- Type: в данном случае
CNAME
:- A — address, IP к которому привязывается домен;
- AAAA — аналогично, но IPV6;
- CNAME — Canonical Name, или «алиас»;
- MX — Mail eXchange, почтовая запись домена в виде IP, на которые будет отрпавляться почта;
- TXT — text, текстовое поле для различных записейо домене/сервере etc;
- PTR — Reverse DNS, противоположность записи
IN A
— указывает имя домена для IP (а не IP для домена); - SRV — Service record, по аналогии с
MX
используется для указания различных сервисов (телефония, XMPP); - SPF — Sender Policy Framework, для подтверждения отправителя почты;
- NS — Name Server, обслуживающие данную зону;
- SOA — Start of Authority, «входная точка» всей информации о доменной зоне, нельзя менять в Route 53 (но можно в своем личном BIND :-)).
- Alias — расширения самого Amazon для DNS. Позволяет подключить запись к определенному сервису (S3, CloudFront etc);
- TTL — время хранения данных о домене в кеше других DNS, браузеров и т.д.;
- Value — в данном случае тут указывается алиас для создаваемого субдомена. Примеры для других типов записей есть тут>>>;
- Routing Policy — определяет как Route 53 будет отдавать информацию о записи:
- Simple — просто возвращает значения, заданные для записи;
- Weighted — «взвешенная» политика, может вернуть один из нескольких значений, в зависимости от заданного распределения (1 раз — одно значение, 3 раза — другое);
- Latency — ответ зависит от времени ожидания ресурсов, заданных в Value;
- Failover — «отказоустойчивая» политика — всегда возвращает один ресурс (Primary), если он доступен, иначе — второй (Secondary);
- Geolocation — ответ зависит от расположения источника запроса.
Сохраняем — жмем Create.
Добавляем вторую запись, на этот раз — через AWS CLI.
С помощью list-hosted-zones
находим список зон:
$ aws route53 list-hosted-zones { "HostedZones": [ { "ResourceRecordSetCount": 3, "CallerReference": "3DA3D308-C20C-FE5F-A423-652F92B9FB08", "Config": { "Comment": "RTFM example", "PrivateZone": false }, "Id": "/hostedzone/Z2W76WVFMAMGZQ", "Name": "azinchenko.com." } ] }
Используя ID — получаем JSON-файл со всеми записями зоны на данный момент:
$ aws route53 list-resource-record-sets --hosted-zone-id Z2W76WVFMAMGZQ { "ResourceRecordSets": [ { "ResourceRecords": [ { "Value": "ns-362.awsdns-45.com." }, { "Value": "ns-1102.awsdns-09.org." }, { "Value": "ns-666.awsdns-19.net." }, { "Value": "ns-1543.awsdns-00.co.uk." } ], "Type": "NS", "Name": "azinchenko.com.", "TTL": 172800 }, { "ResourceRecords": [ { "Value": "ns-362.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ], "Type": "SOA", "Name": "azinchenko.com.", "TTL": 900 }, { "ResourceRecords": [ { "Value": "azinchenko.com" } ], "Type": "CNAME", "Name": "www.azinchenko.com.", "TTL": 300 } ] }
Далее — создаем JSON-файл с описанием новой записи. Формат зависит от политики роутинга, примеры можно найти тут>>>.
Сейчас требуется добавить новую запись — vault.azinchenko.com IN A 52.31.77.193.
Создаем файл, например — vault.azinchenko.com.json
с таким содержимым:
{ "Comment": "A new record set for RTFM post.", "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "ResourceRecords": [ { "Value": "52.31.77.193" } ], "Type": "A", "Name": "vault.azinchenko.com.", "TTL": 300 } } ] }
Обратите внимание на Action — UPSERT
для обновления зоны. Второй нюанс — указание точки после имени новой записи:
"Name": "vault.azinchenko.com.",
Которая является указателем на корневую зону.
Выполняем change-resource-record-sets
:
$ aws route53 change-resource-record-sets --hosted-zone-id Z2W76WVFMAMGZQ --change-batch file://vault.azinchenko.com.json { "ChangeInfo": { "Status": "PENDING", "Comment": "A new record set for RTFM post.", "SubmittedAt": "2016-02-24T15:54:42.312Z", "Id": "/change/CY4PEHBGW01ZC" } }
Проверяем:
$ aws route53 list-resource-record-sets --hosted-zone-id Z2W76WVFMAMGZQ { "ResourceRecordSets": [ { "ResourceRecords": [ { "Value": "ns-362.awsdns-45.com." }, { "Value": "ns-1102.awsdns-09.org." }, { "Value": "ns-666.awsdns-19.net." }, { "Value": "ns-1543.awsdns-00.co.uk." } ], "Type": "NS", "Name": "azinchenko.com.", "TTL": 172800 }, { "ResourceRecords": [ { "Value": "ns-362.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ], "Type": "SOA", "Name": "azinchenko.com.", "TTL": 900 }, { "ResourceRecords": [ { "Value": "52.31.77.193" } ], "Type": "A", "Name": "vault.azinchenko.com.", "TTL": 300 }, { "ResourceRecords": [ { "Value": "azinchenko.com" } ], "Type": "CNAME", "Name": "www.azinchenko.com.", "TTL": 300 } ] }
И dig
:
$ dig vault.azinchenko.com @ns-362.awsdns-45.com +noall +answer ; <<>> DiG 9.8.3-P1 <<>> vault.azinchenko.com @ns-362.awsdns-45.com +noall +answer ;; global options: +cmd vault.azinchenko.com. 300 IN A 52.31.77.193
В консоли AWS:
Последний шаг — обновить NS записи у регистратора:
Почитать по DNS и BIND можно тут (правда — записям почти 4 года):