我在AWS中有一些实例。我想通过特殊标签获取这些应用程序。
我的AWS CLI
命令,通过标签IAMOWNER
:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Owner,Values=IAMOWNER" --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key=='Name'].Value[]]" --region us-west-2
此命令的输出:
[
[
[
"i-d21eei21e912e0e91",
"192.168.1.203",
[
"mycentralapplication-DEV-10"
]
]
],
[
[
"i-ddaswed1e12415155",
"192.168.1.210",
[
"mycentralapplication-DEV-103"
]
]
],
[
[
"i-dass1241211agh354",
"192.168.1.202",
[
"myindexapplication-DEV-53"
]
]
],
[
[
"i-2143214251assaa11",
"192.168.1.211",
[
"myserviceapplication-DEV-52"
]
]
],
[
[
"i-d2112421521assas1",
"192.168.1.207",
[
"mycentralapplication-DEV-10"
]
]
],
[
[
"i-sadas11112424111a",
"192.168.1.196",
[
"myapplication-DEV-106"
]
]
]
]
问题。例如,如何通过bash
或shell
库中jq
获取mycentralapplication
元素? 例如,我只需要在输出中接收mycentralapplication
[
[
[
"i-d21eei21e912e0e91",
"192.168.1.203",
[
"mycentralapplication-DEV-10"
]
]
],
[
[
"i-ddaswed1e12415155",
"192.168.1.210",
[
"mycentralapplication-DEV-103"
]
]
],
[
[
"i-d2112421521assas1",
"192.168.1.207",
[
"mycentralapplication-DEV-10"
]
]
]
]
我该怎么做?
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Owner,Values=IAMOWNER" --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key=='Name'].Value[]]" --region us-west-2 | jq -r "mycentralapplication"
在这种情况下,我返回错误。问题是,可以通过jq
解决此任务吗?或者我必须使用grep
等...?
您可以使用此 jq 脚本:
aws ... | jq 'map(select(.[][][]?|contains("mycentralapplication")))'
这将选择包含字符串的所有嵌套数组元素mycentralapplication
使用这个。
aws ec2 describe-instances --filters "Name=tag:Name,Values=mycentralapplication" "Name=instance-state-name,Values=running" | jq -r ".Reservations[] | .Instances[] | .NetworkInterfaces[] | .PrivateIpAddresses[] | .PrivateIpAddress "
查看 的完整输出
aws ec2 describe-instances --filters "Name=tag:Name,Values=mycentralapplication"
你会看到我是如何拉动价值观的。