如何通过OCI CLI查询租户下所有计算实例的公网IP地址
OCI租户全量计算实例公网IP批量查询Bash脚本实现
前置说明
OCI控制台Cloud Shell已预装OCI CLI工具且默认完成身份授权,无需额外配置密钥即可直接访问租户内有权限的所有资源,脚本运行时会自动遍历所有已订阅区域的计算实例。
完整可运行脚本
#!/bin/bash # 输出CSV格式表头 echo "实例名称,所属区域,实例OCID,公网IP" # 获取租户所有已订阅的区域列表 regions=$(oci iam region-subscription list --query "data[].region-name" --output raw) for region in $regions; do # 查询当前区域下所有计算实例的基础信息 instances=$(oci compute instance list --region "$region" --all --query "data[].{name: \"display-name\", id: id}" --output json) # 逐实例解析信息并查询公网IP echo "$instances" | jq -c '.[]' | while read -r instance; do instance_name=$(echo "$instance" | jq -r '.name') instance_id=$(echo "$instance" | jq -r '.id') # 获取实例绑定的主VNIC ID vnic_id=$(oci compute vnic-attachment list \ --region "$region" \ --instance-id "$instance_id" \ --query "data[?is-primary==\`true\`].vnic-id" \ --output raw ) # 查询VNIC对应的公网IP地址 public_ip=$(oci network vnic get \ --region "$region" \ --vnic-id "$vnic_id" \ --query "data.\"public-ip\"" \ --output raw ) # 处理未绑定公网IP的场景 if [ -z "$public_ip" ] || [ "$public_ip" = "None" ]; then public_ip="无公网IP" fi # 输出单条实例记录 echo "${instance_name},${region},${instance_id},${public_ip}" done done
使用方法
- 打开OCI控制台右上角的Cloud Shell终端,等待环境初始化完成
- 将上述脚本内容粘贴到Cloud Shell中,保存为脚本文件:
nano get_oci_public_ips.sh,粘贴后按Ctrl+O回车保存,Ctrl+X退出编辑器 - 为脚本添加执行权限:
chmod +x get_oci_public_ips.sh - 直接运行脚本即可输出结果,也可导出为CSV文件方便后续处理:
./get_oci_public_ips.sh > 租户实例公网IP列表.csv
注意事项
- 若租户下实例数量较多,脚本运行时间可能较长,请等待执行完成即可
- 脚本默认仅查询实例主网卡的公网IP,若需要查询辅助网卡的公网IP,可删除
vnic-attachment list命令中的--query参数里的[?is-primary==\true`]`过滤条件 - 若仅需要查询指定区域的实例,可将遍历区域的代码替换为指定的区域ID即可
内容的提问来源于stack exchange,提问作者AnjK
相关产品推荐
相关产品推荐

