Metodo di ricerca istanze allegato a ELB

Sto usando la Amazon AWS ELB strumenti a riga di comando. C’è un modo di scoprire le istanze attaccato ad un Elastico particolare sistema di Bilanciamento del Carico (ELB)?

  • Ti dà id di istanza. aws - elb describe-load-balancers --load-balancer-name 'myelb' --query LoadBalancerDescriptions[*].Instances
InformationsquelleAutor sheki | 2010-09-16

 

11 Replies
  1. 10

    2013/12/18: Per aggiornare questo e dato che i link sono morti!

    Ho installato la nuova AWS strumenti cli:

    $ pip install awscli
    

    Poi corse:

    $ aws configure                                                                                                                                                
    AWS Access Key ID [None]: my-key
    AWS Secret Access Key [None]: my-secret
    Default region name [None]: us-east-1
    Default output format [None]:
    

    Questi dati sono salvati in ~/.aws/config.

    Poi posso trovare le istanze collegato ad un loadbalancer in questo modo:

    $ aws elb describe-load-balancers --load-balancer-name "my-name"
    {
        "LoadBalancerDescriptions": [
            {
                "Subnets": [],
                "CanonicalHostedZoneNameID": "ID",
                "CanonicalHostedZoneName": "my-name-foo.us-east-1.elb.amazonaws.com",
                "ListenerDescriptions": [
                    {
                        "Listener": {
                            "InstancePort": 80,
                            "LoadBalancerPort": 80,
                            "Protocol": "HTTP",
                            "InstanceProtocol": "HTTP"
                        },
                        "PolicyNames": []
                    },
                    {
                        "Listener": {
                            "InstancePort": 80,
                            "SSLCertificateId": "arn:aws:iam::x:server-certificate/x-ssl-prod",
                            "LoadBalancerPort": 443,
                            "Protocol": "HTTPS",
                            "InstanceProtocol": "HTTP"
                        },
                        "PolicyNames": [
                            "AWSConsole-SSLNegotiationPolicy-api-production"
                        ]
                    }
                ],
                "HealthCheck": {
                    "HealthyThreshold": 10,
                    "Interval": 30,
                    "Target": "HTTP:80/healthy.php",
                    "Timeout": 5,
                    "UnhealthyThreshold": 2
                },
                "BackendServerDescriptions": [],
                "Instances": [
                    {
                        "InstanceId": "i-FIRST-INSTANCEID"
                    },
                    {
                        "InstanceId": "i-SECOND-INSTANCEID"
                    }
                ],
                "DNSName": "my-name-foo.us-east-1.elb.amazonaws.com",
                "SecurityGroups": [],
                "Policies": {
                    "LBCookieStickinessPolicies": [],
                    "AppCookieStickinessPolicies": [],
                    "OtherPolicies": [
                        "AWSConsole-SSLNegotiationPolicy-my-name"
                    ]
                },
                "LoadBalancerName": "my-name",
                "CreatedTime": "2013-08-05T16:55:22.630Z",
                "AvailabilityZones": [
                    "us-east-1d"
                ],
                "Scheme": "internet-facing",
                "SourceSecurityGroup": {
                    "OwnerAlias": "amazon-elb",
                    "GroupName": "amazon-elb-sg"
                }
            }
        ]
    }
    

    I dati in LoadBalancerDescriptions.Instances.

    Mio loadbalancer è chiamato my-name — questo è il nome che hai selezionato al momento della creazione.

    Vecchia risposta qui sotto!

    Non ho familiarità con la riga di comando strumento, ma ho usato le API.

    Mi piacerebbe verificare queste due richieste:

    Cli tool probabilmente ha qualcosa a che assomigliano a questi?

    HTH!

    • DescribeLoadBalancers non dare un elenco di istanze collegato a un loadbalancer. Che è la mia comprensione.
    • C’è un <Instances/> nella risposta di esempio per DescribeLoadbalancers nella documentazione. Se questo non funziona, provare a DescribeInstanceHealth? Prende due parametri – una lista opzionale di istanze e di bilanciamento del carico per nome. Da quello che ho capito questo dovrebbe def. di ritorno se si omette un elenco di istanze e fornire solo il nome del loadbalancer.
    • Entrambi i link sono morti.
    • Ti dà id di istanza. aws - elb describe-load-balancers --load-balancer-name 'myelb' --query LoadBalancerDescriptions[*].Instances
  2. 7

    Supponendo di aver aws-cli e jq installato, è possibile utilizzare il seguente comando per ottenere associato istanza ec2 id:

    aws elb describe-load-balancers --load-balancer-name my-elb \
      | jq -r '.LoadBalancerDescriptions[].Instances[].InstanceId'
    

    Questo restituirà l’ec2 id associato con ELB.

    Nota a margine: mi raccomando, installazione aws cli profili così non devi giocherellare con le variabili di ambiente e regione params (tanto).

    • questo è stato molto utile per me
  3. 6

    Perché amo risposte che possono essere utilizzati con un minimo di ricerca e sostituzione di copia e incolla

    Prerequisiti : aws-cli configurato

    pip install awscli
    aws configure
    

    Configurare : il ELB nome

    $ELB_NAME = "Your-elb-name"
    

    Copia-e-Incolla nel terminale

    for ID in $(aws elb describe-load-balancers --load-balancer-name $ELB_NAME \
        --query LoadBalancerDescriptions[].Instances[].InstanceId \
        --output=text);
    do
        aws ec2 describe-instances --instance-ids $ID \
            --query Reservations[].Instances[].PublicIpAddress \
            --output text
    done
    

    Risultato sarà un elenco di indirizzi ip Pubblici. Si possono anche eseguire la query all’interno della parentesi del for ID in $(...) per ottenere l’Id di istanza

    Vuoi qualcosa di diverso ?

    Sentitevi liberi di dare un’occhiata alla struttura di

    aws elb describe-load-balancers --load-balancer-name $ELB_NAME
    aws ec2 describe-instances --instance-ids $INSTANCE_ID
    

    e modificare la query di conseguenza!

  4. 2

    Se qualcuno arriva qui da una ricerca del motivo per cui la elb-describe-lbs comando non restituisce nulla quando hanno ELBs fino e in esecuzione, cosa che ho capito è stata che avevo bisogno di aggiungere EC2_REGION=eu-west-1 per le variabili di ambiente (o utilizzare elb-describe-lbs --region comando)

    • Questo mi aveva correre in giro per un buon 15 minuti. Grazie!
  5. 1

    Se vuoi vedere tutti i tuoi ELB e le istanze allegate utilizzare JMESPath come questo:

    aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[*].InstanceId}[*]. {ELB:ID,InstanceId:InstanceId[*]}" --output=json
    

    Risultato

    [
        {
            "ELB": "my_name",
            "InstanceId": [
                "i-0cc72"
            ]
        },
        {
            "ELB": "my_name2",
            "InstanceId": [
                "i-02ff5f",
                "i-09e467"
            ]
        }
    ]
    

    Se si conosce il nome della ELB e vuole vedere ciò che è collegato utilizzare JMESPath come questo:

    aws elb describe-load-balancers --load-balancer-name "my_name" --query "LoadBalancerDescriptions[].{ID:LoadBalancerName,InstanceId:Instances[].InstanceId}[].{ELB:ID,InstanceId:InstanceId[]}" --output=json
    

    Risultato:

    [
        {
            "ELB": "my_name",
            "InstanceId": [
                "i-02ff5f72",
                "i-09e46743"
            ]
        }
    ]
    
    • Non riesco a capire. Prima rinomina LoadBalancerName per ID, e poi ELB. La seconda parte del --query parametro può essere rimosso: aws elb describe-load-balancers --query "LoadBalancerDescriptions[].{LoadBalancerName:LoadBalancerName,InstanceId:Instances[].InstanceId}" --output=json
  6. 0

    sostituire INSTANCEID con istanza id

    aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[?InstanceId=='INSTANCEID'].InstanceId}[*].{ID:ID,InstanceId:InstanceId[0]}" --output=text | grep INSTANCEID | awk '{print $1}'

  7. 0

    In node.js è possibile eseguire questa operazione utilizzando aws-sdk.

    var AWS = require('aws-sdk')
    var options = {
      accessKeyId: 'accessKeyId',
      secretAccessKey: 'secretAccessKey',
      region: 'region'
    }
    var elb = new AWS.ELB(options)
    
    elb.describeLoadBalancers({LoadBalancerNames: ['elbName']}, function(err, data) {
      if (err) {
        console.log('err: ', err)
      }
      else {
        console.log('data: ', data.LoadBalancerDescriptions)
      }
    })
    

    data.LoadBalancerDescriptions è un array e per ogni elemento dell’array è un oggetto con le proprietà Instances che ha l’id di istanza.

  8. 0

    È possibile passante tutto si sistema di bilanciamento del carico istanza id come segue:

    while read -r lb ; do echo -e "\n\n start lb: $lb " ; \
    echo run cmd on lb: $lb ; echo " stop  lb: $lb" ; \
    done < <(aws elb describe-load-balancers --query \
    'LoadBalancerDescriptions[].Instances[].InstanceId' \
     --profile dev|perl -nle 's/\s+/\n/g;print')
    

    È possibile passante il bilanciamento del carico di nomi come segue :

        # how-to loop trough all your load balancer names 
        while read -r lb ; do \
            echo -e "\n\n start lb: $lb " ; \
            echo run cmd on lb: $lb ; \
            echo " stop  lb: $lb" ; \
        done < <(aws elb describe-load-balancers --query \
        'LoadBalancerDescriptions[].LoadBalancerName' \
        --profile rnd|perl -nle 's/\s+/\n/g;print')
    

    A condizione che tu abbia configurato il tuo aws cli :
    src: http://docs.aws.amazon.com/cli/latest/topic/config-vars.html
    cat << “EOF” > ~/.aws/config

    [profile dev]
    output = text
    region = us-east-1
    [profile dev]
    output = text
    region = us-east-1
    [default]
    output = text
    region = Global
    
    EOF 
    

    E configurato le credenziali di sicurezza:

        # in aws admin console :
        # Services => iam => users => <<your_username>> => Security Credentials => Access Keys
        # configure the aws cli
        cat << "EOF" > ~/.aws/credentials
        [dev]
        aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
        aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
        [dev]
        aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
        aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
        [default]
        aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
        aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
        EOF
    
  9. 0

    aws elb descrivere-load-balancer –load-balancer-nome “LB_NAME” | grep “InstanceId” | awk ‘{print $2}’ | sed ‘s/\”//g’

  10. -1

    Prima di fare elb-describe-lbs per ottenere un elenco dei bilanciatori di carico, e i loro nomi.

    Quindi fare elb-describe-instance-health <LB_NAME> per ottenere un elenco di istanze dietro di bilanciamento del carico. LB_NAME è il valore della colonna 2 in uscita di elb-describe-lbs.

    • elb-describe-lbs sicuramente non è disponibile nella mia console.
    • Questo potrebbe essere stato corretto nel 2013, ma oggi i comandi sono aws elb describe-load-balancers e aws elb describe-instance-health
  11. -2

    È possibile utilizzare AWS strumenti a riga di comando con alcuni bash tubazioni:

    elb-describe-instance-health loadbalancer_name --region eu-west-1 | awk '{ print $2 }' | xargs ec2-describe-instances --region eu-west-1 | grep ^INSTANCE | awk '{ print $4 }'
    

    Questo vi darà il DNS pubblico nome per ogni istanza allegata al ELB, è possibile modificare il awk colonne, rispettivamente, per avere altri dettagli.

    • Oltre, ovviamente, si dispone di alias che non abbiamo

Lascia un commento