Amazon web services 使AWS Step功能参数可选

Amazon web services 使AWS Step功能参数可选,amazon-web-services,aws-step-functions,Amazon Web Services,Aws Step Functions,有没有办法使AWS Step功能参数可选? 或 接受一个表达式,表示如果传递了该值,则选择该值,否则默认为某个值 例如: 假设我的参数定义如下: "Parameters": { "comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.inputSize

有没有办法使AWS Step功能参数可选? 或 接受一个表达式,表示如果传递了该值,则选择该值,否则默认为某个值

例如:

假设我的参数定义如下:

"Parameters": {
        "comment": "Selecting what I care about.",
        "MyDetails": {
          "size.$": "$.inputSize"
        }
      },

如果我不传递inputSize,step函数将失败。是否有办法将其作为可选参数,或使用类似inputSize | | 10的表达式,其中如果未传递任何内容,将选择10

简短回答是

关于Step函数state input/output和state InputPath/OutputPath,需要注意两件事

  • 输入处理不支持默认属性值。所有属性都必须来自前一个状态或作为步骤函数调用的输入。()
  • JsonPath只能用于引用InputPath或OutputPath中的属性。如果输入或结果中不存在权限,则会引发错误。()
  • 建议

    我的建议是将
    inputSize
    属性设置为零或负数,无论是在前一个状态还是在step函数调用期间(不要忘记在各种中间状态中传递它)。然后,根据
    inputSize
    属性的值,您可以在工作流中使用不同的路由


    另一种方法是使用一个强制布尔属性,该属性告诉输入或结果中是否存在特定属性。如果我们想检查属性是否为空,并在工作流中采用不同的路径,这可能会很有帮助。

    我自己通过添加一个额外的步骤来解决这个问题

    因此,我的StepFunction会在自身上循环,所以第一次执行时,该值不存在,我需要传入0,然后在循环时递增

    "Prepare": {
      "Type": "Task",
      "TimeoutSeconds": 60,
      "Resource": "...",
      "ResultPath": "$.prepareResult",
      "Parameters": {
        "Runs.$": "$.prepareResult.runs"
      },
      ...
      "Next": "PrepareDecision"
    },
    
    第一次运行此操作时,
    prepareResult
    不存在,因此执行时会抛出错误

    一旦执行,它将返回一个结果,该结果将附加到
    prepareResult
    ,并包含
    运行的值

    默认值包括一个
    PrepareDefaults
    步骤,该步骤在该步骤之前执行

    "PrepareDefaults": {
      "Type": "Pass",
      "ResultPath": "$.prepareResult",
      "Parameters": {
        "runs": 0
      },
      "Next": "Prepare"
    },
    
    parameters属性按原样返回,并分配给路径
    prepareResult
    ,该路径允许它在下一步中存在

    执行StepFunction时,会传入默认值0

    注意:在PrepareDefaults状态下,必须为要分配给的参数设置ResultPath,否则将覆盖/全部/当前执行中的数据


    注2:您可以选择使用此方法来表示如果值存在,则直接转到状态X;如果值不存在,则转到Y以在转到X之前对其进行默认设置。
    $[?(@.inputSize)].inputSize
    。如果存在
    inputSize
    ,则返回
    inputSize
    ,否则返回空对象或数组?