Как получить идентификатор зоны AWS Route53?

Я новичок в Amazon Services и их API.

Используя класс Amazon route53Clinet, я знаю, что есть метод getHostedZone, который получает информацию о размещенной зоне на основе идентификатора. Но у меня есть случай, когда у меня есть доменное имя, и мне нужно получить идентификатор размещенной зоны может быть на основе предоставленного доменного имени? Как я могу это сделать?

1

Решение

Ты можешь использовать listHostedZones или же listHostedZonesByName опросить службу о ваших размещенных зонах.

Однако … Вам действительно нужно знать идентификатор размещенной зоны — сохранить или кэшировать его — потому что можно создать более одной размещенной зоны в Route 53 для одного и того же домена … и если ваш код искал вслепую размещенная зона по доменному имени, вы можете изменить неправильную зону … особенно если вы попали в ловушку антипаттерна, предполагая, что возможно только одно совпадение, и поэтому вы всегда выбираете первое совпадение.

В простых развертываниях будет только одна размещенная зона для каждого доменного имени, но причины, по которым у вас может быть больше одной зоны, включают частные размещенные зоны (доступные только из вашего VPC) или дубликаты общедоступных зон, где вы выполняете перестройку DNS или жесткую настройку. , Маршрут 53 позволяет создать вторую (или третью и т. Д.) Размещенную зону с 4 различными серверами имен.

Также, конечно, имеет смысл иметь эту информацию локально, чтобы избежать ненужных запросов API, которые могут стоить времени и денег. Идентификатор размещенной зоны, как вы, вероятно, заметили, также виден в консоли.

1

Другие решения

Я знаю, что это может быть старый, но я смог получить идентификатор с помощью Powershell при первоначальном создании зоны DNS, выполнив следующие действия:

$route53Script = aws route53 create-hosted-zone --delegation-set-id /delegationset/DELIGATIONID --name domain.com --caller-reference blablabla | ConvertFrom-Json
$Route53ID = $route53Script.HostedZone.Id.replace("/hostedzone/","")

Это дает мне идентификатор зоны, который я затем могу использовать в качестве переменной для этого:

aws route53 change-resource-record-sets --hosted-zone-id $Route53ID --change-batch file://C:\default.json

Я не знаю, лучший ли это способ, но он работает! Я считаю, что вы можете сделать почти то же самое в PHP. Прошло немного времени с тех пор, как я написал несколько больших скриптов на PHP.

0

Я использую интерфейс командной строки AWS и передаю результаты JSON в jq инструмент:

aws route53 list-hosted-zones-by-name |
jq --arg name "example.com." \
-r '.HostedZones | .[] | select(.Name=="\($name)") | .Id'

jq выражение выбирает каждый элемент JSON размещенной зоны, который содержит имя «example.com». Заголовок, что это может вернуть более одной записи.

Выходные данные — соответствующие строки идентификатора размещенной зоны, такие как:

/hostedzone/ABCDEF12345678

Затем вы можете перечислить наборы записей ресурсов для идентификатора размещенной зоны:

aws route53 list-resource-record-sets \
--hosted-zone-id "/hostedzone/ABCDEF12345678"
-1
По вопросам рекламы [email protected]