【以下的问题经过翻译处理】 我正在尝试配置一个Greengrass Lambda来接受二进制编码,目的是发送一个压缩的JSON数据负载。我的Lambda配置看起来像这样:
"componentLambdaParameters": {
"inputPayloadEncodingType": "binary",
"eventSources": [
{
"topic": "my/topic",
"type": "IOT_CORE"
}
],
"linuxProcessParams": {
"isolationMode": "NoContainer"
},
"pinned": false
}
我使用Python/Boto3来发送消息,主题发布的代码看起来像这样:
client = boto3.client("iot-data")
payload = gzip.compress(json.dumps({"large": "message"}).encode())
client.publish(topic="my/topic", qos=1, retain=True, payload=payload)
我从Greengrass Lambda收到以下错误:
lambda_runtime.py:183,Cannot parse given invoke payload as JSON: b'my contents'
如果不压缩消息,我可以发送相同的消息(例如 payload = json.dumps({"large": "message"}).encode()
),Lambda成功运行。这表明只有当负载被编码为JSON时,"inputPayloadEncodingType": "binary"
设置才能生效,但这似乎违背了使用二进制负载选项发送其他内容的目的。
我正在使用Python 3.8 Lambda运行时,在以下组件版本下运行:
"aws.greengrass.LambdaLauncher": {
"componentVersion": "2.0.10"
},
"aws.greengrass.LambdaManager": {
"componentVersion": "2.2.2"
},
"aws.greengrass.LambdaRuntimes": {
"componentVersion": "2.0.8"
},
"aws.greengrass.Nucleus": {
"componentVersion": "2.5.5",
},