You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计EC2实例总数及用Shell/Python统计AWS各区域运行实例数?

查询AWS EC2实例数量的方法

嘿,我来帮你搞定EC2实例数量查询的问题,分两种场景给你详细说明:

一、快速查询EC2实例总数量

你有两种简单的方式可以快速拿到EC2实例的总数量:

1. AWS控制台操作

登录AWS管理控制台,进入EC2服务页面,左上角就能看到当前区域的实例总数。如果要查所有区域的总数量,得切换到每个区域手动累加——这种方式适合临时快速查看,批量统计还是用脚本更高效。

2. AWS CLI命令

直接在终端运行这条命令,就能得到当前配置区域的所有EC2实例总数:

aws ec2 describe-instances --query 'length(Reservations[].Instances[])' --output text

如果要查所有区域的总数量,可以结合区域列表循环累加,后面的脚本会覆盖这个场景。

二、统计各区域运行中EC2实例数量

如果需要批量统计每个区域里处于运行状态的EC2实例数量,用Shell脚本或者Python代码会非常方便,下面是两种实现方式:

1. Shell脚本实现

这个脚本会自动遍历所有AWS区域,统计每个区域的运行中实例数量,还会处理可能的权限错误:

#!/bin/bash

# 获取所有AWS区域列表(需要提前配置好AWS CLI权限)
REGIONS=$(aws ec2 describe-regions --query 'Regions[].RegionName' --output text)

echo "各区域运行中EC2实例数量统计:"
echo "-----------------------------"

# 循环每个区域查询
for REGION in $REGIONS; do
    echo -n "区域 $REGION: "
    # 查询运行状态的实例数量,用length直接统计更高效
    COUNT=$(aws ec2 describe-instances --region $REGION --filters "Name=instance-state-name,Values=running" --query 'length(Reservations[].Instances[])' --output text 2>/dev/null)
    # 如果查询失败(比如权限不足),默认显示0
    echo ${COUNT:-0}
done

使用前记得确保已经配置好AWS CLI的访问权限(通过aws configure设置密钥和默认区域)。

2. Python代码实现

用boto3库来实现,代码更易读,也方便后续扩展:

import boto3

def count_running_ec2_instances():
    # 初始化EC2客户端获取所有区域列表
    ec2_client = boto3.client('ec2')
    regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']]
    
    print("各区域运行中EC2实例数量统计:")
    print("-----------------------------")
    
    for region in regions:
        try:
            # 创建对应区域的EC2资源对象
            ec2_resource = boto3.resource('ec2', region_name=region)
            # 过滤出状态为running的实例
            running_instances = ec2_resource.instances.filter(
                Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]
            )
            # 统计实例数量
            instance_count = sum(1 for _ in running_instances)
            print(f"区域 {region}: {instance_count}")
        except Exception as e:
            # 捕获权限不足、网络问题等错误
            print(f"区域 {region}: 无法获取数据(错误信息:{str(e)})")

if __name__ == "__main__":
    # 执行统计函数
    count_running_ec2_instances()

使用前需要先安装boto3:pip install boto3,并且配置好AWS凭证(可以通过环境变量、~/.aws/credentials文件或者IAM角色)。

内容的提问来源于stack exchange,提问作者yashodeepthi rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:49:45