自動スケーリンググループインスタンスのIPアドレスを取得する方法


16

AutoScalingグループの一部であるすべてのインスタンスのプライベートIPアドレスを取得するにはどうすればよいですか。自動スケーリンググループの一部であるすべてのインスタンスで何らかの操作を実行しようとしています。

回答:


16

IPリストを取得するために、次のような小さなスクリプトを作成しました。

#!/ bin / bash
for i for `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 --instance-ids $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | ヘッド-1 | cut -d "、" -f1
完了;

私のすべての手で支持
ジャミールグランド

grepとawkでjsonを解析するのは賢明ではないため、ダウン投票
xenoterracide

jqコマンドを使用してJSONを解析できます
チェイスT.

完璧な答え、ありがとう。
ジョンハンフリーズ-

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 '.[]'


これは、多くの「説明・インスタンス」の要求を作成し、鉱山が唯一の私が意味するものを作成し、あなたはそれが唯一の2メートルを作る作ることができますが、xargsのを使用して停止する必要があるだろう
xenoterracide

this creates many "describe-instances" requestsそして?私が理解している限り、クエリは普遍的ではないタグでのみ機能します、imho
ALex_hha

あなたの名前は普遍的ではありません。また、クエリで名前を実際に使用することもできません。これは自動化されたシステムの一部である生成された名前です。ポイントは、これはあなたが持っているどのように多くの事例に応じて遅くなりますので、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、出力の解析にも使用できます。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

JFYI:aws cli alredyは、-queryオプションを使用してjsonをフィルタリングできます。
ALex_hha

仕事にまったく同じようには思えない
xenoterracide

しかし、はい、それは別の方法です。
xenoterracide

ちょうど私のバージョンを見てみましょう
ALex_hha

最良の答えでなくてもjq便利なツールだと思うので、ここに残しますaws
。Amazonで

0

また、EC2-> Auto Scaling Groups-> InstancesタブでAWSウェブコンソールUIを確認することもできます。現在のASGの下にすべてのインスタンスが表示されます。その後、各インスタンスIDをクリックしてIPを取得できます(別のビューにリダイレクトされます)。


はい、しかし、完全なリストが必要です。100個以上のインスタンスを持つASGがあり、いくつかのものを適用するためにIPのリストが必要です。
ラメシュクマール

以下は、IPリストを取得するために作成した小さなスクリプトです。
ラメシュクマール

その場合、私は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.