Làm thế nào để có được Autoscaling nhóm Trường hợp địa chỉ IP


16

Làm cách nào tôi có thể nhận địa chỉ IP riêng của tất cả các phiên bản là một phần của nhóm AutoScaling. Tôi đang cố gắng thực hiện một số thao tác trên tất cả các trường hợp là một phần của nhóm tự động hóa.

Câu trả lời:


16

Tôi đã viết một đoạn script nhỏ như bên dưới để lấy danh sách IP:

#! / bin / bash
cho tôi trong `aws autoscaling description-auto-scaling-Groups --auto-scaling-group-name ASGName | grep -i dụid | awk '{in $ 2}' | cắt -d ',' -f1 | sed -e 's / "// g'`
làm
mô tả aws ec2 --instance-ids $ i | grep -i PrivateIpAddress | awk '{in $ 2}' | đầu -1 | cắt -d "," -f1
làm xong;

nâng cao tất cả bằng đôi tay của tôi
Jameel Grand

downvote vì không khôn ngoan khi phân tích json với grep và awk
xenoterracide

bạn có thể sử dụng jqlệnh để phân tích json
Chase T.

Câu trả lời hoàn hảo, cảm ơn bạn.
John Humphreys - w00te

10

Thay vào đó, phiên bản của tôi không có 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

Phiên bản tối ưu hơn

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

Nếu bạn chỉ cần một danh sách đơn giản trong đầu ra, bạn có thể thêm một đường ống khác

| jq -r '.[]'


điều này tạo ra nhiều yêu cầu "mô tả", tôi chỉ tạo một yêu cầu, tôi có thể làm cho nó chỉ tạo ra twom, nhưng bạn phải ngừng sử dụng xargs
xenoterracide

this creates many "describe-instances" requestsvà? Theo như tôi hiểu thì truy vấn của bạn sẽ chỉ hoạt động với các thẻ không phổ biến,
imho

Bạn không phải là Universal hoặc tôi thực sự không thể sử dụng tên trong các truy vấn của mình, đó là tên được tạo, là một phần của hệ thống tự động. Vấn đề là điều này tạo ra 10 yêu cầu RPC 10 cộng 1 do đó sẽ chậm tùy thuộc vào số lượng phiên bản bạn có
xenoterracide

Trên thực tế OP đã không xác định theo tiêu chí nào anh ta cần để thực hiện tìm kiếm, vì vậy đó là một khu vực màu xám :)
ALex_hha

Có tôi biết vì vậy tôi chỉ đề xuất rằng bạn có thể thực hiện các truy vấn hiệu quả hơn
xenoterracide


1

Tương tự như câu trả lời của Ramesh ở đây là một kịch bản nhỏ đẹp dựa trên thể hiện hiện tại và nhóm của nó. Hãy chắc chắn để đặt khu vực của bạn và trong trường hợp này tôi bỏ qua trường hợp hiện tại (được sử dụng để phân cụm). Bạn cũng có thể thay đổi PrivateIpAddress thành Public nếu được yêu cầu.

#!/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

bạn cũng có thể sử dụng jqđể phân tích đầu ra, một ý tưởng tồi là sử dụng awk, grep hoặc sed, v.v., để phân tích cấu trúc nút, tương tự như việc sử dụng các biểu thức thông thường để phân tích cú pháp html là một ý tưởng tồi.

$ 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 có thể lọc json thông qua tùy chọn --query.
ALex_hha

Dường như không hoạt động chính xác theo cùng một cách
xenoterracide

nhưng vâng, đó là một cách khác để làm điều đó.
xenoterracide

hãy xem phiên bản của tôi
ALex_hha

Tôi sẽ để nó ở đây, bởi vì ngay cả khi đó không phải là câu trả lời hay nhất, tôi nghĩ jqlà một công cụ hữu ích và để nó ở đây có thể cho phép mọi người khám phá ra nó, ngay cả khi với amazon bạn có thể làm tất cả bằng awslệnh
xenoterracide

0

Bạn cũng có thể tìm trong giao diện người dùng bảng điều khiển web AWS trong EC2 -> Nhóm tự động mở rộng -> Tab Instances. Bạn sẽ thấy tất cả các phiên bản theo ASG hiện tại, sau đó bạn có thể nhấp vào từng ID cá thể để lấy IP (Nó sẽ chuyển hướng bạn đến chế độ xem khác.)


Có, nhưng tôi muốn danh sách đầy đủ, tôi có ASG với hơn 100 trường hợp và muốn một danh sách IP để áp dụng một số nội dung.
Ramesh Kumar

Dưới đây là đoạn script nhỏ mà tôi đã viết để lấy danh sách IP.
Ramesh Kumar

Trong trường hợp đó tôi sẽ sử dụng cli, bạn đã đúng.
mindblowwn 13/07/2015

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

Điều này sẽ trả về tất cả các ips riêng của các cá thể trong 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/'))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.