我们可以使用“$$.State.EnteredTime”引用AWS Step函数中的当前时间,但这给出了ISO格式。有没有办法获取纪元秒/毫秒?我想基于此在 DynamoDB 中添加 TTL 值。
这可能吗?或者我是否必须仅为时间戳调用 Lambda 函数?
这需要一个 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()
作为附加提示,值得检查一下您已在 stepfunction 中使用的服务是否可以执行此操作。
例如,如果您在步骤函数中调用 RDS,则从那里获取时间戳。
SELECT UNIX_TIMESTAMP(), ...restOfQuery
直接在mysql中添加你想要的TTL(例如1个月)
SELECT UNIX_TIMESTAMP()+2592000, ...restOfQuery
或使用内部函数(也转换回发电机步骤的字符串)
States.JsonToString(States.MathAdd($.rds.unixTimestamp, 2592000))