我有一个AWS安全组列表的JSON文件。我正在尝试使用组名获取组ID。该对象如下所示:
{
"SecurityGroups": [{
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
}
],
"Description": "launch-wizard-2 created 2017-10-21T09:19:40.007-04:00",
"GroupName": "MY1SG-PUBLIC-80",
"VpcId": "vpc-ceed12b7",
"OwnerId": "712503525534",
"GroupId": "sg-ee0c979c"
}]
}
使用jQ,我的尝试如下:
aws ec2 describe-security-groups | jq '.GroupId' ["GroupName": "MY1SG-PUBLIC-80"]
错误:
jq: error: Could not open file [GroupName:: No such file or directory
jq: error: Could not open file MY1SG-PUBLIC-80]: No such file or directory
答案 0 :(得分:2)
问题1:格式
https://shapeshed.com/jq-json/
jq的第二个输入是您要读取的文件。如果该值为 - 程序将从内流中读取。
问题2:选择
https://stedolan.github.io/jq/manual/#select(boolean_expression)
要按值选择元素,您应该/可以使用select语句
select(.GroupName == "MY1SG-PUBLIC-80")
jq 'SCOPE | select(.GroupName == "MY1SG-PUBLIC-80") | .GroupId[]' -
其中SCOPE是您要查看的组。如果SCOPE是.[]
,它将扫描每个json条目。
在此之后,它将此组管理到选择过滤器,并将其向下修剪为仅将GroupName设置为给定值的过滤器。
然后将此结果集通过管道输入密钥过滤器,只返回匹配GroupID的数组。
答案 1 :(得分:1)
我正在尝试使用群组名称获取群组ID。
假设输入已被调整以使其有效JSON(*),过滤器:
.SecurityGroups[] | select(.GroupName=="MY1SG-PUBLIC-80") | .GroupId
产生
"sg-ee0c979c"
考虑这个替代过滤器可能是值得的:
.[][]|select(.GroupName=="MY1SG-PUBLIC-80")|.GroupId
(*)最初显示的输入有一个无关的逗号。