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.
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:
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;
jq
lệnh để phân tích json
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 '.[]'
this creates many "describe-instances" requests
và? 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,
Hãy xem tài liệu tốt cho API AWS. Ví dụ: các công cụ aws-cli aws autoscaling description-auto-scaleing-instance và aws ec2 description-dụ .
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
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
jq
là 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 aws
lệnh
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.)
Đ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/'))