【问题标题】:Invoking local AWS Lambda function from a cloud Lambda function从云 Lambda 函数调用本地 AWS Lambda 函数
【发布时间】:2019-03-29 10:01:20
【问题描述】:

我制作了 2 个 Lambda 函数(LambdaFunction_1 和 LambdaFunction_2)。我已经在我的 AWS-Greengrass 核心上部署了 LambdaFunction_1,它是 RaspberryPi 3 作为本地 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的日志文件中的输出应该是“Hello From Function 1”。但响应是 {"errorMessage": "无法导入模块 'LambdaFunction_1'"}

但是: 当我从功能一的代码中删除 (import greengrasssdk) 行时,它工作得很好。 这个问题合乎逻辑吗?

【问题讨论】:

  • 你检查过 LambdaFunction_1 的日志吗?它应该有某种与绿草有关的错误。另外,您使用的是什么运行时?
  • 我使用的是 Python 2.7 运行时。我从 LambdaFunction_1 的日志文件中收到此错误:无法导入模块“LambdaFunction_1”:没有名为 greengrass_common.function_arn_fields 的模块

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


【解决方案1】:

我找到了解决方案,我必须在 LambdaFunction_1 中除了 greengrasssdk 导入两个库,它们是: 1-greengrass_ipc_python_sdk 2- greengrass_common

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

【讨论】: