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

AWS Lambda中能否使用Diagrams/Graphviz生成AWS架构图?

Lambda环境运行Diagrams库生成AWS架构图的解决方案

该需求完全可以实现,你遇到的问题均为环境配置、Graphviz插件加载类问题,按照以下步骤操作即可解决:

解决路径权限限制问题

  • 编译Graphviz时,需使用和你Lambda运行时版本一致的操作系统镜像编译(如使用Amazon Linux 2运行时就用Amazon Linux 2 EC2编译,使用Amazon Linux 2023运行时就用对应版本EC2编译),避免glibc版本不兼容
  • 编译完成后将Graphviz生成的bin、lib、share三个目录完整打包到你的Lambda代码包或者Lambda层中,推荐使用Lambda层管理二进制依赖
  • 在Lambda函数代码的最开头,配置以下环境变量:
    import os
    # 替换为你实际存放Graphviz二进制的目录,用层的话就是/opt/bin、/opt/lib
    GRAPHVIZ_BIN_PATH = "/opt/bin"
    GRAPHVIZ_LIB_PATH = "/opt/lib"
    os.environ["PATH"] = f"{GRAPHVIZ_BIN_PATH}:{os.environ.get('PATH', '')}"
    os.environ["LD_LIBRARY_PATH"] = f"{GRAPHVIZ_LIB_PATH}:{os.environ.get('LD_LIBRARY_PATH', '')}"
    # 指定dot可执行文件路径
    os.environ["GRAPHVIZ_DOT"] = f"{GRAPHVIZ_BIN_PATH}/dot"
    # 指定Graphviz运行时临时文件写入路径为Lambda可写的/tmp目录
    os.environ["GV_FILE_PATH"] = "/tmp"
    

解决PNG格式不识别问题

你遇到的报错本质是Graphviz运行时未加载到png格式对应的插件,不是缺少gd库,需要做以下配置:

  • 编译Graphviz时要完整编译gd、libpng相关插件,确保编译输出的lib/graphviz目录下存在libgdplugin.so等格式插件文件
  • 新增环境变量指定Graphviz插件加载目录:
    # 替换为你实际存放graphviz插件的目录,用层的话就是/opt/lib/graphviz
    os.environ["GVBINDIR"] = f"{GRAPHVIZ_LIB_PATH}/graphviz"
    
  • 在每次Lambda冷启动时,先执行一次dot -c命令生成插件配置缓存到/tmp目录:
    os.system(f"{GRAPHVIZ_BIN_PATH}/dot -c")
    

Diagrams库使用示例

完成上述配置后即可正常调用Diagrams生成PNG格式的架构图,生成的文件需存放到/tmp目录:

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.storage import S3

with Diagram("Sample AWS Architecture", show=False, filename="/tmp/aws_arch", outformat="png"):
    EC2("Web Server") >> S3("Static Storage")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:39:04