【问题标题】:Filtering input array in a Step Function and redirect to different states在 Step Function 中过滤输入数组并重定向到不同状态
【发布时间】:2023-02-24 01:46:10
【问题描述】:

给定以下状态输入,是否可以将 FAILS 重定向到一个状态,将 SUCCESSES 重定向到另一个状态?

[
  {
    "Status": "SUCCESS",
    "Stack": "metadata"
  },
  {
    "Status": "FAILED",
    "Stack": "metadata-roles"
  },
  {
    "Status": "FAILED",
    "Stack": "master-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "appstream-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "capability-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "action-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "domain-action-storage"
  },
  {
    "Status": "FAILED",
    "Stack": "auth0-clients"
  },
  {
    "Status": "FAILED",
    "Stack": "ecr-repository"
  },
  {
    "Status": "FAILED",
    "Stack": "ecr-replication"
  }
]

我想我需要一个 Choice 状态,但我不知道该语言是否支持这个。

如果我只有SUCCESS 项目,那么Choice 会进入All succeed 状态,如果我至少有一个项目带有FAILED,那么Choice 会进入Partially succeed 状态。如果我可以将失败的项目转移到Partially succeed 会很好,但不是强制性的。

【问题讨论】:

    标签: amazon-web-services aws-step-functions


    【解决方案1】:

    我认为您想执行以下操作。这里的想法是使用JSON Path Processing 中的过滤器表达式将数组拆分为两个列表,一个用于失败,一个用于成功。然后,您将其发送到 Parallel state,您可以在其中为成功的项目设置一个分支,为失败的项目设置一个分支。

    这个例子有点冗长,但可以让你把它放到你的帐户中,看看它是如何工作的。事实上,输出可能来自 Task,您可以使用 ResultSelector 将输出格式化为单独的项目,而不需要 Pass state。同样,在 Parallel 状态的分支中,您可以使用 InputPathParameters 获取输入的正确部分,如果您不想,则无需添加 Pass 状态。

    {
      "Comment": "A example to show how to send data to two separate states",
      "StartAt": "Generate Input",
      "States": {
        "Generate Input": {
          "Type": "Pass",
          "Result": [
            {
              "Status": "SUCCESS",
              "Stack": "metadata"
            },
            {
              "Status": "FAILED",
              "Stack": "metadata-roles"
            },
            {
              "Status": "FAILED",
              "Stack": "master-storage"
            },
            {
              "Status": "SUCCESS",
              "Stack": "appstream-storage"
            },
            {
              "Status": "SUCCESS",
              "Stack": "capability-storage"
            },
            {
              "Status": "SUCCESS",
              "Stack": "action-storage"
            },
            {
              "Status": "SUCCESS",
              "Stack": "domain-action-storage"
            },
            {
              "Status": "FAILED",
              "Stack": "auth0-clients"
            },
            {
              "Status": "FAILED",
              "Stack": "ecr-repository"
            },
            {
              "Status": "FAILED",
              "Stack": "ecr-replication"
            }
          ],
          "Next": "Split"
        },
        "Split": {
          "Type": "Pass",
          "Parameters": {
            "success.$": "$.[?(@.Status == 'SUCCESS')]",
            "failed.$": "$.[?(@.Status == 'FAILED')]"
          },
          "Next": "Parallel"
        },
        "Parallel": {
          "Type": "Parallel",
          "End": true,
          "Branches": [
            {
              "StartAt": "Get Success",
              "States": {
                "Get Success": {
                  "Type": "Pass",
                  "OutputPath": "$.success",
                  "Next": "Process Successful"
                },
                "Process Successful": {
                  "Type": "Pass",
                  "End": true
                }
              }
            },
            {
              "StartAt": "Get Failed",
              "States": {
                "Get Failed": {
                  "Type": "Pass",
                  "OutputPath": "$.failed",
                  "Next": "Process Failed"
                },
                "Process Failed": {
                  "Type": "Pass",
                  "End": true
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 2021-02-28
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多