如何在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
相关产品推荐
相关产品推荐

