本地逐步调试Python功能 - AWS Serverless Application Model
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本地逐步调试Python功能

Python逐步调试要求您在中启用远程调试 Lambda 功能代码。这是一个两步的过程:

  1. 安装 ptvsd库 并在代码中启用它。

  2. 配置您的IDE以连接到您为功能配置的调试器。

因为这可能是您第一次使用 AWS SAM CLI,从锅炉板Python应用程序开始,并安装应用程序的依赖关系和ptvsd:

sam init --runtime python3.6 --name python-debugging cd python-debugging/ # Install dependencies of our boilerplate app pip install -r hello_world/requirements.txt -t hello_world/build/ # Install ptvsd library for step through debugging pip install ptvsd -t hello_world/build/ cp hello_world/app.py hello_world/build/

Ptvsd配置

接下来,您需要在代码中启用ptvsd。为此,请打开 hello_world/build/app.py,并添加以下ptvsd细节:

import ptvsd # Enable ptvsd on 0.0.0.0 address and on port 5890 that we'll connect later with our IDE ptvsd.enable_attach(address=('0.0.0.0', 5890), redirect_output=True) ptvsd.wait_for_attach()

使用 0.0.0.0 而不是 localhost 用于侦听所有网络接口。5890 是您要使用的调试端口。

MicrosoftVisualStudio代码

现在,您已经在代码中启用了依赖项和ptvsd,您可以配置MicrosoftVisualStudio代码调试。假设您仍在应用程序文件夹中,并在路径中拥有代码命令,请使用以下命令打开MicrosoftVisualStudio代码:

code .
注意

如果您的路径中没有代码,请从 python-debugging/ 之前创建的文件夹。

使用为调试设置MicrosoftVisualStudio代码 AWS SAM CLI,请使用以下启动配置:

{ "version": "0.2.0", "configurations": [ { "name": "SAM CLI Python Hello World", "type": "python", "request": "attach", "port": 5890, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}/hello_world/build", "remoteRoot": "/var/task" } ] } ] }

对于MicrosoftVisualStudioCode,属性 localRootpathMappings 键很重要。解释此设置有两个原因:

  • localRoot: 此路径将安装在Docker容器中,并且需要在根级别同时具有应用程序和依赖项。

  • workspaceFolder: 此路径是打开MicrosoftVisualStudio代码实例的绝对路径。

如果您在其他地点打开MicrosoftVisualStudio代码, python-debugging/,您需要将其替换为绝对路径,其中 python-debugging/ 位于。

MicrosoftVisualStudioCode调试器配置完成后,请确保在任意位置添加断点 hello_world/build/app.py,然后按如下方式继续:

  1. 运行 AWS SAM CLI调用您的功能。

  2. 向URL发送请求调用函数,初始化ptvsd代码执行。

  3. 在MicrosoftVisualStudioCode中启动调试器。

# Remember to hit the URL before starting the debugger in Microsoft Visual Studio Code sam local start-api -d 5890 # OR # Change HelloWorldFunction to reflect the logical name found in template.yaml sam local generate-event apigateway aws-proxy | sam local invoke HelloWorldFunction -d 5890