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

AWS Step Function中Go Lambda返回错误的条件匹配配置问题

Go Lambda 错误在AWS Step Functions中的匹配方案

问题1解答:是否支持错误消息正则匹配?

  • AWS Step Functions的Retry/Catch字段中的ErrorEquals规则仅支持完全匹配Lambda返回的errorType字段值,不支持对errorMessage做任何正则、前缀、包含匹配。
  • 你之前配置"errorString"能生效,是因为Go标准库errors.New()创建的错误统一为errorString类型,Lambda Go运行时会把错误的类型名作为errorType字段返回,所以所有标准error都会命中这个规则,会误匹配其他非瞬态错误,不推荐这么用。

问题2解答:如何返回能被精准匹配的错误类型

你只需要自定义实现error接口的专属错误类型即可,Lambda Go运行时会自动将自定义类型的名称作为errorType返回,Step Functions可以直接匹配该类型名。

代码示例:

// 首先定义专属错误类型,名称和你要匹配的ErrorEquals值一致
type TransientError string

// 实现error接口的Error()方法
func (e TransientError) Error() string {
    return string(e)
}

func HandleHotelBookingRequest(ctx context.Context, booking HotelBookingRequest) (confirmation HotelBookingResponse, err error) {
    // ... 其他逻辑
    if statusCode == http.StatusServiceUnavailable {
        // 返回自定义错误类型实例
        return confirmation, TransientError("upstream service 503 unavailable")
    }
    // ... 其他错误处理
}

效果验证:

此时Lambda触发该错误时返回的结构会变为:

{
  "errorMessage": "upstream service 503 unavailable",
  "errorType": "TransientError"
}

你原来配置的"ErrorEquals": ["TransientError"]重试规则就可以正常生效,且只会匹配你定义的瞬态错误,不会误命中其他错误。

可选替代方案

如果你不想自定义错误类型,也可以选择让Lambda函数永远不返回error,而是在返回结构体中新增errorCode、httpStatus这类标识字段,后续在Step Functions中通过Choice状态判断对应字段的值,自行实现重试分支逻辑,适合需要更复杂错误判断规则的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 20:15:02