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

Как я могу получить частные IP-адреса всех экземпляров, входящих в группу AutoScaling. Я пытаюсь выполнить некоторую операцию во всех экземплярах, которые являются частью группы автомасштабирования.

12 голосов | спросил Ramesh Kumar 10 J000000Friday15 2015, 10:19:45

7 ответов


12

Я написал небольшой скрипт, как показано ниже, чтобы получить список IP-адресов:

#! /Bin /Баш
для i в `aws autoscaling describe-auto-scaling-groups -auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $ 2}' | cut -d ',' -f1 | sed -e 's /"//g'`
делать
aws ec2 описать-экземпляры -instance-ids $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | head -1 | cut -d "," -f1
сделанный;
ответил Ramesh Kumar 11 J000000Saturday15 2015, 12:51:38
4

Взгляните на прекрасную документацию для AWS API. Например. инструменты aws-cli aws autoscaling описывают -auto-scaling-экземпляры и aws ec2 describe-экземпляры .

ответил mschuett 10 J000000Friday15 2015, 11:57:43
4

В качестве альтернативы моя версия без 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"
]

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

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

ответил ALex_hha 14 ThuEurope/Moscow2017-12-14T00:26:06+03:00Europe/Moscow12bEurope/MoscowThu, 14 Dec 2017 00:26:06 +0300 2017, 00:26:06
1

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

#!/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
ответил 7wonders 23 MaramWed, 23 Mar 2016 00:00:24 +03002016-03-23T00:00:24+03:0012 2016, 00:00:24
0

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

ответил mindblowwn 10 J000000Friday15 2015, 20:32:04
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
}
ответил Jeremy 18 PM00000080000000531 2017, 20:42:05
0

вы также можете использовать 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
ответил xenoterracide 13 WedEurope/Moscow2017-12-13T02:23:14+03:00Europe/Moscow12bEurope/MoscowWed, 13 Dec 2017 02:23:14 +0300 2017, 02:23:14

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132