Наборы списков ресурсов CLI AWS Route53 по значению - PullRequest
0 голосов
/ 04 мая 2018

Мне нужно найти запись в 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
}

1 Ответ

0 голосов
/ 06 мая 2018

Это должно сделать:

aws route53 list-resource-record-sets --hosted-zone-id Z3RB47PQXVL6N2 --query "ResourceRecordSets[?ResourceRecords[?Value == '45.56.67.78'] && Type == 'A'].Name"
...