AWS Step 函数 - 选择步骤 - TimestampEquals 与多个输入变量匹配

AWS Step function - choice step - TimestampEquals matching with multiple input variables

我一直在尝试创建一个带有选择步骤的步骤函数,该步骤充当规则引擎。我想将一个日期变量(来自陈旧的输入 JSON)与我使用 lambda 函数生成的另一个日期变量进行比较。

AWS documentation 没有详细介绍 Timestamp 比较器函数,但我假设它可以处理两个输入变量。这是代码的相关部分:

{
  "Variable": "$.staleInputVariable",
  "TimestampEquals": "$.generatedTimestampUsingLambda"
}

这是我在尝试更新(!!!)stepFunction 时遇到的错误。我想强调一个事实,我什至没有调用 stepFunction,因为它在更新函数时失败了。

Resource handler returned message: "Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: String does not match RFC3339 timestamp at ..... (Service: AWSStepFunctions; Status Code: 400; Error Code: InvalidDefinition; Request ID: 97df9775-7d2d-4dd2-929b-470c8s741eaf; Proxy: null)" (RequestToken: 030aa97d-35a5-a6a5-0ac5-5698a8662bc2, HandlerErrorCode: InvalidRequest)

stepfunction 在没有时间戳匹配的情况下更新,因此,我怀疑这段代码..有任何猜测吗?

编辑(08.Jun.2021):

A comparison – Two fields that specify an input variable to compare, the type of comparison, and the value to compare the variable to. Choice Rules support comparison between two variables. Within a Choice Rule, the value of Variable can be compared with another value from the state input by appending Path to name of supported comparison operators. Source: AWS docs

明明可以比较两个变量,但是没有用。还在努力:)

当我向一位同事解释该问题时,我意识到 AWS 文档提到了 Path 后缀(我将其与 $. 混淆了)。此路径需要添加到 operatorName。

以下代码有效:

{
  "Variable": "$.staleInputVariable",
  "TimestampEqualsPath": "$.generatedTimestampUsingLambda"
}

再次提醒您注意“Path”这个词。这就是魔法!

看起来您确实从下面链接的线程中找到了解决最初挑战的方法。

Using an amazon step function, how do I write a choice operator that references current time?

但是,我认为您想将 $.staleInputVariable 与当前时间戳进行比较,但我认为您必须配置一个 lambda 函数(并测试它!)才能做到这一点。

如果是这样,您只需使用 Context Object$$.:

即可实现
{
  "Variable": "$$.State.EnteredTime",
  "TimestampEqualsPath": "$.staleInputVariable"
}