如何获取自动伸缩组实例 IP 地址

如何获取自动伸缩组实例 IP 地址

如何获取 AutoScaling 组中的所有实例的私有 IP 地址。我正在尝试对 AutoScaling 组中的所有实例执行某些操作。

答案1

我编写了一个如下的小脚本来获取 IP 列表:

/bin/bash #!/bin/bash
对于 `aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $2}' | cut -d',' -f1| sed -e 's/"//g'` 中的 i
aws ec2 describe-instances --instance-ids $i | grep -i PrivateIpAddress | awk '{ print $2 }' | head -1 | cut -d"," -f1
完毕;

答案2

作为替代方案,我的版本没有任何 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 '.[]'

答案3

查看 AWS API 的详细文档。例如 aws-cli 工具aws autoscaling 描述自动缩放实例aws ec2 描述实例

答案4

你也可以使用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

相关内容