如何在AWS账号全区域查询名称含指定字符串的所有资源?
获取AWS全区域名称含特定字符串的资源方法
AWS没有原生的一键跨区域跨服务按名称过滤资源的工具,但可以通过以下几种方式实现:
方法1:AWS CLI + 自定义脚本
通过遍历所有区域和目标服务,用CLI命令查询并过滤名称匹配*-hyd-*-*的资源。以下是Bash脚本示例(可根据需求扩展支持的服务):
脚本示例
# 获取所有AWS区域列表 REGIONS=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text) # 遍历每个区域查询资源 for REGION in $REGIONS; do echo "=== 区域: $REGION ===" # 1. EC2实例(通过Name标签匹配,EC2无原生名称属性) aws ec2 describe-instances --region $REGION \ --query "Reservations[].Instances[?Tags[?Key=='Name' && Value.match('.*-hyd-.*')]]" \ --output table # 2. RDS实例(实例名称直接匹配) aws rds describe-db-instances --region $REGION \ --query "DBInstances[?DBInstanceIdentifier.match('.*-hyd-.*')]" \ --output table # 3. Lambda函数(函数名称匹配) aws lambda list-functions --region $REGION \ --query "Functions[?FunctionName.match('.*-hyd-.*')]" \ --output table # 4. ECS集群(从ARN中提取集群名称匹配) aws ecs list-clusters --region $REGION \ --query "clusterArns[?contains(@, '-hyd-')]" \ --output table | awk -F'/' '{print $NF}' done # 单独查询全局服务S3(桶名匹配) echo "=== 全局服务S3 ===" aws s3api list-buckets --query "Buckets[?Name.match('.*-hyd-.*')]" --output table
注意事项
- 需要给CLI配置足够的权限(比如
ec2:DescribeInstances、rds:DescribeDBInstances等对应服务的只读权限) - 可根据实际使用的服务扩展脚本(比如添加SNS主题、SQS队列的查询命令)
- 部分服务的"名称"存储在不同字段(比如EC2用Name标签,RDS用实例ID作为名称),需要针对性调整查询逻辑
方法2:AWS Config 高级查询
AWS Config会持续记录账号内所有区域的资源配置,通过它的高级查询功能可以快速筛选符合名称规则的资源:
- 确保已开启AWS Config,且配置为记录所有区域和资源类型
- 进入AWS Config控制台的「高级查询」页面
- 执行以下SQL查询:
SELECT resourceType, resourceId, resourceName, awsRegion WHERE resourceName LIKE '%-hyd-%'
优势
- 无需编写脚本,可视化操作
- 可以查询到几乎所有AWS资源类型
- 支持导出查询结果
局限
- 资源数据有一定同步延迟(通常数分钟到数小时)
- 需要提前开启Config服务(会产生少量费用)
方法3:AWS资源组(快速筛选)
如果只需要筛选部分支持的服务,可以用资源组的属性过滤功能:
- 进入AWS资源组控制台,创建新资源组
- 选择「资源类型和属性」作为筛选条件
- 添加过滤规则:
资源名称包含hyd,并选择「所有区域」 - 保存后即可查看符合条件的资源集合
局限
- 支持的资源类型有限,部分服务的名称属性可能无法被识别
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

