답변:
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 끝난;
jq
명령을 사용 하여 json을 구문 분석 할 수 있습니다
대안으로, 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 '.[]'
this creates many "describe-instances" requests
과? 귀하의 검색어가 태그에서만 작동한다는 것을 이해하는 한, 그것은 보편적이지 않습니다.
AWS API에 대한 훌륭한 문서를 살펴보십시오. 예를 들어 aws-cli 도구 aws autoscaling describe-auto-scaling-instances 및 aws ec2 describe-instances 입니다.
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
당신은 또한 사용할 수 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
jq
유용한 도구이며, 작전 사람들이 그것을 발견하자 여기를 떠나 심지어 당신이 가진 모든 것을 할 수 아마존 경우 aws
명령
EC2-> Auto Scaling Groups-> 인스턴스 탭에서 AWS 웹 콘솔 UI를 확인할 수도 있습니다. 현재 ASG 하의 모든 인스턴스가 표시되면 각 instance-ID를 클릭하여 IP를 얻을 수 있습니다 (다른보기로 리디렉션합니다).
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/'))