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

Step Functions处理特定sdb文件时任务提交后失败排查

问题背景
  • 刚接触Step Functions,若问题表述存在歧义可随时补充细节信息
  • 实现目标:搭建文件上传后自动触发Step Functions、调用Lambda函数执行处理任务的工作流
  • 故障现象:Step Functions关联的Lambda处理其他类型/名称的文件均运行正常,仅处理名为xyz.sdb的特定文件时,任务提交后立即失败
已完成操作
  1. 已从控制台获取任务提交、任务失败两个阶段的运行日志
    任务提交阶段日志:
{
  "resourceType": "lambda",
  "resource": "invoke.waitForTaskToken",
  "output": {
    "ExecutedVersion": "$LATEST",
    "Payload": null,
    "SdkHttpMetadata": {
      "AllHttpHeaders": {
        "X-Amz-Executed-Version": [
          "$LATEST"
        ],
        "x-amzn-Remapped-Content-Length": [
          "0"
        ],
        "Connection": [
          "keep-alive"
        ],
        "x-amzn-RequestId": [
          "xxxxxxxxx"
        ],
        "Content-Length": [
          "4"
        ],
        "Date": [
          "Thu, 14 Jul 2022 02:41:08 GMT"
        ],
        "X-Amzn-Trace-Id": [
          "root=1-xxxxxx-xxxxxa3e5ed0cb1d6ff;sampled=0"
        ],
        "Content-Type": [
          "application/json"
        ]
      },
      "HttpHeaders": {
        "Connection": "keep-alive",
        "Content-Length": "4",
        "Content-Type": "application/json",
        "Date": "Thu, 14 Jul 2022 02:41:08 GMT",
        "X-Amz-Executed-Version": "$LATEST",
        "x-amzn-Remapped-Content-Length": "0",
        "x-amzn-RequestId": "xxxxxx-d73a-499f-8e3c-f9ca904f94a0",
        "X-Amzn-Trace-Id": "root=1-xxxx-4f64750d7ea3e5ed0cb1d6ff;sampled=0"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "xxxxxxxxx-d73a-499f-8e3c-xxxxxx"
    },
    "StatusCode": 200
  },
  "outputDetails": {
    "truncated": false
  }
}

任务失败阶段日志:

{
  "resourceType": "lambda",
  "resource": "invoke.waitForTaskToken",
  "error": null,
  "cause": null
}
  1. 所有Step Functions相关资源通过AWS CDK部署,核心部署代码如下:
const sdbWholeFileExtractionFunction = new LambdaFunction(
      this,
      'SdbWholeFileExtractionFunction',
      {
        functionProps: {
          code: lambda.Code.fromAsset('dist/workflow/task'),
          handler: 'sdb-whole-file-extraction.handle',
          environment: {
            CLUSTER: cluster.clusterArn,
            SUBNET_IDS: JSON.stringify(subnetIds),
            TASK_DEFINITION: taskDefinition.family,
            CONTAINER_NAME: container.containerName,
          },
        },
        targetTopic: props.targetTopic,
      }
    )
    runTaskPolicy.attachToRole(
      sdbWholeFileExtractionFunction.lambdaFunction.role!
    )
    const sdbWholeFileExtractionInvocation = new tasks.LambdaInvoke(
      this,
      'SdbWholeFileExtractionInvocation',
      {
        lambdaFunction: sdbWholeFileExtractionFunction.lambdaFunction,
        integrationPattern: sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
        payload: sfn.TaskInput.fromObject({
          bookId: sfn.JsonPath.stringAt('$.bookData.bookId'),
          prefix: sfn.JsonPath.stringAt('$.bookData.prefix'),
          isDiffPackageUploaded: sfn.JsonPath.stringAt(
            '$.bookData.isDiffPackageUploaded'
          ),
          token: sfn.JsonPath.taskToken,
        }),
      }
    )
  1. 已查阅相关公开技术讨论,暂无法确认讨论中提及的CDK权限配置问题是否为本次xyz.sdb文件处理失败的诱因。
排查指引

你当前使用的是WAIT_FOR_TASK_TOKEN集成模式,该模式下Step Functions标记任务失败且error、cause均为空,基本可以归为三类原因:Lambda启动后执行逻辑崩溃未发送回调、Lambda未正确获取到Task Token、回调请求发送失败。由于其他文件处理全量正常,可直接排除全局配置类问题,按以下优先级排查即可:

  • 优先排查Lambda执行日志,不要仅依赖Step Functions控制台输出
    1. 打开Lambda控制台找到对应sdb-whole-file-extraction函数,切到监控页签,筛选处理xyz.sdb的对应时间段,查看是否有调用错误、超时、内存溢出、临时存储不足类的指标异常
    2. 点进异常调用对应的CloudWatch日志逐行排查执行栈:当前Step Functions拿到200状态码说明Lambda已经成功启动,大概率是代码处理sdb文件的分支逻辑遇到特定格式/大小/命名的文件时,抛出了未捕获异常,进程退出前既没拿到Task Token,也没向Step Functions发送回调,等Lambda执行结束后Step Functions等不到回调就会标记任务失败,且错误字段全为空
    3. 重点核对代码逻辑:是否有针对sdb文件的硬编码文件名/格式校验规则,遇到不符合预期的文件直接抛出异常但未做捕获;是否xyz.sdb文件大小、结构超出代码预设的处理阈值,导致进程直接崩溃。
  • 核对Task Token的传递与回调逻辑
    1. 你当前的Payload是把Token放在token字段下,确认Lambda代码中解析Task Token的路径是否正确,是否存在字段名写错、Payload结构解析失败,导致拿不到Token、后续回调逻辑直接走异常分支的情况
    2. 核对代码所有异常分支:只要代码逻辑中能拿到Token,所有失败分支都应该调用SendTaskFailure接口且传入明确的error、cause参数,当前日志中两个字段全为空,要么是没走到回调逻辑,要么是回调时未传这两个参数。
  • 兜底核对配置项(其他文件正常时该类问题概率极低)
    1. 确认Lambda绑定的执行角色是否包含states:SendTaskSuccess、states:SendTaskFailure、states:SendTaskHeartbeat权限
    2. 如果Lambda部署在VPC内,确认VPC是否配置了NAT网关或Step Functions服务VPC端点,保证Lambda可以正常发送回调请求
  • 最快定位方式:将出问题的xyz.sdb下载到本地,用和Lambda完全一致的运行时、内存配置直接运行处理逻辑,可快速复现代码层面的崩溃问题。

你初步判断故障为Lambda处理特定sdb文件时异常导致的方向完全正确,这类仅特定文件触发的故障,问题点一定在单文件处理的分支逻辑中,和工作流全局配置无关。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:51:35