Como obter o grupo de escalonamento automático Instances IP address

12

Como posso obter endereços IP privados de todas as instâncias que fazem parte de um grupo AutoScaling. Eu estou tentando fazer alguma operação em todas as instâncias que fazem parte de um grupo de autoescala.

    
por Ramesh Kumar 10.07.2015 / 09:19

7 respostas

12

Eu escrevi um pequeno script como abaixo para obter a lista de IPs:

#!/bin/bash
for i in 'aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid  | awk '{ print $2}' | cut -d',' -f1| sed -e 's/"//g''
do
aws ec2 describe-instances --instance-ids $i | grep -i PrivateIpAddress | awk '{ print $2 }' | head -1 | cut -d"," -f1
done;
    
por 11.07.2015 / 11:51
4

Veja a boa documentação da API da AWS. Por exemplo. as ferramentas aws-cli aws autoscaling describe-auto-scaling-instances e aws ec2 describe-instances .

    
por 10.07.2015 / 10:57
4

Como alternativa, minha versão sem qualquer jq / awk / sed / cut

$ aws autoscaling describe-auto-scaling-instances --region us-east-1 --output text \
--query "AutoScalingInstances[?AutoScalingGroupName=='ASG-GROUP-NAME'].InstanceId" \
| xargs -n1 aws ec2 describe-instances --instance-ids $ID --region us-east-1 \
--query Reservations[].Instances[].PrivateIpAddress --output text
10.228.43.71
10.230.178.160
10.228.15.171
10.233.160.163
10.228.18.123
10.225.222.195
10.237.149.97
10.136.163.109
10.152.35.71
10.233.157.230

Versão mais otimizada

# aws ec2 describe-instances --region us-east-1 --instance-ids \
$(aws autoscaling describe-auto-scaling-instances --region us-east-1 --output text \
--query "AutoScalingInstances[?AutoScalingGroupName=='ASG_NAME'].InstanceId") \
--query Reservations[].Instances[].PrivateIpAddress
[
    "10.230.178.160",
    "10.152.35.71",
    "10.233.157.230",
    "10.237.149.97",
    "10.228.15.171",
    "10.136.163.109",
    "10.225.222.195",
    "10.233.160.163",
    "10.228.43.71",
    "10.228.18.123"
]

Se você precisar apenas de uma lista simples na saída, você pode adicionar outro pipeline

| grep -o -P '(\d{1,3}\.?){4}'

    
por 13.12.2017 / 22:26
1

Semelhante à resposta de Ramesh, aqui está um pequeno script baseado na instância atual e em seu grupo. Certifique-se de definir sua região e, neste caso, pulo a instância atual (usada para armazenamento em cluster). Você também pode alterar o PrivateIpAddress para Public, se necessário.

#!/bin/bash
wget http://s3.amazonaws.com/ec2metadata/ec2-metadata
sudo chmod u+x ec2-metadata
INSTANCE_ID=$(./ec2-metadata | grep instance-id | awk 'NR==1{print $2}')
AG_NAME=$(aws autoscaling describe-auto-scaling-instances --instance-ids ${INSTANCE_ID} --region eu-west-1 --query AutoScalingInstances[].AutoScalingGroupName --output text)
for ID in $(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names ${AG_NAME} --region eu-west-1 --query AutoScalingGroups[].Instances[].InstanceId --output text);
do
    if [ "${ID}" == ${INSTANCE_ID} ] ; then
        continue;
    fi
    IP=$(aws ec2 describe-instances --instance-ids $ID --region eu-west-1 --query Reservations[].Instances[].PrivateIpAddress --output text)
    # Do what you want with ${IP} here
done
    
por 22.03.2016 / 22:00
0

Você também pode procurar na interface do usuário do console da web do AWS em EC2 - > Grupos de escalonamento automático - > Guia Instâncias. Você verá todas as instâncias no atual ASG, você pode clicar em cada ID da instância para obter o IP (ele irá redirecioná-lo para a visão diferente).

    
por 10.07.2015 / 19:32
0
$instanceIPs = aws ec2 describe-instances --filters "Name=tag:Name,Values=<name-of-your-auto-scaling-group>" --query 'Reservations[].Instances[].PrivateDnsName' --output text

$instanceIPsArray = $instanceIPs.Trim() -split("'t")
foreach($ip in $instanceIPsArray)
{
    //Do something
}
    
por 18.08.2017 / 19:42
0

você também pode usar jq para analisar a saída, é uma má idéia usar awk, grep , ou sed, etc, para analisar uma estrutura de nó, semelhante a ser uma má ideia usar expressões regulares para analisar html.

$ aws ec2 describe-instances \
--instance-ids $(aws autoscaling describe-auto-scaling-groups \
    |jq -r '.AutoScalingGroups[]| select( .Tags[].Value == "playground").Instances[].InstanceId' \
    |paste -s -d" ") \
| jq -r '.Reservations[].Instances[].PrivateIpAddress'
192.169.0.202
192.169.0.177
192.169.0.160
    
por 13.12.2017 / 00:23