如何使用 JMESPath 通过 DBInstanceIdentifier 查询 AWS CLI RDS 实例

How to use JMESPath to query AWS CLI RDS instances by DBInstanceIdentifier

我需要一个与名称中的字符串 "foobar" 匹配的 RDS DBInstanceIdentifier 列表。我找到了许多完全匹配的解决方案,但没有子字符串匹配。我的方法如下所示:

我使用以下方法获得了所有 DBInstanceIdentifier 的列表:

aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier][]" 看起来像

[
    "machine-001-alice-abcdefg", 
    "machine-002-bob-abcdefg", 
    "machine-003-foobar-abcdefg"
]

在列表中,我应用了 last example of the JMSES Tutorial

中的过滤器

aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier][]|[?contains(@,'dev') =='true']"

如果我将语句更改为 != 我会得到完整的列表,所以我的过滤器语句似乎有误。

true 需要反引号而不是引号,然后似乎需要转义反引号 - 不同的 shell 可能会有所不同。

aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier][]|[?contains(@,'dev')==\`true\`]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier][]|[?contains(@,'dev')!=\`true\`]"

你也可以省略与 true 的比较,但我无法成功反转它

aws --profile pollen-nonprod rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier][]|[?contains(@,'dev')]"

(我通常会用 jq 做这种事情,但这是一个不同的解决方案,不一定是更好的解决方案)