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

如何在AWS Step Functions文件分析步骤调用的Lambda中获取S3文件名

解决方案

要让Lambda能拿到处理文件的S3文件名,核心是让Step Functions在调用Lambda时主动把S3的元数据(桶名、文件键)一起传过去,具体有两种常用方式:

  • 直接在Step Functions任务中传递参数
    在你的状态机定义里,找到调用分析Lambda的Task节点,在Parameters字段里添加S3的桶名和文件键,把这些数据和文件内容一起传给Lambda。比如状态机的JSON片段:

    "InvokeAnalysisLambda": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的分析Lambda名称",
      "Parameters": {
        "fileContent.$": "$.fileContent",
        "s3Bucket.$": "$.sourceS3Bucket",
        "s3FileName.$": "$.sourceS3Key"
      },
      "End": true
    }
    

    这里的$.sourceS3Bucket和$.sourceS3Key是状态机中之前节点已经获取到的S3信息(比如触发状态机的事件里的S3数据)。之后在Lambda里,直接从事件对象中读取event['s3FileName']就能拿到文件名。

  • 从S3集成状态中捕获元数据传递
    如果你的状态机是先通过S3相关的集成(比如aws-sdk:GetObject)获取文件内容的,那可以在这个状态里同时捕获S3对象的键名,再传递给后续的Lambda任务。比如:

    "GetFileFromS3": {
      "Type": "Task",
      "Resource": "arn:aws:states:::s3:getObject",
      "Parameters": {
        "Bucket": "你的S3桶名",
        "Key.$": "$.s3Key"
      },
      "ResultPath": "$.fileData",
      "Next": "InvokeAnalysisLambda"
    },
    "InvokeAnalysisLambda": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的分析Lambda名称",
      "Parameters": {
        "fileContent.$": "$.fileData.Body",
        "s3FileName.$": "$.s3Key"
      },
      "End": true
    }
    

    这样Lambda的事件里就同时包含了文件内容和对应的S3文件名。

注意:不要尝试从文件内容里反向推导文件名,这种方式不可靠,上游主动传递才是稳定的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:22:07