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

如何在Rust AWS Lambda中正确序列化HTTP请求并获取routeKey

问题描述

我正在按照AWS教程通过HTTPS请求访问DynamoDB,官方提供的JavaScript示例可正常运行,API Gateway配置无误,用curl命令 curl -v https://xxxxxxxx.execute-api.us-west-2.amazonaws.com/items 能成功获取表中数据。

但用Rust构建Lambda时遇到问题,收到错误:{"message":"Internal Server Error"}。我需要像JS示例那样访问routeKey,以下是相关代码和信息:

无效的Rust示例代码

use lambda_runtime::{service_fn, Error, LambdaEvent};
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Event {
    pub request_context: RequestContext,
}

#[derive(Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RequestContext {
    pub event_type: EventType,
    pub route_key: String,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "UPPERCASE")]
pub enum EventType {
    Connect,
    Disconnect,
}

#[derive(Serialize)]
struct Response {
    req_id: String,
    msg: String,
}

pub(crate) async fn my_handler(event: LambdaEvent<Event>) -> Result<Response, Error> {
    let result = event.payload.request_context.route_key;
    let resp = Response {
        req_id: event.context.request_id,
        msg: format!("{}", result),
    };
    Ok(resp)
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    let func = service_fn(my_handler);
    lambda_runtime::run(func).await?;
    Ok(())
}

可正常运行的JavaScript示例代码片段

exports.handler = async (event, context) => {
  let body;
  let statusCode = 200;
  const headers = {
    "Content-Type": "application/json"
  };
try {
    switch (event.routeKey) {
      case "DELETE /items/{id}":
      break;
       /// do something
      default:
      break;
}
//...
}

实际收到的Lambda Event Payload

{
    "headers": {
        "accept": "*/*",
        "content-length": "0",
        "host": "xxxxxx.execute-api.us-west-2.amazonaws.com",
        "user-agent": "curl/7.81.0",
        "x-amzn-trace-id": "Root=x-xxxxxxx-xxxxxxxx",
        "x-forwarded-for": "xx.xxx.xxxx.xxx",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "isBase64Encoded": false,
    "rawPath": "/items",
    "rawQueryString": "",
    "requestContext": {
        "accountId": "xxxxxxxxxx",
        "apiId": "xxxxxxxxxx",
        "domainName": "xxxxxxxxx.execute-api.us-west-2.amazonaws.com",
        "domainPrefix": "xxxxxxxx",
        "http": {
            "method": "GET",
            "path": "/items",
            "protocol": "HTTP/1.1",
            "sourceIp": "xx.xxxx.xxx.xx",
            "userAgent": "curl/7.81.0"
        },
        "requestId": "xxxxxxxxxxx",
        "routeKey": "GET /items",
        "stage": "$default",
        "time": "01/Dec/2022:08:07:39 +0000",
        "timeEpoch": 1669882059705
    },
    "routeKey": "GET /items",
    "version": "2.0"
}

我怀疑错误源于结构体无法正确反序列化Payload。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:33