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

AppSync + Go Lambda解析器错误处理:如何控制错误类型与信息?

在Go语言Lambda解析器中控制AppSync的错误字段(errorType、errorMessage等)

核心结论

AppSync确实不依赖Lambda的HTTP状态码处理错误,但你完全可以自定义errorType、errorMessage,甚至携带可选的statusCode——关键是要返回符合AppSync预期的结构化错误JSON,而非普通字符串错误。

实现方案:自定义错误类型

在Go中通过实现error接口,让Lambda返回的错误序列化为AppSync可解析的JSON结构:

  1. 定义AppSync专用错误结构体
import "encoding/json"

type AppSyncError struct {
    ErrorType   string `json:"errorType"`   // 自定义错误类型,例如"DynamoDBAccessError"
    ErrorMessage string `json:"errorMessage"` // 错误详情描述
    StatusCode  int    `json:"statusCode,omitempty"` // 可选字段,仅用于携带调试信息,AppSync不依赖它处理逻辑
}

// 实现error接口,返回JSON格式字符串
func (e *AppSyncError) Error() string {
    jsonBytes, err := json.Marshal(e)
    if err != nil {
        // 序列化失败时返回兜底错误
        return `{"errorType":"SerializationError","errorMessage":"Failed to serialize error"}`
    }
    return string(jsonBytes)
}
  1. 在Lambda处理函数中返回自定义错误
func YourLambdaHandler(event CustomEventStruct) (map[string]any, error) {
    // 模拟DynamoDB操作失败场景
    item, err := getDynamoDBItem(event.ID)
    if err != nil {
        return nil, &AppSyncError{
            ErrorType:   "DynamoDBAccessError",
            ErrorMessage: "获取DynamoDB条目失败:" + err.Error(),
            StatusCode:  500,
        }
    }

    // 正常返回业务数据
    return map[string]any{"data": item}, nil
}

关键说明

  • errorType的作用:AppSync会识别该字段,你可以在AppSync Schema中定义对应的错误类型(如通过Union类型),让前端精准捕获特定错误场景。
  • statusCode:正如你查阅的资料,AppSync不会用这个字段处理错误逻辑,但可作为调试信息携带,方便排查问题。
  • 序列化要求:自定义错误的Error()方法必须返回合法JSON字符串,否则AppSync会解析失败,自动将错误类型设为Lambda:Unhandled。

额外:Schema中关联自定义错误

若需在AppSync中明确错误类型,可在Schema中定义Union类型,与Lambda返回的errorType对应:

type Query {
    getItem(id: ID!): GetItemResult
    @aws_lambda(function: "your-lambda-arn")
}

type Item {
    id: ID!
    name: String!
}

type DynamoDBAccessError {
    message: String!
}

union GetItemResult = Item | DynamoDBAccessError

当Lambda返回errorType: "DynamoDBAccessError"时,AppSync会自动将错误映射到DynamoDBAccessError类型,前端可通过类型判断处理不同错误场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:01:04