【问题标题】:VSCode Debugger unable to resolve non-existent files while locally debugging AWS LambdaVSCode 调试器在本地调试 AWS Lambda 时无法解析不存在的文件
【发布时间】:2021-12-01 12:24:02
【问题描述】:

我有一个 AWS Lambda 函数,我正在尝试使用 VSCode 逐步调试。我遇到了一个问题,调试器和 VSCode 的行为没有意义,声称它无法从不应该在其中查找这些包的路径解析不存在的文件。

已使用aws-sam-clisam buildsam local invoke 功能在本地测试了lambda 函数。 lambda 正确地接受带有 -e 的 JSON 事件,并返回预期的响应。已使用以下设置对其 SAM 模板进行了测试:

Resources:
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Metadata:
      DockerTag: python3.8-v1
      DockerContext: .
      Dockerfile: Dockerfile
    Properties:
      PackageType: Image

launch.json,引用自https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps-run-debug-config-ref.html,配置如下:

{
    "configurations": [
        {
            "type": "aws-sam",
            "request": "direct-invoke",
            "name": "MyLambdaFunction",
            "invokeTarget": {
                "target": "template",
                "templatePath": "${workspaceFolder}/path/to/template.yaml",
                "logicalId": "MyLambdaFunction"
            },
            "lambda": {
                "runtime": "python3.8",
                "payload": {
                    "path": "${workspaceFolder}/path/to/input.json"
                },
                "environmentVariables": {}
            }
        }
    ]
}

当尝试在 VSCode 中通过 Run > Start Debugging 进行调试时,docker 构建成功完成,并且调试器会根据 AWS Toolkit 日志进行附加。有问题的Dockerfile如下:

FROM amazon/aws-lambda-python:3.8

COPY index.py requirements.txt ./
ADD mymodules ./mymodules
RUN python3.8 -m pip install -r requirements.txt -t .

CMD ["index.lambda_handler"]

index.py 的第一行设置断点后,即import time,调试器按预期停止,一切正常。当我开始单步执行 lambda 代码时,我正在导入 from elasticsearch import Elasticsearch 的一个模块中还有另一个导入。这是第一个问题出现的地方。 VSCode 在右下角抛出一个错误窗口,并显示以下消息:

Unable to open 'socks.py': Unable to read file
'/Users/me/path/to/app/dir/lambdacode/urllib3/contrib/socks.py' 
(Error: Unable to resolve nonexistent file 
'/Users/me/path/to/app/dir/lambdacode/urllib3/contrib/socks.py'

其中lambdacode 是包含 lambda 代码、模块目录、requirement.txt 等的根目录。

我无法确定调试器为何在此工作区路径中查找这些包。调试器似乎根本没有使用 docker 容器,因为它正在本地查找包。作为参考,urllib3 安装在我的机器上的系统范围内,安装在我的虚拟环境中,并安装在有问题的 docker 容器中。

为什么调试器试图在我的工作区文件夹中准确查找包,而没有使用 docker 容器?这是我可以以某种方式改变的行为吗?即使在跳过此导入并忽略错误之后,其他库(例如 dateutil 等)仍然存在相同的错误,这些库也安装在任何有意义的地方。

我已经确认这是这个简单导入语句的问题,因为我使用sam init 提取了一个 AWS SAM 示例,并选择了 Python3.8 的 Hello World Image Example,确认它按原样调试,添加了导入以及对elasticsearch的需求,再次尝试运行调试器时遇到了同样的错误。

任何见解或帮助将不胜感激。

【问题讨论】:

    标签: amazon-web-services visual-studio-code vscode-debugger aws-sam aws-sam-cli


    【解决方案1】:

    解决了。它与调试有关。在这里查看更多:

    https://github.com/aws/aws-sam-cli/issues/3347

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多