【问题标题】:How to setup AWS SAM local debugging with Python on Visual Studio Code?如何在 Visual Studio Code 上使用 Python 设置 AWS SAM 本地调试?
【发布时间】:2021-01-19 23:17:09
【问题描述】:

我试图在 Visaul Studio Code 中使用 lambda (python) 的调试功能。我按照 AWS Docs 上的说明进行操作,但无法在调试模式下触发 python 应用程序。

请看看你是否知道这个问题,如果我设置错误,谢谢。

参考: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html

观察

  • 开始申请

似乎应用程序没有在指定的调试端口上启动?

  • 请求通话

无法到达端点,未进入python应用程序

如果通过3000端口访问,应用可以成功完成

已执行设置

  1. 初始化项目并按照说明安装ptvsd
  2. 在 python 代码上启用 ptvsd
  3. 添加启动配置

项目结构

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",
        "type": "python",
        "request": "attach",
        "port": 5890,
        "host": "localhost",
        "pathMappings": [
            {
                "localRoot": "${workspaceFolder}/hello_world/build",
                "remoteRoot": "/var/task"
            }
        ]
    }
    ]
}

【问题讨论】:

    标签: python amazon-web-services visual-studio-code aws-lambda aws-sam


    【解决方案1】:

    似乎我正在按照文档的指南在“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 Code 中等待激活调试模式

    • 服务器

    第 4 步:触发 Lambda 函数,在 Visual Studio Code 中进入调试模式

    在 IDE 中,打开“运行”透视图,选择该文件的启动配置(“SAM CLI Python Hello World”)。开始调试。

    第五步:遍历函数,返回响应

    • 服务器

    • 客户

    【讨论】:

      猜你喜欢
      • 2022-12-17
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多