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

无需Lambda:从Step Functions的$$.Execution.StartTime提取日期构造S3路径

无需Lambda提取Step Functions执行时间日期部分的可行方案

方案1:利用States.StringSlice直接截取固定格式字符串

$$.Execution.StartTime返回的时间格式是固定的YYYY-MM-DDTHH:MM:SS.sssZ,日期部分恰好是前10个字符,直接用States.StringSlice截取索引0到10的片段即可(左闭右开规则)。

在状态机任务的参数中可以这样写:

"Parameters": {
  "S3Path": "s3://your-target-bucket/data/$$.States.StringSlice($$.Execution.StartTime, 0, 10)/"
}

如果需要单独提取日期字段再拼接路径:

"Parameters": {
  "executionDate": "$$.States.StringSlice($$.Execution.StartTime, 0, 10)",
  "S3Path": "s3://your-target-bucket/data/$.executionDate/"
}

方案2:通过日期解析函数构造标准日期格式

如果担心时间格式出现变动,可先将时间字符串解析为日期对象,再提取年月日并格式化:

"Parameters": {
  "executionDate": "$$.States.Format('{}-{:02d}-{:02d}', $$.States.ParseDateTime($$.Execution.StartTime).year, $$.States.ParseDateTime($$.Execution.StartTime).month, $$.States.ParseDateTime($$.Execution.StartTime).day)"
}

这里通过{:02d}格式化规则,确保月份和日期为个位数时自动补前导零,输出标准的YYYY-MM-DD格式。

方案3:在EventBridge触发时提前传递日期

由于状态机由EventBridge Rule触发,可直接在EventBridge的目标输入中提前构造好日期,避免在状态机内处理:
在CloudFormation的EventBridge Rule定义中配置InputTransformer:

EventPattern:
  # 你的事件匹配规则
Targets:
  - Arn: !Ref YourStateMachineArn
    Id: StateMachineTarget
    InputTransformer:
      InputPathsMap:
        "triggerTime": "$.time"
      InputTemplate: '{"executionDate": "<triggerTime.substring(0,10)>", "s3Path": "s3://your-target-bucket/data/<triggerTime.substring(0,10)>"}'

EventBridge的$.time字段格式同样为YYYY-MM-DDTHH:MM:SSZ,直接截取前10位即可,状态机接收后可直接使用$.executionDate或$.s3Path参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:27:29