首页 > 解决方案 > 从另一个 SAM 本地函数调用 AWS SAM 本地函数

问题描述

我正在尝试创建一个具有多个 AWS 无服务器功能的 AWS SAM 应用程序。

该应用程序有 1 个 template.yaml 文件,其中包含 2 个不同的无服务器 lambda 函数的资源,例如“Consumer Lambda”和“Worker Lambda”。消费者以 5 分钟的速度被触发。消费者使用 boto3 库来触发 worker lambda 函数。当工作人员 lambda 部署在 AWS 上时,此代码有效。

但是我想用 Sam local invoke "Consumer" 在本地测试这两个函数,它也在本地调用 "Worker"。

这是 YAML 文件的屏幕截图:

我正在使用 Pycharm 运行该项目。有一个选项可以一次只运行 1 个函数,然后在构建文件夹中只创建一个文件夹。

我必须在部署之前测试 Consumer 是否能够在 pycharm 中本地调用 worker。我认为有一些方法可以做到这一点,但不知道该怎么做。我做了一些广泛的搜索,但没有产生任何结果。

任何帮助表示赞赏。提前致谢

标签: pythonamazon-web-servicesaws-lambdayamlserverless

解决方案


您可以通过以下方式(官方文档)启动 lambda 调用端点:

sam local start-lambda

现在,您可以将 AWS 资源客户端指向端口 3001 并在本地触发函数。

例如。如果您在 Python 上执行此操作,则可以使用 boto3 通过以下方式实现:

boto3

# Create a lambda client
lambda_client = boto3.client('lambda',
                             region_name="<localhost>",
                             endpoint_url="<http://127.0.0.1:3001>",
                             use_ssl=False,
                             verify=False)

# Invoke the function
lambda_client.invoke(FunctionName=<function_name>,
                     Payload=<lambda_payload>)

推荐阅读