【问题标题】:Using VS Code debugger for serverless lambda flask applications将 VS Code 调试器用于无服务器 lambda flask 应用程序
【发布时间】:2020-03-15 17:13:31
【问题描述】:

我一直在使用无服务器框架、Flask 和 SLS WSGI 在 AWS 上创建一些 Lambda 函数。一些 dynamodb 表,但在这种情况下应该无关紧要。

我面临的问题是我无法端到端调试整个事情,我能够运行sls wsgi serve 并运行我的 lambda 函数的本地实例,快乐的日子。但是,我有点被其他开发工具、语言和 IDE(甚至只是 Flask 本身)宠坏了,它们允许我设置断点并查看范围、单步执行等。所以我真的很希望能够在这里完成也是。

我尝试在 vs code 内部的启动配置中启动上述 sls 命令,但没有成功。接下来我尝试运行默认的烧瓶启动配置,但这显然不包括存储在 sls.yml 文件中的所有配置,这对于访问本地 dynamodb 实例至关重要。

我尝试的最后一件事是在我的 app.py 文件末尾附加到 ptvsd。所以我会从 ptvsd 中执行wait 操作,将 vs 代码中的调试器附加到指定端口,这似乎成功并返回代码执行。但是,似乎 sls wsgi 运行该文件两次,因此附加发生在第一个实例而不是第二个实例上,当我尝试通过 Postman 执行 API 调用时,它不会触发断点。

我想我可以在任何地方手动包含wait 步骤,然后为我尝试在代码中而不是在 IDE 中调试的每个方法附加,但这似乎有点矫枉过正而且不太方便。

我一直在网上寻找答案并阅读文档,但找不到更多信息。

【问题讨论】:

    标签: debugging visual-studio-code aws-lambda wsgi aws-serverless


    【解决方案1】:

    我发现我可以使用Attach using Process Id 这有点棘手,因为列表中总是有 2 个进程在运行(不同的 pid)。它不是很好,但它可以解决问题

    【讨论】:

      【解决方案2】:

      我发现一种有用的技术,虽然在节点环境中但应该在这里应用,是利用单元测试作为一种在本地执行代码的方法,能够绑定调试器以及利用模拟来存根外部依赖项,例如 AWS 服务(S3、DynamoDB 等)。我写了一篇关于为 node 设置它的博客文章,但您可能会发现它也可以作为一种考虑使用 Pythoin 进行设置的方法:https://serverless.com/blog/serverless-local-development/

      但是,在无服务器开发的世界中,最终无论您在本地开发环境中获得的复杂程度如何,您都将必须在云环境中进行测试。我描述的单元测试技术非常适合捕获那些基本的语法和逻辑错误,但您仍然需要在云中执行部署并在该环境中进行测试。这是 Serverless 的原因之一,我们正在努力改进部署到云的能力和时间,以便在 AWS 中进行测试取代本地测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-19
        • 2018-08-16
        • 2018-01-08
        • 2021-01-22
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多