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"
}
我一直在尝试创建一个带有选择步骤的步骤函数,该步骤充当规则引擎。我想将一个日期变量(来自陈旧的输入 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"
}