如何在VSCode中调试Python编写的AWS CDK应用?
方案一:直接调试Python代码(解决上下文传递问题)
你碰到的app.node.get_all_context()返回空的问题,是因为CDK CLI运行时会从cdk.json、命令行参数、环境变量等多来源加载上下文,直接在cdk.App()里传参数只是其中一种方式,且需要确保加载逻辑正确:
通过cdk.json定义上下文
在项目根目录的cdk.json中添加context字段,调试时CDK会自动读取:{ "app": "python3 app.py", "context": { "key": "value" } }启动Python调试器后,
app.node.get_all_context()就能获取到这个值。调试时通过环境变量传参
修改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会自动解析这个环境变量的内容,无需修改代码即可注入上下文。
代码中手动合并上下文
如果需要完全自定义上下文,可在代码中直接传入并合并默认加载的内容: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启动来关联调试:
定位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)。配置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远程调试监听(
关于Python CDK的说明
Python CDK是AWS官方完全支持的版本,核心功能与TypeScript版本完全对齐,只是文档和社区资源相对少一些。团队基于成员经验选择Python是合理的,无需顾虑“次要地位”,大量生产环境项目都在使用Python CDK开发。
内容的提问来源于stack exchange,提问作者vfrank66

