Como posso obter endereços IP privados de todas as instâncias que fazem parte de um grupo AutoScaling. Estou tentando fazer alguma operação em todas as instâncias que fazem parte de um grupo de dimensionamento automático.
Como posso obter endereços IP privados de todas as instâncias que fazem parte de um grupo AutoScaling. Estou tentando fazer alguma operação em todas as instâncias que fazem parte de um grupo de dimensionamento automático.
Respostas:
Eu escrevi um pequeno script como abaixo para obter a lista de IPs:
#! / bin / bash para i no `aws autoscaling descrevem-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $ 2}' | cut -d ',' -f1 | sed -e 's / "// g'` Faz aws ec2 descreva instâncias --instance-ids $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | cabeça -1 | cut -d "," -f1 feito;
jq
comandos para json parse
Como alternativa, minha versão sem 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 de apenas uma lista simples na saída, poderá adicionar outro pipeline
| jq -r '.[]'
this creates many "describe-instances" requests
e? Tanto quanto eu entendi a sua consulta irá trabalhar apenas com as tags não é universal, IMHO
Dê uma olhada na documentação detalhada da API da AWS. Por exemplo, as ferramentas AWS-cli AWS autoscaling descrever-autoscaling-casos e AWS EC2 descrevem-instâncias .
Semelhante à resposta de Ramesh, aqui está um pequeno e bom script baseado na instância atual e em seu grupo. Certifique-se de definir sua região e, nesse caso, pule a instância atual (usada para cluster). Você também pode alterar 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
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 uma má idéia 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
jq
é uma ferramenta útil, e deixá-lo aqui pode deixar ops pessoas descobrem que, mesmo com amazon você pode fazer tudo isso com o aws
comando
Você também pode procurar na interface do usuário do console da web da AWS em EC2 -> Grupos de dimensionamento automático -> guia Instâncias. Você verá todas as instâncias no ASG atual e poderá clicar no ID de cada instância para obter o IP (ele será redirecionado para uma visualização diferente).
Isso retornará todos os ips privados de instâncias em um ASG
PRIVATEIPS=$(aws ec2 describe-instances --filters "Name=tag:aws:autoscaling:groupName,Values=$(aws autoscaling describe-auto-scaling-instances --instance-ids="$(ec2metadata --instance-id)" | jq -r '.AutoScalingInstances[].AutoScalingGroupName')" --query 'Reservations[].Instances[].PrivateIpAddress' --output text --region $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/'))