AWS Route53 CLI 按值列出资源记录集

AWS Route53 CLI list-resource-record-sets by Value

我需要根据Value在Route53中定位一条记录。我的 Route53 有 10,000 多条记录。 Searching by Value for a Hosted Zone with more than 2000 records is not currently supported in the web interface. So, I must resort to using the AWS Route53 CLI's list-resource-record-sets command and the --query parameter. This parameter uses JMESPath 到 select 或筛选结果集。

那么,让我们看看我们正在使用的结果集。

$ 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,但我绝对可以使用 return 处理具有 ResourceRecords.Value == 45.56.67.78 的任何记录的整个 ResourceRecordSet 对象。

我失败的尝试

// 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 CLI 来 return 以下两个记录之一 Value == 45.56.67.78?

[
    "Name": "abcdxyz.mydomain.com."
]

{
    "ResourceRecords": [
        {
            "Value": "45.56.67.78"
        }
    ],
    "Type": "A",
    "Name": "abcdxyz.mydomain.com.",
    "TTL": 300
}

应该这样做:

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