从云Lambda函数调用本地AWS Lambda函数

时间:2019-03-29 10:01:20

标签: python-2.7 amazon-web-services aws-lambda iot greengrass

我制作了2个Lambda函数(LambdaFunction_1和LambdaFunction_2)。我已经在我的AWS-Greengrass核心(即RaspberryPi 3)上部署了LambdaFunction_1,以作为本地lambda函数。我想从LambdaFunction_2调用LambdaFunction_1。出于无法理解的奇怪原因,无法调用本地lambda函数。

要部署本地lambda函数(LambdaFunction_1),我必须上传一个zip文件,其中包含代码的python文件和greengrasssdk。在代码中导入此greengrasssdk使其无法被调用!

这是在云上的LAmbdaFunction_2的代码:

import json
import boto3
invokeLam = boto3.client('lambda')
def lambda_handler(event, context):   
payload = {'test-key': 'Hi, you have been invoked!'}
response_F1 = invokeLam.invoke(
                               FunctionName = 'LambdaFunction_1', 
                               InvocationType = 'RequestResponse', 
                               LogType='None', 
                               Payload = json.dumps(payload) 
                              )
data_F1 = response_F1['Payload'].read()
print (data_F1)
return

这是部署在greengrass核心上的LambdaFunction_1代码:

import json
import greengrasssdk
def function_handler(event, context):
    print (event)
    return 'Hello From Function 1'

输出应该是功能2的日志文件中的“来自功能1的Hello”。但是响应为 {“ errorMessage”:“无法导入模块'LambdaFunction_1'”}

但是: 当我从功能一的代码中删除(导入greengrasssdk)行时,它可以完美地工作。 这个问题合乎逻辑吗?

1 个答案:

答案 0 :(得分:0)

我找到了必须在lambdaFunction_1中导入greengrasssdk旁边的两个库的解决方案: 1- greengrass_ipc_python_sdk 2-greengrass_common

按照@Stargazer的建议,我通过查看LambdaFunction_1的日志文件得到了答案