根据标签筛选EC2实例



我试图过滤没有所需标记的实例。例如,我有一堆EC2与键:应用程序和值:prod。我试图做的是,它应该循环遍历实例并列出没有预期键和值的实例。它应该验证键和值。此外,如果它基于区分大小写的东西,那就太好了。

{
"Key": "app",
"ResourceType": "instance",
"Value": "prod"
}

如果实例有上述格式的标记,则应列出。如果它没有标签键:app和值:prod或者有像

这样区分大小写的标签
{
"Key": "App",
"ResourceType": "instance",
"Value": "Prod"
}

或具有不同值的值

{
"Key": "app",
"ResourceType": "instance",
"Value": "production"
}

它应该过滤。

目前我尝试使用下面的命令

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:environment,Values=deveu" | jq -r '.Reservations[].Instances[] | select(contains({Tags: [{Key: "app"}, {Value: "prod"}]}) | not).Tags | .[] | select(.Key == "Name").Value'

但是它不查找值字段。它只考虑键,如果它看到app它跳过。

预期输出应该列出没有标签的实例key: app和value: prod。如果我们能区分大小写的话,那就更好了。

感谢

有关此主题的精彩示例列表,请参见:查找所有没有特定标记的Amazon AWS实例

该页旨在查找没有特定标记的实例。,但不能直接回答你的问题,寻找没有键+值组合的实例。

以该页中的示例为例,我设法创建了这个查询,该查询显示了没有Key=appValue=prod的任何实例的InstanceId:

aws ec2 describe-instances --query 'Reservations[].Instances[?!not_null(Tags[?Key == `app` && Value == `prod`].Value)] | [].InstanceId'

这取决于你所说的" list out ";和";filter"。给定以下虚构输入:

{
"Reservations": [
{
"Instances": [
{
"Key": "app",
"ResourceType": "instance1",
"Value": "prod"
},
{
"Key": "App",
"ResourceType": "instance2",
"Value": "Prod"
},
{
"Key": "app",
"ResourceType": "instance3",
"Value": "production"
}
]
}
]
}

这将选择(=保留)两个字段不等于各自值的项(使用and!=):

.Reservations[].Instances[] | select(.Key != "app" and .Value != "prod")
{
"Key": "App",
"ResourceType": "instance2",
"Value": "Prod"
}

这将选择(=keep)至少有一个字段不等于其各自的值(使用or!=)的项:

.Reservations[].Instances[] | select(.Key != "app" or .Value != "prod")
{
"Key": "App",
"ResourceType": "instance2",
"Value": "Prod"
}
{
"Key": "app",
"ResourceType": "instance3",
"Value": "production"
}

这将选择(=保留)两个字段等于它们各自值的项(使用and==):

.Reservations[].Instances[] | select(.Key == "app" and .Value == "prod")
{
"Key": "app",
"ResourceType": "instance1",
"Value": "prod"
}

最新更新