Autoscaling 그룹 인스턴스 IP 주소를 얻는 방법


16

AutoScaling 그룹의 일부인 모든 인스턴스의 프라이빗 IP 주소를 얻는 방법은 무엇입니까? 자동 확장 그룹의 일부인 모든 인스턴스에서 일부 작업을 수행하려고합니다.

답변:


16

IP 목록을 얻기 위해 아래와 같은 작은 스크립트를 작성했습니다.

#! / bin / bash
`aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $ 2}'| 컷 -d ','-f1 | sed -e 's / "// g'`
하다
aws ec2 describe-instances-인스턴스 ID $ i | grep -i PrivateIpAddress | awk '{print $ 2}'| 헤드 -1 | 컷 -d ","-f1
끝난;

내 모든 손으로 공감
— Jameel Grand

이 때문에 downvote 현명을 구문 분석 JSON과 그렙과 AWK
— xenoterracide

jq명령을 사용 하여 json을 구문 분석 할 수 있습니다
— Chase T.

완벽한 답변, 감사합니다.
— John Humphreys-w00te

10

대안으로, 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 '.[]'


이 광산은 내 말 하나, 당신은 단지 이m를 생성 할 수 있습니다 생성, 많은 "설명-경우"요청을 생성합니다,하지만 당신은 xargs를 사용을 중지해야 할 것
— xenoterracide

this creates many "describe-instances" requests과? 귀하의 검색어가 태그에서만 작동한다는 것을 이해하는 한, 그것은 보편적이지 않습니다.
— imex

당신은 보편적이지 않습니다. 실제로 쿼리에서 이름을 사용할 수 없습니다. 자동화 된 시스템의 일부인 생성 된 이름입니다. 요점은 이것이 10 + 1 RPC 요청을 생성하므로 보유한 인스턴스 수에 따라 속도가 느려진다는 것입니다.
— xenoterracide

실제로 OP는 검색에 필요한 기준으로 지정하지 않았으므로 회색 영역입니다. :)
— ALex_hha

네, 알고 계실 것입니다.보다 효율적인 쿼리를 만들 수 있습니다.
— xenoterracide


1

Ramesh의 답변과 비슷하게 현재 인스턴스와 그룹을 기반으로 한 멋진 스크립트가 있습니다. 지역을 설정했는지 확인하십시오.이 경우 현재 인스턴스를 건너 뜁니다 (클러스터링에 사용). 필요한 경우 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

1

당신은 또한 사용할 수 jq는 구문 분석 HTML로 정규 표현식을 사용하는 나쁜 생각되는 유사한 노드 구조를 구문 분석, 그것은 사용 AWK, GREP, 또는 나오지도 등으로 나쁜 생각, 출력을 구문 분석 할 수 있습니다.

$ 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

JFYI : AWS CLI는 --query 옵션을 통해 json을 필터링 할 수 있습니다.
— ALex_hha

정확히 같은 방식으로 작동하지 않는 것 같습니다
— xenoterracide

하지만 그렇습니다. 다른 방법입니다.
— xenoterracide

내 버전을 살펴보세요
— ALex_hha

내가 생각하는 경우에도 그것이 가장 좋은 대답 아니기 때문에, 여기를 떠날거야 jq유용한 도구이며, 작전 사람들이 그것을 발견하자 여기를 떠나 심지어 당신이 가진 모든 것을 할 수 아마존 경우 aws명령
— xenoterracide

0

EC2-> Auto Scaling Groups-> 인스턴스 탭에서 AWS 웹 콘솔 UI를 확인할 수도 있습니다. 현재 ASG 하의 모든 인스턴스가 표시되면 각 instance-ID를 클릭하여 IP를 얻을 수 있습니다 (다른보기로 리디렉션합니다).


예, 그러나 전체 목록을 원하고 100 개가 넘는 인스턴스가있는 ASG가 있고 IP 목록을 적용하려는 경우가 있습니다.
— Ramesh Kumar

아래는 IP 목록을 얻기 위해 작성한 작은 스크립트입니다.
— Ramesh Kumar

이 경우 cli를 사용하면 정확합니다.
— mindblowwn

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
}

0

ASG에서 인스턴스의 모든 프라이빗 IP를 반환합니다.

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/'))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.