按标签名称对EC2实例进行排序

时间:2015-08-04 19:15:34

标签: amazon-web-services jq

除了jq工具之外,我还使用aws cli来检索实例列表。我使用以下命令执行此操作。

aws ec2 describe-instances | jq '.Reservations[].Instances[]'

使用以下示例json response。

{
    "Reservations": [
        {
            "OwnerId": "1234", 
            "ReservationId": "r-124991k", 
            "Groups": [], 
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    }, 
                    "PublicDnsName": "", 
                    "State": {
                        "Code": 16, 
                        "Name": "running"
                    }, 
                    "EbsOptimized": false, 
                    "LaunchTime": "2015-07-31T16:48:01.000Z", 
                    "PrivateIpAddress": "11.123.104.123", 
                    "ProductCodes": [], 
                    "VpcId": "vpc-sdfsdf9109", 
                    "StateTransitionReason": "", 
                    "InstanceId": "i-1223421", 
                    "ImageId": "ami-aklasd131", 
                    "PrivateDnsName": "private.dns.name", 
                    "KeyName": "testkey", 
                    "SecurityGroups": [
                        {
                            "GroupName": "secur-grou", 
                            "GroupId": "sg-a3d234a"
                        }
                    ], 
                    "ClientToken": "", 
                    "SubnetId": "subnet-57absfsdf", 
                    "InstanceType": "m3.large", 
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use", 
                            "MacAddress": "12:c3:f2:5c:5f:4d", 
                            "SourceDestCheck": false, 
                            "VpcId": "vpc-sdfsdf9109", 
                            "Description": "", 
                            "NetworkInterfaceId": "eni-81b1234", 
                            "PrivateIpAddresses": [
                                {
                                    "Primary": true, 
                                    "PrivateIpAddress": "11.123.104.123"
                                }
                            ], 
                            "Attachment": {
                                "Status": "attached", 
                                "DeviceIndex": 0, 
                                "DeleteOnTermination": true, 
                                "AttachmentId": "eni-attach-5asdf234", 
                                "AttachTime": "2015-07-30T16:10:39.000Z"
                            }, 
                            "Groups": [
                                {
                                    "GroupName": "secur-grou", 
                                    "GroupId": "sg-a3d234a"
                                }
                            ], 
                            "SubnetId": "subnet-57absfsdf", 
                            "OwnerId": "1234", 
                            "PrivateIpAddress": "11.123.104.123"
                        }
                    ], 
                    "SourceDestCheck": false, 
                    "Placement": {
                        "Tenancy": "default", 
                        "GroupName": "", 
                        "AvailabilityZone": "us-east-1c"
                    }, 
                    "Hypervisor": "xen", 
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/sda1", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-28c882", 
                                "AttachTime": "2015-07-30T16:10:43.000Z"
                            }
                        }, 
                        {
                            "DeviceName": "/dev/sdb", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-3f1d5", 
                                "AttachTime": "2015-07-30T16:10:43.000Z"
                            }
                        }, 
                        {
                            "DeviceName": "/dev/sdg", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-81c8b", 
                                "AttachTime": "2015-07-30T16:10:43.000Z"
                            }
                        }
                    ], 
                    "Architecture": "x86_64", 
                    "RootDeviceType": "ebs", 
                    "RootDeviceName": "/dev/sda1", 
                    "VirtualizationType": "hvm", 
                    "Tags": [
                        {
                            "Value": "apple", 
                            "Key": "Name"
                        }, 
                        {
                            "Value": "tag", 
                            "Key": "extra"
                        }
                    ], 
                    "AmiLaunchIndex": 0
                }
            ]
        }, 
        {
            "OwnerId": "1234", 
            "ReservationId": "r-2a72342", 
            "Groups": [], 
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    }, 
                    "PublicDnsName": "", 
                    "State": {
                        "Code": 16, 
                        "Name": "running"
                    }, 
                    "EbsOptimized": false, 
                    "LaunchTime": "2015-07-31T16:48:01.000Z", 
                    "PrivateIpAddress": "11.123.104.83", 
                    "ProductCodes": [], 
                    "VpcId": "vpc-sdfsdf9109", 
                    "StateTransitionReason": "", 
                    "InstanceId": "i-f9271451", 
                    "ImageId": "ami-aklasd131", 
                    "PrivateDnsName": "private.name.here", 
                    "KeyName": "testkey", 
                    "SecurityGroups": [
                        {
                            "GroupName": "secur-grou", 
                            "GroupId": "sg-a3d234a"
                        }
                    ], 
                    "ClientToken": "", 
                    "SubnetId": "subnet-5llqjwdf", 
                    "InstanceType": "m3.large", 
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use", 
                            "MacAddress": "12:ea:06:8b:ff:86", 
                            "SourceDestCheck": false, 
                            "VpcId": "vpc-sdfsdf9109", 
                            "Description": "", 
                            "NetworkInterfaceId": "eni-82kjs91", 
                            "PrivateIpAddresses": [
                                {
                                    "Primary": true, 
                                    "PrivateIpAddress": "11.123.104.13"
                                }
                            ], 
                            "Attachment": {
                                "Status": "attached", 
                                "DeviceIndex": 0, 
                                "DeleteOnTermination": true, 
                                "AttachmentId": "eni-attach-35312341", 
                                "AttachTime": "2015-07-30T17:29:00.000Z"
                            }, 
                            "Groups": [
                                {
                                    "GroupName": "secur-grou", 
                                    "GroupId": "sg-a3d234a"
                                }
                            ], 
                            "SubnetId": "subnet-57absfsdf", 
                            "OwnerId": "1234", 
                            "PrivateIpAddress": "11.123.104.83"
                        }
                    ], 
                    "SourceDestCheck": false, 
                    "Placement": {
                        "Tenancy": "default", 
                        "GroupName": "", 
                        "AvailabilityZone": "us-east-1c"
                    }, 
                    "Hypervisor": "xen", 
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/sda1", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-ee1c21", 
                                "AttachTime": "2015-07-30T17:29:02.000Z"
                            }
                        }, 
                        {
                            "DeviceName": "/dev/sdb", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-13awer", 
                                "AttachTime": "2015-07-30T17:29:02.000Z"
                            }
                        }, 
                        {
                            "DeviceName": "/dev/sdg", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-3111", 
                                "AttachTime": "2015-07-30T17:29:02.000Z"
                            }
                        }
                    ], 
                    "Architecture": "x86_64", 
                    "RootDeviceType": "ebs", 
                    "RootDeviceName": "/dev/sda1", 
                    "VirtualizationType": "hvm", 
                    "Tags": [
                        {
                            "Value": "banana", 
                            "Key": "Name"
                        }, 
                        {
                            "Value": "tag", 
                            "Key": "extra"
                        }
                    ], 
                    "AmiLaunchIndex": 0
                }
            ]
        }
    ]
}

但对于返回的实例,我希望它们按标签名称排序。我尝试了以下内容。

jq '.Reservations[]|=sort_by(.Instances[].Tags[.Key="Name"].Value)'

但jq抱怨几条错误消息。是否有一种简单的方法可以按名称标记对json进行排序,然后按照排序顺序获取PrivateDNS条目?

1 个答案:

答案 0 :(得分:2)

好的,我不确定我是否理解你想要的东西。这就是我认为你要求的;如果我错了,请纠正我:

  

在每个Reservation中,我希望Instances内部按Value Tag Key的{​​{1}}进行排序/ p>

这就是解决这个问题的方法:

"Name"

或者,您可能会要求:

  

我希望jq '.Reservations[].Instances |= sort_by(.Tags[] | select(.Key == "Name").Value)'Reservations Value Tag Key "Name"内的Instances进行排序。

这将由此解决:

jq '.Reservations |= sort_by(.Instances[].Tags[] | select(.Key == "Name").Value)'

(如果Instances中有多个Reservation,则此脚本的行为可能毫无意义

在获取私有DNS值时,只需选择以下内容:

.Reservations[].Instances[].PrivateDnsName

您也可以在排序脚本之后输出。