使用压缩二进制负载的Greengrass Lambda

0

【以下的问题经过翻译处理】 我正在尝试配置一个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",
  },

profile picture
专家
已提问 6 个月前31 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

当你部署lambda时,请确保在配置更新中使用 "reset": [""] ,这样Greengrass才会使用新的默认值。我怀疑你是以JSON模式部署lambda,然后在没有执行重置的情况下将其更改为二进制模式。这意味着当你使用重置/合并时才会更改配置,否则Greengrass将继续使用旧的配置。

请参阅:https://docs.aws.amazon.com/greengrass/v2/developerguide/update-component-configurations.html#reset-configuration-update

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则