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

如何用Python动态生成AWS VPC拓扑图

解决方案

可以通过整合VPC数据读取逻辑,再遍历数据动态生成拓扑组件的方式实现需求,以下是具体实现方案:

修改后的完整代码

import json
from diagrams import Diagram, Cluster, Edge
from diagrams.aws.organization import OrganizationsAccount
from diagrams.aws.network import PrivateSubnet

# 定义拓扑全局属性(根据实际需求调整)
graph_attr = {
    "fontsize": "12",
    "bgcolor": "white"
}

def get_vpc_data():
    """从JSON文件加载所有VPC的ID和CIDR块信息"""
    with open('vpc_payload.json', 'r') as f:
        data = json.load(f)
        return [{"vpc_id": item["VpcId"], "cidr": item["CidrBlock"]} for item in data]

def companynetcluster():
    vpc_list = get_vpc_data()
    
    with Diagram(filename="images/net", show=False, direction="LR", graph_attr=graph_attr):
        with Cluster("impinjnet", graph_attr={"margin": "40", "fontsize": "18"}):
            companynet = OrganizationsAccount("Company-Net")
            
            # 遍历VPC列表,动态生成每个VPC的Cluster和子网节点
            for vpc in vpc_list:
                with Cluster(vpc["vpc_id"], graph_attr={"margin": "40", "fontsize": "18"}):
                    PrivateSubnet(vpc["cidr"])
            
            # 可选:添加Company-Net到所有VPC子网的关联连线
            for vpc in vpc_list:
                companynet >> Edge() >> PrivateSubnet(vpc["cidr"])

if __name__ == "__main__":
    companynetcluster()

关键细节说明

  • 整合数据读取:用get_vpc_data()函数一次性读取所有VPC的ID和CIDR信息,避免重复打开文件,提升代码效率和可维护性。
  • 动态生成Cluster:遍历vpc_list,为每个VPC创建以其ID命名的Cluster,完全替代硬编码的Cluster块。
  • 自动绑定CIDR:在每个Cluster内直接创建PrivateSubnet并传入对应CIDR值,无需手动命名变量(如果后续不需要对子网节点做额外操作,变量名不是必需的)。
  • 扩展支持:如果需要对生成的子网节点进行后续操作(比如连接其他AWS资源),可以将节点存入列表:
    subnet_nodes = []
    for vpc in vpc_list:
        with Cluster(vpc["vpc_id"], graph_attr={"margin": "40", "fontsize": "18"}):
            subnet = PrivateSubnet(vpc["cidr"])
            subnet_nodes.append(subnet)
    # 后续可通过subnet_nodes列表操作所有子网节点
    

内容的提问来源于stack exchange,提问作者R. Barrett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:15:34