簡體   English   中英

在 AWS 步驟函數中中斷 map 循環執行

[英]Break an map loop execution in AWS step functions

我正在嘗試構建一個步驟 function,其中包含一個循環(映射),只要拋出特定錯誤,它就可以停止,就像這樣

        "Job": {
          "Type": "Map",
          "InputPath": "$.content",
          "ItemsPath": "$.data",
          "MaxConcurrency": 0,
          "Iterator": {
            "StartAt": "Validate",
            "States": {
              "Validate": {
                "Type": "Task",
                "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val",
                "Catch": [
                    {
                      "ErrorEquals": [
                        "ErrorOne"
                      ],
                      "Next": "BreakLoop"
                    },
                    {
                      "ErrorEquals": ["States.ALL"],
                      "Next": "FailUncaughtError"
                    }
                ],
              },
              "FailUncaughtError":{
                "Type": "Fail",
                "Error": "Uncaught error"
              },
              "BreakLoop":{
                "Type": "Fail",
                "Error": "the loop should be stopped"
              }
            }
          },
          "ResultPath": "$.content.data",
          "End": true
        }

我試圖將CatchNext元素設為 Map 之外的 state,但我做不到,因為 Map 只接受其中的狀態。 此外,AFAIK 在 AWS 文檔中沒有提到這樣的功能

不要捕獲 Map state 內部的錯誤,不要捕獲它並讓 Map state 失敗。 並向 Map state 添加一個捕獲,如果錯誤等於您要查找的錯誤,則繼續下一步:

{
  "StartAt": "Map",
  "States": {
    "Map": {
      "Type": "Map",
      "ItemsPath": "$.array",
      "Iterator": {
        "StartAt": "FaultyLambda",
        "States": {
          "FaultyLambda": {
                  "Type": "Task",
                  "Resource": "arn:aws:states:::lambda:invoke",
                  "Parameters": {
                    "FunctionName": "your function arn",
                    "Payload": {
                      "a": 1
                    }
                  },
                  "End": true
                }
        }
      },
      "Catch": [
        {
          "ErrorEquals": ["ErrorOne"],
          "Next": "BreakLoop"
        }
      ],
      "Next": "BreakLoop"
    },
    "BreakLoop": {
      "Type": "Pass",
      "End": true
    }
  }
}

任何其他錯誤都不會被捕獲並使您的整個執行失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM