如何从AWS CLI命令过滤结果

ISZ*_*ISZ 1 amazon-ec2 amazon-web-services aws-cli

如何过滤以下内容,只返回以10开头的IP结果?*?

aws ec2 describe-instances --filters "Name=tag-value,Values=mytagavalue" --query 'Reservations[*].Instances[*].{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}'
[
    [
        {
            "InstanceId": "i-12345bnmsdfod",
            "PrivateDnsName": "ip-10-34-24-4.my.there.com",
            "State": "running",
            "IP": "10.10.10.4"
        }
    ],
    [
        {
            "InstanceId": "i-12345bnmsdfop",
            "PrivateDnsName": "",
            "State": "terminated",
            "IP": null
        }
    ],
Run Code Online (Sandbox Code Playgroud)

Ant*_*ace 12

选项1)通过过滤器

使用network-interface.addresses.private-ip-address过滤器选择仅匹配"10.*"的值,它将匹配以"10."开头的地址.

--filters "Name=network-interface.addresses.private-ip-address,Values=10.*"
Run Code Online (Sandbox Code Playgroud)

只需在不同的过滤器之间包含一个空格即可分隔它们.

完整的例子

aws ec2 describe-instances --filters "Name=tag-value,Values=mytagavalue" "Name=network-interface.addresses.private-ip-address,Values=10.*" --query 'Reservations[*].Instances[*].{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}'
Run Code Online (Sandbox Code Playgroud)

选项2)通过查询

使用JMESPath starts_with()函数执行"10"的部分字符串比较.针对每个网络接口的私有IP地址.

一步步

首先,选择所有实例:

Reservations[].Instances[]
Run Code Online (Sandbox Code Playgroud)

然后管道只过滤包含网络接口的实例,这些接口的私有IP地址以"10"开头:

| [? NetworkInterfaces [? starts_with(PrivateIpAddress, '10.')]]
Run Code Online (Sandbox Code Playgroud)

然后像以前一样选择字段.这没有改变.(请注意,您可能希望选择所有网络接口而不是第一个.)

.{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}"
Run Code Online (Sandbox Code Playgroud)

完整的例子

aws ec2 describe-instances --filters "Name=tag-value,Values=mytagavalue" --query "Reservations[].Instances[] | [? NetworkInterfaces [? starts_with(PrivateIpAddress, '10.')]].{InstanceId:InstanceId,PrivateDnsName:PrivateDnsName,State:State.Name, IP:NetworkInterfaces[0].PrivateIpAddress}"
Run Code Online (Sandbox Code Playgroud)

进一步阅读