Мне нужно найти запись в Route53 на основе значения. Мой Route53 имеет более 10000 записей. Поиск по значению для размещенной зоны с более чем 2000 записей в настоящее время не поддерживается в веб-интерфейсе. Итак, я должен прибегнуть к использованию команды CLI *1003* CLI list-resource-records-sets CLI * AWS Route53 и параметра --query
. Этот параметр использует JMESPath для выбора или фильтрации набора результатов.
Итак, давайте посмотрим на набор результатов, с которым мы работаем.
$ aws route53 list-resource-record-sets --hosted-zone-id Z3RB47PQXVL6N2 --max-items 5 --profile myprofile
{
"NextToken": "eyJTdGFydFJlY29yZE5hbWUiOiBudWxsLCAiU3RhcnRSZWNvcmRJZGVudGlmaWVyIjogbnVsbCwgIlN0YXJ0UmVjb3JkVHlwZSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDV9",
"ResourceRecordSets": [
{
"ResourceRecords": [
{
"Value": "ns-1264.awsdns-30.org."
},
{
"Value": "ns-698.awsdns-23.net."
},
{
"Value": "ns-1798.awsdns-32.co.uk."
},
{
"Value": "ns-421.awsdns-52.com."
}
],
"Type": "NS",
"Name": "mydomain.com.",
"TTL": 300
},
{
"ResourceRecords": [
{
"Value": "ns-1264.awsdns-30.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
}
],
"Type": "SOA",
"Name": "mydomain.com.",
"TTL": 300
},
{
"ResourceRecords": [
{
"Value": "12.23.34.45"
}
],
"Type": "A",
"Name": "abcdefg.mydomain.com.",
"TTL": 300
},
{
"ResourceRecords": [
{
"Value": "34.45.56.67"
}
],
"Type": "A",
"Name": "zyxwvut.mydomain.com.",
"TTL": 300
},
{
"ResourceRecords": [
{
"Value": "45.56.67.78"
}
],
"Type": "A",
"Name": "abcdxyz.mydomain.com.",
"TTL": 300
}
]
}
В идеале мне нужно найти ResourceRecordSets.Name
, но я определенно могу работать с возвратом всего объекта ResourceRecordSet
любой записи, которая имеет ResourceRecords.Value == 45.56.67.78
.
Мои неудачные попытки
// My first attempt was to use filters on two levels, but this always returns an empty array
ResourceRecordSets[?Type == 'A'].ResourceRecords[?Value == '45.56.67.78'][]
[]
// Second attempt came after doing more research on JMESPath. I could not find any good examples using filters on two levels, so I do not filter on ResourceRecordSets
ResourceRecordSets[*].ResourceRecords[?Value == '45.56.67.78']
[
[],
[],
[
{
"Value": "45.56.67.78"
}
],
[],
[]
]
После долгого избиения головой о стол я решил проконсультироваться с экспертами. Используя приведенный выше пример, как я могу использовать JMESPath и интерфейс командной строки AWS Route53, чтобы вернуть одно из двух следующих значений для записей с Value == 45.56.67.78
?
[
"Name": "abcdxyz.mydomain.com."
]
OR
{
"ResourceRecords": [
{
"Value": "45.56.67.78"
}
],
"Type": "A",
"Name": "abcdxyz.mydomain.com.",
"TTL": 300
}