我开始使用AWS CLI创建一个bash脚本来获取我想要的关于我的实例的数据。主线是:
aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" --query Reservations[*].Instances[*].[PublicDnsName,PublicIpAddress,PrivateIpAddress,BlockDeviceMappings[*].DeviceName] --output text
然后我意识到我想要更复杂的东西,所以切换到python和boto3
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter(
Filters = [ {
'Name' : 'instance-state-name',
'Values' : [ 'running' ]
} ]
)
for i in instances:
""" The whole data set is here """
print(i.public_dns_name)
print(i.public_ip_address)
""" etc """
我可以遍历响应并获取数据,但是boto3版本似乎非常浪费,因为我不需要返回大部分数据。
我可以让boto3接口只返回我感兴趣的数据,类似于AWS CLI使用的方式--query? (我的假设是AWS CLI不只是获取整个响应并解析它。)
答案 0 :(得分:0)
正如Krishna Kumar R评论的那样:
" filter - 在AWS级别进行过滤并返回响应。 query - 根据JMESPath查询表达式"
过滤从AWS返回的结果我也使用tcpdump确认了相同的内容。无论--query参数的内容如何,都会从服务器返回相同的数据。