aws cli有一个--query选项,允许您只选择一些信息。
举个例子,我有兴趣从ec2 describe-instances获取安全组名称。
如果我跑:
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,SecurityGroups]
我的输出如下:
i-xxxxxxx m1.type [{u'GroupName': 'groupName', u'GroupId': 'sg-xxxxx'}]
我还可以使用索引访问列表中的元素:
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Tags[0].Value,Tags[0].Name]
是否可以查询标签,以便代替Tag [0]搜索指定名称的标签?
答案 0 :(得分:10)
从1.3.0开始,您现在可以查询以下信息:
--query 'Reservations[*].Instances[*].Tags[?Key==`<keyname>`].Value[]'
所以你有这个:
"Tags" : [
{
"Value" : "webserver01",
"Key" : "InstanceName"
},
你想要这样做:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key==`InstanceName`].Value[]'
答案 1 :(得分:2)
您可能想要使用的是--filters选项:
aws ec2 describe-instances --output text --filters "Name=tag-key, Values=SecurityGroups, Name=tag-value, Values=Foo" --region us-east-1
您可以将过滤器更改为“查询”您要查找的确切字段。
在亚特兰大AWS聚会小组的新AWS CLI上讨论此slideshare以获取更多示例
答案 2 :(得分:0)
这种方式对我有用:(这只适用于1.3.0及更高版本)
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, Tags[?Key==`Name`].Value[*]]'
答案 3 :(得分:0)
select security_groups from aws.aws_ec2_instance;
> select security_groups from aws.aws_ec2_instance limit 1;
+---------------------------------------------------------------------------------------------------------------------------------+
| security_groups |
+---------------------------------------------------------------------------------------------------------------------------------+
| [{"GroupId":"sg-xxxx","GroupName":"xxxx"},{"GroupId":"sg-xxxxxx","GroupName":"xxxx"}] |
+---------------------------------------------------------------------------------------------------------------------------------+
这只会列出您的实例的安全组。
你也可以使用
select security_groups from aws.aws_ec2_instance where instance_id = 'i-xxxxxx';