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

如何在VSCode中调试Python编写的AWS CDK应用?

在VSCode中调试全局安装CDK的Python应用

方案一:直接调试Python代码(解决上下文传递问题)

你碰到的app.node.get_all_context()返回空的问题,是因为CDK CLI运行时会从cdk.json、命令行参数、环境变量等多来源加载上下文,直接在cdk.App()里传参数只是其中一种方式,且需要确保加载逻辑正确:

  1. 通过cdk.json定义上下文
    在项目根目录的cdk.json中添加context字段,调试时CDK会自动读取:

    {
      "app": "python3 app.py",
      "context": {
        "key": "value"
      }
    }
    

    启动Python调试器后,app.node.get_all_context()就能获取到这个值。

  2. 调试时通过环境变量传参
    修改VSCode的launch.json,用CDK_CONTEXT_JSON环境变量传递动态上下文:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Python: CDK App",
          "type": "python",
          "request": "launch",
          "program": "${workspaceFolder}/app.py",
          "env": {
            "CDK_CONTEXT_JSON": "{\"key\":\"value\"}"
          },
          "console": "integratedTerminal"
        }
      ]
    }
    

    CDK会自动解析这个环境变量的内容,无需修改代码即可注入上下文。

  3. 代码中手动合并上下文
    如果需要完全自定义上下文,可在代码中直接传入并合并默认加载的内容:

    import aws_cdk as cdk
    from my_stack import MyStack
    
    custom_context = {"key": "value"}
    # 合并cdk.json中的上下文
    app = cdk.App(context={**cdk.App().node.get_all_context(), **custom_context})
    MyStack(app, "MyStack")
    app.synth()
    

方案二:附加到CDK进程调试(无需本地装npm)

Mac上的全局cdk命令是shell包装脚本,可找到它实际调用的Node.js脚本,直接用Node启动来关联调试:

  1. 定位CDK的Node脚本路径
    执行which cdk得到命令路径(比如/usr/local/bin/cdk),打开这个文件,找到类似下面的行:

    exec node "/usr/local/lib/node_modules/aws-cdk/bin/cdk.js" "$@"
    

    复制其中的Node脚本路径(比如/usr/local/lib/node_modules/aws-cdk/bin/cdk.js)。

  2. 配置VSCode调试流程
    要同时调试Python代码,需要先让Python进程监听调试连接,再通过Node启动CDK:

    • 第一步:配置Python远程调试监听(launch.json):
      {
        "name": "Python: Remote Attach",
        "type": "python",
        "request": "attach",
        "connect": {
          "host": "localhost",
          "port": 5678
        },
        "pathMappings": [
          {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "${workspaceFolder}"
          }
        ]
      }
      
    • 第二步:修改cdk.json的app字段,添加调试参数:
      {
        "app": "python3 -m debugpy --listen 5678 --wait-for-client app.py"
      }
      
    • 第三步:先启动Python远程调试监听,再运行CDK命令(或用Node启动CDK脚本):
      直接在终端执行cdk synth,或者添加Node调试配置启动:
      {
        "name": "Node: CDK Synth",
        "type": "node",
        "request": "launch",
        "program": "/usr/local/lib/node_modules/aws-cdk/bin/cdk.js",
        "args": ["synth"],
        "cwd": "${workspaceFolder}",
        "console": "integratedTerminal"
      }
      

    此时CDK会触发Python进程,等待调试器连接,你就能在Python代码中设置断点调试了。

关于Python CDK的说明

Python CDK是AWS官方完全支持的版本,核心功能与TypeScript版本完全对齐,只是文档和社区资源相对少一些。团队基于成员经验选择Python是合理的,无需顾虑“次要地位”,大量生产环境项目都在使用Python CDK开发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:48:26