python - 如何在 Visual Studio Code 上使用 Python 设置 AWS SAM 本地调试?
问题描述
我试图在 Visaul Studio Code 中使用 lambda (python) 的调试功能。我按照 AWS Docs 上的说明进行操作,但无法在调试模式下触发 python 应用程序。
请看看你是否知道这个问题,如果我设置任何错误,谢谢。
观察
- 开始申请
似乎应用程序没有在指定的调试端口上启动?
- 请求通话
无法到达端点且未输入 python 应用程序
如果通过3000端口访问,应用程序可以成功完成
已执行设置
- 初始化项目并按照说明安装ptvsd
- 在 python 代码上启用 ptvsd
- 添加启动配置
项目结构
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", "")
}),
}
启动配置
启动.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",
"type": "python",
"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 步:在 Visual Studio Code 中收到请求、触发 lambda、挂起激活调试模式
- 服务器
第 4 步:触发 Lambda 函数,在 Visual Studio Code 中进入调试模式
在 IDE 中,打开“运行”透视图,选择该文件的启动配置(“SAM CLI Python Hello World”)。开始调试。
第五步:单步执行函数,返回响应
- 服务器
- 客户
推荐阅读
- org-mode - 在组织模式下更改“目录”标题
- javascript - 用另一个 HTML 元素的文本覆盖一个 HTML 元素的 ID
- java - 如何在akkaquartz中创建一个触发器,它只会在特殊时间开始执行一次作业
- html - 将css表格单元格推出浏览器窗口
- objective-c - 如何在 macOS 应用程序目标 c 中将文件压缩为 .xz 格式
- scala - 如何在cassandra表中存储hashmap
- docker - Docker 在 Dockerfile 中执行 cp 或 mv 命令,但更改未显示在图像中
- c - 如何对多维数组进行递归
- django - Django 迁移错误
- python - 如何修复 django 中的错误?