从一个AWS SAM本地函数调用另一个SAM本地函数

3
我正在尝试创建一个带有多个AWS无服务器函数的AWS SAM应用程序。
该应用程序有1个template.yaml文件,其中包含2个不同的无服务器Lambda函数资源,例如“Consumer Lambda”和“Worker Lambda”。消费者以每5分钟的速率触发。消费者使用boto3库来触发工作人员Lambda函数。当工作Lambda在AWS上部署时,此代码有效。
但是我想使用Sam本地调用“Consumer”来测试两个函数,这也会在本地调用“Worker”。
以下是YAML文件的屏幕截图:

我正在使用Pycharm运行项目。有一个选项可以一次只运行一个函数,这将在构建文件夹中仅创建一个文件夹。
我必须测试消费者是否能够在部署之前在pycharm中本地调用工作器。我认为有一些方法可以做到这一点,但不确定如何操作。我进行了一些广泛的搜索,但没有找到任何结果。
感谢您的帮助。提前致谢。
1个回答

3
您可以按照以下方式启动lambda调用端点(参考AWS文档):
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>)

@umangmistrybo,如果这个答案确实回答了你的问题,你介意接受它吗?这样,其他遇到同样问题的人就可以轻松找到解决方案。干杯! - Mayank Raj
嗨,我尝试了这个。我明白在本地点运行资源的想法。在执行“sam local start-lambda”之后,当我调用“consumer”时,它无法从“consumer”中调用“worker”。错误是找不到资源。 - umangMistryBO
我本来想把它标记为正确的,但是在尝试调用时出现了错误。不确定哪里出了问题。 - umangMistryBO
@umangMistryBO,您是否也是从相同的端点调用第一个lambda函数? 如果您是通过PyCharm这样做的,请注意它将启动docker容器,该容器无法从主机访问端口3000。 - Mayank Raj
sam local 运行在端口 3001 上。我正在从同一端点调用第一个 Lambda 函数。我按照文档在终端中运行命令。 - umangMistryBO
@umangMistryBO,sam local invoke..不能从同一端点调用lambda。您介意更新问题并提供您正在使用的命令吗? - Mayank Raj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接