Как получить адреса IP Экземпляров группы Автомасштабирования

Проверьте для проверки /etc/hosts.deny не содержит запись для mountd, и проверьте hosts.allow, по подобным причинам. Если это имеет значение я обычно убираю hosts.deny и используйте iptables управлять доступом.

Использовать rpcinfo -p nfsserver гарантировать это mountd действительно рекламирует TCP — существует опция -n отключить слушание TCP, которое (IIRC на SuSE) было бы, вероятно, установлено в /etc/sysconfig/nfs или поблизости.

14
задан 10 July 2015 в 00:19
9 ответов

Я записал маленький сценарий как ниже для получения списка IP:

#!/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;
15
ответ дан 20 November 2019 в 23:03

Как альтернатива, моя версия без любого 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

Более оптимизированная версия

# 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"
]

при необходимости просто в простом списке в выводе, можно добавить другой конвейер

| jq -r '.[]'

9
ответ дан 20 November 2019 в 23:03

Смотрите на прекрасную документацию для API AWS. Например, aws-cli инструменты aws автомасштабирование describe-auto-scaling-instances и описывать-экземпляры aws ec2 .

4
ответ дан 20 November 2019 в 23:03

Подобный ответу Ramesh вот миленький сценарий на основе текущего экземпляра и его группы. Удостоверьтесь, что установили свой регион, и в этом случае я пропускаю текущий экземпляр (используемый для кластеризации). Можно также изменить PrivateIpAddress на Общественность при необходимости.

#!/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
1
ответ дан 20 November 2019 в 23:03

Можно также посмотреть в веб-консоли UI AWS под EC2-> Auto Scaling Groups-> Вкладка Экземпляров. Вы будете видеть все экземпляры под текущим ASG, можно затем нажать на каждый идентификатор экземпляра для получения IP (Он перенаправит Вас к другому представлению.)

0
ответ дан 20 November 2019 в 23:03

можно также использовать jq для парсинга вывода, это - плохая идея использовать awk, grep, или sed, и т.д., для парсинга структуры узла, подобной ему являющийся плохой идеей использовать регулярные выражения для парсинга 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
1
ответ дан 20 November 2019 в 23:03
$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
}
0
ответ дан 20 November 2019 в 23:03

Это возвратит всего частного дюйм/с экземпляров в 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/'))
0
ответ дан 20 November 2019 в 23:03

Использовать уникальный тег для автомасштабирования и установите флажок, чтобы применить его к экземплярам.

Для т.е. Ключ: Prod Значение: Server

Ваши экземпляры AutoScaling будут иметь этот уникальный тег. Запустите приведенную ниже команду, чтобы просмотреть все адреса PrivateIP:

aws ec2 describe-instances --filters Name=tag:Prod,Values=Server --region us-east-1 \
  --query 'Reservations[*].Instances[*][PrivateIpAddress]' --output text
0
ответ дан 28 December 2020 в 08:34

Теги

Похожие вопросы