使用 SAM 在本地调用 Lambda 失败/超时

2024-01-27

我正在尝试获取本地环境来使用 VSCode (windows) 运行/调试 Python Lambda。我正在使用提供的 HelloWorld 示例来掌握这一点,但我无法调用。

用于设置 SAM 和调用 Lambda 的步骤:

  1. 我已经安装并运行了 Docker
  2. 我已经安装了 SAM CLI
  3. 我的 AWS 凭证已到位并且正在运行
  4. 我没有连接问题,并且能够正常连接到 AWS
  5. 我使用所有文件和资源创​​建了 SAM 应用程序 (HelloWorld),我没有更改任何内容。
  6. 我运行“sam build”并成功完成
  7. 我运行“sam local invoke”,但它因超时而失败。我把超时时间增加到10s,还是超时。 HelloWorld Lambda 代码仅打印而不执行任何其他操作,因此我猜测代码不是问题,而是与容器或 SAM 环境本身相关的其他问题。

C:\xxxxxxx\lambda-python3.8>sam build 您的模板包含 逻辑 ID 为“ServerlessRestApi”的资源,这是一个保留的资源 AWS SAM 中的逻辑 ID。这可能会导致意外行为,因此不建议这样做。

构建代码: C:\xxxxxxx\lambda-python3.8\hello_world 运行时:python3.8 元数据: {} 架构:x86_64 函数:['HelloWorldFunction'] 正在运行 PythonPipBuilder:ResolveDependencies 运行 PythonPipBuilder:复制源

构建成功

内置工件:.aws-sam\build 内置模板: .aws-sam\build\template.yaml

C:\xxxxxxx\lambda-python3.8>sam 本地调用 调用 app.lambda_handler (python3.8) 跳过拉取镜像并使用本地镜像: public.ecr.aws/sam/emulation-python3.8:rapid-1.51.0-x86_64。

挂载 C:\xxxxxxx\lambda-python3.8.aws-sam\build\HelloWorldFunction 作为 /var/task:ro,在运行时容器内委托 功能

“HelloWorldFunction”10 秒后超时

HelloWorldFunction 的调用容器没有响应

关于这里缺少什么的任何提示吗?

Thanks.


该日志表明容器未启动,或者 SAM 无法连接到它。

有时,Windows 上的主机名解析可能会受到 hosts 文件或系统设置的影响。

尝试运行 invoke 命令,如下所示(这将使容器端口绑定到所有接口):

sam local invoke --container-host-interface 0.0.0.0

...另外尝试设置 container-host 参数(设置为localhost默认情况下):

sam local invoke --container-host-interface 0.0.0.0 --container-host host.docker.internal

下一个难题是将这些设置合并到 VSCODE 中。这可以在两个地方完成:

  1. create samconfig.toml在项目的根目录中包含以下内容。这将允许运行sam local invoke从终端无需添加命令行参数:
   version=0.1
   [default.local_invoke.parameters]
   container_host_interface = "0.0.0.0"
  1. 按如下方式更新启动配置以启用 VSCode 调试:
...
"sam": {
   "localArguments": ["--container-host-interface","0.0.0.0"]
     }
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SAM 在本地调用 Lambda 失败/超时 的相关文章

随机推荐