Home > Software design >  AWS CLI: try to write query for subnets
AWS CLI: try to write query for subnets

Time:12-19

When listing route tables, I want to show the subnet id of all those who has more than one route, which I couldn't get it right.

$ aws ec2 describe-route-tables --region us-west-2 --query 'RouteTables[*]'
[
    {
        "Associations": [
            {
                "Main": false,
                "RouteTableAssociationId": "rtbassoc-0c6d59285cc28b997",
                "RouteTableId": "rtb-0d56ac20552c39cb4",
                "SubnetId": "subnet-029daed7c320c9cc0",
                "AssociationState": {
                    "State": "associated"
                }
            }
        ],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-0d56ac20552c39cb4",
        "Routes": [
            {
                "DestinationCidrBlock": "10.96.110.0/23",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            },
            {
                "DestinationCidrBlock": "0.0.0.0/0",
                "GatewayId": "igw-02fae1eda618a542d",
                "Origin": "CreateRoute",
                "State": "active"
            }
        ],

I try something below but it fails.

$ aws ec2 describe-route-tables --region us-west-2 --query 'RouteTables[?Routes[].Size>1].Associations[*].SubnetId'
Bad value for --query RouteTables[?Routes[].Size > 1].Associations[*].SubnetId: invalid token: Parse error at column 29, token "1" (NUMBER), for expression:
"RouteTables[?Routes[].Size > 1].Associations[*].SubnetId"
                              ^

CodePudding user response:

I think the following should do what you are after:

RouteTables[?length(Routes[*]) > `1`].Associations[*].SubnetId
  • Related