![](/img/trans.png)
[英]How to pass parameters between Lambda Functions in 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 個分支:
job1
成功,轉到job2
job1
失敗並且未達到重試計數,則循環incrementTask -> job1
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.