2016-07-14 1 views
0

Je dois trouver l'équilibreur de charge auquel une instance EC2 donnée est attachée à l'aide de l'AWS CLI. J'ai une solution de travail qui utilise jq, mais je voudrais éviter d'installer jq comme une dépendance et écrire la requête dans JMESPath si possible. Je suis bloqué sur le format de requête de l'expression JMESPath.Chemin JMES/AWS - Récupérer le nom de l'équilibreur de charge pour une instance donnée ID

J'ai trouvé cette question: Filter LoadBalancer By VPC ID, ce qui est exactement ce que j'essaie de faire, sauf le filtrage par ID d'instance, au lieu de l'ID VPC. Je pense que le problème est que les identifiants d'instance sont dans un tableau.

solution Travailler avec JQ:

aws elb describe-load-balancers | jq -r '.LoadBalancerDescriptions[] | select(.Instances[].InstanceId == "i-12345678") | .LoadBalancerName 

Ce que je suis en train de JMESPath:

aws elb describe-load-balancers --query "LoadBalancerDescriptions[?Instances[].InstanceId=='i-12345678'] | [].LoadBalancerName" 

Je sens que je suis très proche mais il manque quelque chose de fondamental .

Exemple JSON ouput de la commande describe-load-balancers de la documentation AWS:

{ 
    "LoadBalancerDescriptions": [ 
    { 
     "Subnets": [ 
      "subnet-15aaab61" 
     ], 
     "CanonicalHostedZoneNameID": "Z3DZXE0EXAMPLE", 
     "CanonicalHostedZoneName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com", 
     "ListenerDescriptions": [ 
      { 
       "Listener": { 
        "InstancePort": 80, 
        "LoadBalancerPort": 80, 
        "Protocol": "HTTP", 
        "InstanceProtocol": "HTTP" 
       }, 
       "PolicyNames": [] 
      }, 
      { 
       "Listener": { 
        "InstancePort": 443, 
        "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert", 
        "LoadBalancerPort": 443, 
        "Protocol": "HTTPS", 
        "InstanceProtocol": "HTTPS" 
       }, 
       "PolicyNames": [ 
        "ELBSecurityPolicy-2015-03" 
       ] 
      } 
     ], 
     "HealthCheck": { 
      "HealthyThreshold": 2, 
      "Interval": 30, 
      "Target": "HTTP:80/png", 
      "Timeout": 3, 
      "UnhealthyThreshold": 2 
     }, 
     "VPCId": "vpc-a01106c2", 
     "BackendServerDescriptions": [ 
      { 
       "InstancePort": 80, 
       "PolicyNames": [ 
        "my-ProxyProtocol-policy" 
       ] 
      } 
     ], 
     "Instances": [ 
      { 
       "InstanceId": "i-207d9717" 
      }, 
      { 
       "InstanceId": "i-afefb49b" 
      } 
     ], 
     "DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com", 
     "SecurityGroups": [ 
      "sg-a61988c3" 
     ], 
     "Policies": { 
      "LBCookieStickinessPolicies": [ 
       { 
        "PolicyName": "my-duration-cookie-policy", 
        "CookieExpirationPeriod": 60 
       } 
      ], 
      "AppCookieStickinessPolicies": [], 
      "OtherPolicies": [ 
       "my-PublicKey-policy", 
       "my-authentication-policy", 
       "my-SSLNegotiation-policy", 
       "my-ProxyProtocol-policy", 
       "ELBSecurityPolicy-2015-03" 
      ] 
     }, 
     "LoadBalancerName": "my-load-balancer", 
     "CreatedTime": "2015-03-19T03:24:02.650Z", 
     "AvailabilityZones": [ 
      "us-west-2a" 
     ], 
     "Scheme": "internet-facing", 
     "SourceSecurityGroup": { 
      "OwnerAlias": "123456789012", 
      "GroupName": "my-elb-sg" 
     } 
    } 
    ] 
} 

Répondre

2
aws elb describe-load-balancers --query LoadBalancerDescriptions[?Instances[0].InstanceId==`i-55555555`].LoadBalancerName 
+0

Je suis toujours obtenir un tableau vide: [@ EC2-utilisateur i-12345678 ~] $ aws elb describe-load-balancers --query "LoadBalancerDescriptions [? Instances [0] .InstanceId == 'i-12345678']. LoadBalancerName" [] – Chris

+0

revérifiez les fautes de frappe (et corrigez les types de devis) –