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

如何用Python结合boto3从AWS JSON中提取DestinationPrefixListId

提取AWS路由表中的DestinationPrefixListId字段(Python + Boto3方案)

刚上手Python和Boto3的时候,嵌套的JSON数据遍历确实容易让人头疼,我来给你拆解一下怎么提取路由表里的DestinationPrefixListId字段。

第一步:用Boto3获取路由表数据

首先你需要先通过Boto3调用AWS API拿到路由表的完整数据,代码如下:

import boto3

# 初始化EC2客户端(会自动读取本地AWS凭证)
ec2_client = boto3.client('ec2')

# 获取所有路由表数据(如果需要过滤特定资源,可以加Filters参数)
route_tables_response = ec2_client.describe_route_tables()

第二步:循环提取目标字段

拿到返回的响应数据后,我们需要两层循环来遍历嵌套的结构:外层遍历每个路由表,内层遍历每个路由条目,然后检查并提取目标字段:

# 初始化一个列表来收集所有的DestinationPrefixListId(可选,按需使用)
prefix_list_ids = []

# 遍历所有路由表
for route_table in route_tables_response['RouteTables']:
    # 遍历当前路由表下的所有路由条目
    for route in route_table['Routes']:
        # 检查当前路由条目是否包含目标字段,避免KeyError
        if 'DestinationPrefixListId' in route:
            # 打印提取到的ID
            print(f"找到Prefix List ID: {route['DestinationPrefixListId']}")
            # 如果需要保存,添加到列表里
            prefix_list_ids.append(route['DestinationPrefixListId'])

# 最后可以查看收集到的所有ID
print("\n所有提取到的Prefix List IDs:")
print(prefix_list_ids)

关键说明

  • 为什么要判断字段存在?:不是所有路由条目都有DestinationPrefixListId(比如本地路由、默认互联网路由只有DestinationCidrBlock),直接访问会触发KeyError,所以必须先判断字段是否存在。
  • 过滤特定资源:如果你不需要所有路由表,可以在describe_route_tables里添加过滤条件,比如只获取特定VPC的路由表:
    # 示例:只获取vpc-2342342的路由表
    filtered_response = ec2_client.describe_route_tables(
        Filters=[{'Name': 'vpc-id', 'Values': ['vpc-2342342']}]
    )
    
  • AWS凭证配置:确保你已经通过~/.aws/credentials文件、环境变量或者IAM角色配置了有效的AWS凭证,否则Boto3无法连接AWS服务。

用你提供的示例JSON测试这段代码,会输出:

找到Prefix List ID: pl-234234
找到Prefix List ID: pl-2342344

所有提取到的Prefix List IDs:
['pl-234234', 'pl-2342344']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:40