无效的状态机定义
Invalid State Machine Definition
我正在制作一个 4 lambda 阶跃函数,导致一个巨大的 JSON,这很容易出错。我把它通过 JSON 格式化程序,所以我不确定我在这里弄错了什么。感谢任何帮助,谢谢。
请注意,是否有工具可以帮助我将 CF 步函数转换为 HCL/JSON?
这是JSON:
{
"StartAt":"StartState",
"States":{
"StartState":{
"Type":"Pass",
"Next":"GetLastExecutionDateTime"
},
"GetLastExecutionDateTime":{
"Type":"Task",
"Parameters":{
"Payload.$":"$"
},
"Resource":"${aws_lambda_function.read.arn}",
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"1",
"BackoffRate":"2"
},
"Next":"GetDeltaRecordsNumber",
"ResultPath":"$.lastExecutedDateTime",
"OutputPath":"$.lastExecutedDateTime.Payload"
},
"GetDeltaRecordsNumber":{
"Type":"Task",
"Parameters":{
"Payload.$":"$"
},
"Resource":"${aws_lambda_function.count.arn}",
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"6",
"BackoffRate":"2"
},
"Next":"DeltaRecordsNumber",
"ResultPath":"$.Payload"
},
"DeltaRecordsNumber":{
"Type":"Choice",
"Choices":{
"Variable":"$.Payload.Payload.totalRows",
"NumericEquals":"0",
"Next":"EndState"
},
"Default":"Iterator"
},
"Iterator":{
"Type":"Map",
"Next":"PassNewExecutionDateTime",
"Iterator":{
"StartAt":"ExecuteSqlQuery",
"States":{
"ExecuteSqlQuery":{
"Type":"Task",
"Resource":"${aws_lambda_function.query.arn}",
"OutputPath":"$.Payload",
"Parameters":{
"Payload.$":"$"
},
"End":"True"
}
}
},
"ItemsPath":"$.Payload.Payload.iterations",
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"1",
"MaxAttempts":"1",
"BackoffRate":"1"
},
"Catch":{
"ErrorEquals":[
"States.ALL"
],
"Next":"EndState",
"ResultPath":"$.Payload"
},
"ResultPath":"null"
},
"PassNewExecutionDateTime":{
"Type":"Pass",
"Next":"StoreNewExecutionDateTIme",
"OutputPath":"$.Payload.Payload"
},
"StoreNewExecutionDateTIme":{
"Type":"Task",
"Resource":"${aws_lambda_function.write.arn}",
"OutputPath":"$.Payload",
"Parameters":{
"Payload.$":"$"
},
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"1",
"BackoffRate":"2"
},
"Next":"EndState"
},
"EndState":{
"Type":"Pass",
"End":"true"
}
}
}
这是错误:
╷
│ Error: error creating Step Function State Machine (dev-main-workflow): InvalidDefinition: Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/GetLastExecutionDateTime/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/GetDeltaRecordsNumber/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/DeltaRecordsNumber/Choices, SCHEMA_VALIDATION_FAILED: Expected value of type Boolean at /States/Iterator/Iterator/States/ExecuteSqlQuery/End, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/Iterator/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/Iterator/Catch, SCHEMA_VALIDATION_FAILED: Value is not a Reference Path: Reference path didn't start with '$' at /States/Iterator/ResultPath, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/StoreNewExecutionDateTIme/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type Boolean at /States/EndState/End, MISSING_END_STATE: Workflow has no terminal state at null, MISSING_TRANSITION_TARGET: State "Iterator" is not reachable. at /States/Iterator'
│
│ with aws_sfn_state_machine.main-workflow,
│ on step-function.tf line 3, in resource "aws_sfn_state_machine" "main-workflow":
│ 3: resource "aws_sfn_state_machine" "main-workflow" {
│
╵
此处缺少数组,应该是
"Resource":"${aws_lambda_function.read.arn}",
"Retry":[{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"1",
"BackoffRate":"2"
},]
你选择的流程也有同样的问题,应该是
"DeltaRecordsNumber":{
"Type":"Choice",
"Choices":[
{
"Variable":"$.Payload.Payload.totalRows",
"NumericEquals": 0,
"Next":"EndState"
}
],
"Default":"Iterator"
},
你的 JSON 文档中有更多重试,你需要数组而不是对象。
我正在制作一个 4 lambda 阶跃函数,导致一个巨大的 JSON,这很容易出错。我把它通过 JSON 格式化程序,所以我不确定我在这里弄错了什么。感谢任何帮助,谢谢。
请注意,是否有工具可以帮助我将 CF 步函数转换为 HCL/JSON?
这是JSON:
{
"StartAt":"StartState",
"States":{
"StartState":{
"Type":"Pass",
"Next":"GetLastExecutionDateTime"
},
"GetLastExecutionDateTime":{
"Type":"Task",
"Parameters":{
"Payload.$":"$"
},
"Resource":"${aws_lambda_function.read.arn}",
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"1",
"BackoffRate":"2"
},
"Next":"GetDeltaRecordsNumber",
"ResultPath":"$.lastExecutedDateTime",
"OutputPath":"$.lastExecutedDateTime.Payload"
},
"GetDeltaRecordsNumber":{
"Type":"Task",
"Parameters":{
"Payload.$":"$"
},
"Resource":"${aws_lambda_function.count.arn}",
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"6",
"BackoffRate":"2"
},
"Next":"DeltaRecordsNumber",
"ResultPath":"$.Payload"
},
"DeltaRecordsNumber":{
"Type":"Choice",
"Choices":{
"Variable":"$.Payload.Payload.totalRows",
"NumericEquals":"0",
"Next":"EndState"
},
"Default":"Iterator"
},
"Iterator":{
"Type":"Map",
"Next":"PassNewExecutionDateTime",
"Iterator":{
"StartAt":"ExecuteSqlQuery",
"States":{
"ExecuteSqlQuery":{
"Type":"Task",
"Resource":"${aws_lambda_function.query.arn}",
"OutputPath":"$.Payload",
"Parameters":{
"Payload.$":"$"
},
"End":"True"
}
}
},
"ItemsPath":"$.Payload.Payload.iterations",
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"1",
"MaxAttempts":"1",
"BackoffRate":"1"
},
"Catch":{
"ErrorEquals":[
"States.ALL"
],
"Next":"EndState",
"ResultPath":"$.Payload"
},
"ResultPath":"null"
},
"PassNewExecutionDateTime":{
"Type":"Pass",
"Next":"StoreNewExecutionDateTIme",
"OutputPath":"$.Payload.Payload"
},
"StoreNewExecutionDateTIme":{
"Type":"Task",
"Resource":"${aws_lambda_function.write.arn}",
"OutputPath":"$.Payload",
"Parameters":{
"Payload.$":"$"
},
"Retry":{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"1",
"BackoffRate":"2"
},
"Next":"EndState"
},
"EndState":{
"Type":"Pass",
"End":"true"
}
}
}
这是错误:
╷
│ Error: error creating Step Function State Machine (dev-main-workflow): InvalidDefinition: Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/GetLastExecutionDateTime/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/GetDeltaRecordsNumber/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/DeltaRecordsNumber/Choices, SCHEMA_VALIDATION_FAILED: Expected value of type Boolean at /States/Iterator/Iterator/States/ExecuteSqlQuery/End, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/Iterator/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/Iterator/Catch, SCHEMA_VALIDATION_FAILED: Value is not a Reference Path: Reference path didn't start with '$' at /States/Iterator/ResultPath, SCHEMA_VALIDATION_FAILED: Expected value of type [ARRAY] at /States/StoreNewExecutionDateTIme/Retry, SCHEMA_VALIDATION_FAILED: Expected value of type Boolean at /States/EndState/End, MISSING_END_STATE: Workflow has no terminal state at null, MISSING_TRANSITION_TARGET: State "Iterator" is not reachable. at /States/Iterator'
│
│ with aws_sfn_state_machine.main-workflow,
│ on step-function.tf line 3, in resource "aws_sfn_state_machine" "main-workflow":
│ 3: resource "aws_sfn_state_machine" "main-workflow" {
│
╵
此处缺少数组,应该是
"Resource":"${aws_lambda_function.read.arn}",
"Retry":[{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":"2",
"MaxAttempts":"1",
"BackoffRate":"2"
},]
你选择的流程也有同样的问题,应该是
"DeltaRecordsNumber":{
"Type":"Choice",
"Choices":[
{
"Variable":"$.Payload.Payload.totalRows",
"NumericEquals": 0,
"Next":"EndState"
}
],
"Default":"Iterator"
},
你的 JSON 文档中有更多重试,你需要数组而不是对象。