如何在本地调试Step Function中包含的一个或多个Lambda函数
本地运行Step Function时调试内部Lambda函数的可行方案
该方案完全基于你已有的工具链即可实现,无需额外安装新工具,也不需要修改状态机或Lambda的业务代码:
- 第一步:启动调试态目标Lambda
沿用你已掌握的SAM + VS Code + AWS Toolkit调试流程,在VS Code中给目标Lambda打好断点,启动调试会话。调试模式下的Lambda会默认在本地监听localhost:3001端口,保持该调试会话处于运行状态不要关闭。 - 第二步:配置本地Step Function的Lambda端点覆盖
你可以直接在本地Step Function的启动命令中增加参数,强制其调用你本地启动的调试态Lambda,而不是默认的SAM运行时容器或云端Lambda:- 如果你用SAM CLI启动本地Step Function,在启动命令后加参数
--lambda-endpoint http://localhost:3001即可 - 如果你直接用Step Function Local的JAR包或容器启动,增加环境变量
AWS_LAMBDA_ENDPOINT=http://localhost:3001即可
- 如果你用SAM CLI启动本地Step Function,在启动命令后加参数
- 第三步:触发状态机执行并调试
按你熟悉的流程启动本地Step Function、触发对应状态机执行,当状态机运行到目标Lambda对应的步骤时,请求会自动转发到你提前启动的调试态Lambda上,VS Code会自动命中断点,此时你可以正常做变量查看、单步执行、异常排查等操作,和单独调试Lambda的体验完全一致。
注意事项
- 若你的状态机包含多个Lambda,仅需要将你需要调试的Lambda启动为调试模式、配置对应端点映射即可,其余Lambda可继续走默认的本地运行或云端调用逻辑,互不干扰
- 如果你用容器部署Step Function Local,需要保证容器和本地调试的Lambda网络互通,可将Step Function容器加入本地host网络,或者将Lambda调试端口暴露到Docker网络中
- 调试完成后记得移除Lambda端点覆盖的配置,避免后续测试其他状态机时出现调用异常
内容的提问来源于stack exchange,提问作者A. Casula
相关产品推荐
相关产品推荐

