You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KeyError: 'Host' - 如何在AWS Lambda中获取请求的JSON body数据

问题原因

  • 当Lambda通过API Gateway触发时,客户端提交的POST请求体不会直接挂载到event对象的根节点,而是会被封装为字符串类型存储在event['body']字段中,你直接从event中取Host字段自然不存在,触发KeyError。
  • 你提供的CloudWatch日志也验证了这个逻辑:请求数据里body才是存储你提交的JSON的字段,且是序列化后的字符串格式,必须先反序列化才能读取内部字段。

解决方法

修改AlertMetricSender.py代码,先读取body字段并反序列化为Python字典,再提取对应字段即可,修正后的代码如下:

from modules.ZabbixSender import ZabbixSender
import json

def lambda_handler(event, context):
  # 读取body字段并反序列化为字典
  request_body = json.loads(event['body'])
  Host = request_body['Host']
  Key = request_body['Key'] 
  Value = request_body['Value']

  sender = ZabbixSender("10.10.10.10", 10051)
  sender.add(Host, Key, Value)
  sender.send()

可选兼容优化

如果你需要同时兼容直接触发Lambda(不是从API Gateway触发,无body字段)的测试场景,可以加一层判断:

from modules.ZabbixSender import ZabbixSender
import json

def lambda_handler(event, context):
  # 优先从body取数据,没有就直接从event取
  if 'body' in event and event['body']:
      request_body = json.loads(event['body'])
  else:
      request_body = event
  Host = request_body['Host']
  Key = request_body['Key'] 
  Value = request_body['Value']

  sender = ZabbixSender("10.10.10.10", 10051)
  sender.add(Host, Key, Value)
  sender.send()

内容的提问来源于stack exchange,提问作者user630702

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:09:01