问题描述
我试图在Visaul Studio Code中为lambda(python)使用调试功能。我按照AWS Docs上的说明进行操作,但无法在调试模式下触发python应用程序。
请查看您是否知道该问题,以及如果我没有正确设置任何内容,谢谢。
观察
- 启动应用程序
似乎没有在指定的调试端口上启动应用程序?
- 请求通话
无法到达端点并且未输入python应用程序
如果通过端口3000访问,则应用程序可以成功完成
已执行设置
项目结构
Python源代码
这基本上只是python的官方helloworld示例
import json
# import requests
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=('localhost',5890),redirect_output=True)
ptvsd.wait_for_attach()
def lambda_handler(event,context):
"""Sample pure Lambda function
Parameters
----------
event: dict,required
API Gateway Lambda Proxy Input Format
Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
context: object,required
Lambda Context runtime methods and attributes
Context doc: https://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html
Returns
------
API Gateway Lambda Proxy Output Format: dict
Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
"""
# try:
# ip = requests.get("http://checkip.amazonaws.com/")
# except requests.RequestException as e:
# # Send some context about this error to Lambda Logs
# print(e)
# raise e
return {
"statusCode": 200,"body": json.dumps({
"message": "hello world",# "location": ip.text.replace("\n","")
}),}
启动配置
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information,visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0","configurations": [
{
"name": "Python: Current File","type": "python","request": "launch","program": "${file}","console": "integratedTerminal"
},{
"name": "SAM CLI Python Hello World","request": "attach","port": 5890,"host": "localhost","pathMappings": [
{
"localRoot": "${workspaceFolder}/hello_world/build","remoteRoot": "/var/task"
}
]
}
]
}
解决方法
似乎我正在按照文档的指南在“ python-debugging / hello_world / build”中编辑python文件(文档中有一个步骤,要求您将python文件复制到“ python-debugging / hello_world”中/ build”)。
但是,当您运行“ sam local start-api”时,它实际上是在CloudFormation模板(tempalted.yaml)指定的位置上运行python文件,该模板位于“ python-debugging / hello_world”(请选中“ CodeUri”属性)。
当我将所有库文件移到与python文件相同的文件夹中时,它会起作用。
所以我想您必须确保您正在运行哪个python(或lambda)脚本,并确保库与python脚本一起使用(如果您不使用图层)。
文件夹结构
在Visual Studio代码中进入调试模式
步骤1:调用并启动本地API网关
- 服务器
第2步:发送测试请求
- 客户
步骤3:收到请求,lambda触发,等待在Visual Studio代码中激活调试模式
- 服务器
第4步:触发Lambda函数,在Visual Studio Code中进入调试模式
在IDE中,打开“运行”透视图,选择此文件的启动配置(“ SAM CLI Python Hello World”)。开始调试。
步骤5:单步执行该函数,返回响应
- 服务器
- 客户