簡體   English   中英

如何在 AWS Step Functions 中創建遞歸

[英]How to create recursion in AWS Step Functions

如果 lambda 函數將返回“失敗”狀態,如何創建將重復的步驟。

job2 = job1.next(Choice(self, "Check status.").when(Condition.number_equals("$.statusCode", 200), job3).otherwise(job2))

您不能在內部僅使用 Step Function... 或更准確地說,可能有一種方法,但是如果您確實走上了這條相當復雜且過於復雜的道路,那么您將設置自己被收取 1000 美元的費用,因為失敗的 lambda 會導致系統不斷重新運行並每次都向您收費。

您可以在 Step Function 定義中使用死信隊列或 Catch 來添加一個 SQS 隊列,並每隔一段時間觸發一次以重新啟動失敗的作業。 但又一次。 當心。 很容易最終很容易地向自己/您的公司收取數千美元

Choice狀態應該有 3 個分支:

  1. 如果job1成功,轉到job2
  2. 如果job1失敗並且未達到重試計數,則循環incrementTask -> job1
  3. 否則進入Fail狀態
checkStatus = (
    sfn.Choice(self, "CheckStatus")
    .when(sfn.Condition.number_equals("$.job1.statusCode", 200), job2)
    .when(
        sfn.Condition.and_(
            sfn.Condition.not_(sfn.Condition.number_equals("$.job1.statusCode", 200)),
            sfn.Condition.or_(
                sfn.Condition.is_not_present("$.retryCount"),
                sfn.Condition.number_less_than("$.retryCount", 3),
            ),
        ),
        incrementTask.next(job1),
    )
    .otherwise(fail)
)

添加一個 Lambda 任務,在循環回job1之前增加重試計數。 確保在job1上設置一個result_path ,這樣它就不會覆蓋retryCount

# incrementTask handler
def handler(event, context):
      event["retryCount"] = event.get("retryCount", 0) + 1
      return event

狀態機將如下所示:

狀態機

暫無
暫無

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

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