如何在 AWS Step Function 中获取纪元时间

问题描述 投票:0回答:2

我们可以使用“$$.State.EnteredTime”引用AWS Step函数中的当前时间,但这给出了ISO格式。有没有办法获取纪元秒/毫秒?我想基于此在 DynamoDB 中添加 TTL 值。

这可能吗?或者我是否必须仅为时间戳调用 Lambda 函数?

amazon-web-services serverless aws-step-functions
2个回答
11
投票

这需要一个 Lambda 调用任务。一小组值转换(例如字符串插值、JSON 解析)由内在函数本地处理。然而,大多数值转换(包括日期操作)都需要 Lambda 等外部任务资源。

"EpochExecutionTimeLambda": {
  "Type": "Task",
  "ResultPath": "$.epoch",
  "Resource": "arn:aws:lambda:us-east-1:...",
  "Parameters": {
    "dateTime.$": "$$.State.EnteredTime"
  }

lambda 处理程序当然很简单:

exports.handler = async (event) => new Date(event.dateTime).valueOf()

0
投票

作为附加提示,值得检查一下您已在 stepfunction 中使用的服务是否可以执行此操作。

例如,如果您在步骤函数中调用 RDS,则从那里获取时间戳。

SELECT UNIX_TIMESTAMP(), ...restOfQuery

直接在mysql中添加你想要的TTL(例如1个月)

SELECT UNIX_TIMESTAMP()+2592000, ...restOfQuery

或使用内部函数(也转换回发电机步骤的字符串)

States.JsonToString(States.MathAdd($.rds.unixTimestamp, 2592000))
© www.soinside.com 2019 - 2024. All rights reserved.