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

AWS AppSync函数失败时错误存储位置及日志判断条件咨询

AWS AppSync函数执行失败时的错误位置与日志记录问题

我想了解在AWS AppSync中,当函数执行失败时,错误会存储在stash的哪个位置。同时,当函数中的PutItem操作失败时,当前代码里的if (error)条件能否实现日志记录,还是需要改成if (ctx.outError)?

我的resolver模板代码如下:

export function request(ctx) {
// performs some operation
return {}
}

export function response(ctx) {
    const { error, result } = ctx;
    if (error) {
        return util.appendError(error.message, error.type, result);
    }
    return ctx.prev.result;
}

函数代码如下:

export function request(ctx) {
    const { input, keys } = ctx.stash;
    return { 
        operation: 'PutItem',
        key: util.dynamodb.toMapValues(keys),
        attributeValues: util.dynamodb.toMapValues(input)
    };
}

export function response(ctx) {
    const { error, result } = ctx;
    if (error) {    // (ctx.outError) ?
            console.log("I want to log this error");
        }
        return util.appendError(error.message, error.type, result);
    }
    return {
        ...result
    };
}

回答

  1. 日志记录的条件判断
    当前代码中的if (error)条件完全可以实现日志记录,不需要改成ctx.outError。在AppSync函数的响应模板中,当数据源操作(比如这里的DynamoDB PutItem)执行失败时,错误会被自动注入到ctx.error对象中。你通过解构const { error, result } = ctx;拿到的error就是这个错误对象,所以当PutItem失败时,error会存在,console.log会被触发执行。

  2. 错误在stash中的位置
    函数执行失败的错误不会自动存储在stash里。stash是用于在resolver和函数、函数和函数之间传递自定义数据的容器,默认不会自动写入错误信息。如果需要后续的resolver或其他函数访问这个错误,你需要手动在函数的响应模板中将错误写入stash,比如:

if (error) {
    console.log("I want to log this error");
    ctx.stash.functionError = error; // 手动将错误存入stash
    return util.appendError(error.message, error.type, result);
}

另外注意你的函数响应模板存在语法错误:return util.appendError(...)后面的闭合大括号位置错误,需要调整以保证代码逻辑正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:42:43