Som*_*ver 5 amazon-web-services aws-cli jmespath
我正在尝试根据某些标签条件在我的 AWS 中查找资源。我一直在使用jq它来实现它,但是有没有使用的方法resourcegroupstaggingapi,因此它们提供了一种直接的方法来过滤缺少任何指定标签的资源。
我有 2 个用例,这就是我使用 jq 过滤它们的方式:
aws resourcegroupstaggingapi get-resources --tags-per-page 100 | jq '.ResourceTagMappingList | map(select(.Tags[] | select(.Key == "SV") and select(.Key != "DM")))'aws resourcegroupstaggingapi get-resources --tags-per-page 100 | jq '.ResourceTagMappingList | map(select(.Tags[] | (.Key | IN("CostCenter", "Environment", "Team",) | not)))'我尝试在不使用 jq 的情况下执行相同的操作,如下所示:
aws resourcegroupstaggingapi get-resources --tag-filters "Key=SV,Values=*" "Key=DM,Values=NULL"aws resourcegroupstaggingapi get-resources --tag-filters "Key=CostCenter,Values=" "Key=Environment,Values=" "Key=Team,Values="但是使用 jq 我可以获得两者的输出,但是如果没有 jq,我只会得到两者的空结果
{
"ResourceTagMappingList": []
}
Run Code Online (Sandbox Code Playgroud)
我到底做错了什么?
tag-filters选项似乎不支持否定。作为解决方法,您可以将--query客户端过滤选项与该not_null函数结合使用。
因此,对于“当 SV 标签存在但 DM 不存在时”的条件,您可以使用:
$ aws resourcegroupstaggingapi get-resources --tags-per-page 100 --query \
'ResourceTagMappingList[?not_null(Tags[?Key==`SV`]) && !not_null(Tags[?Key==`DM`])]'
Run Code Online (Sandbox Code Playgroud)
对于“当 CostCenter、环境或团队标签不存在时”的条件,您可以使用:
$ aws resourcegroupstaggingapi get-resources --tags-per-page 100 --query \
'ResourceTagMappingList[?!not_null(Tags[?Key==`CostCenter`]) || !not_null(Tags[?Key==`Environment`]) || !not_null(Tags[?Key==`Team`])]'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |