[英]How can I pass the input and error of my failing task to a fallback task using AWS Step Functions?
我正在嘗試向我的步驟函數狀態機添加一些錯誤處理,並且我在特定場景中遇到了問題,例如,如果我在某個步驟上失敗了,我可以將其發送到另一個函數,但是在該功能我需要使用最后一步輸入數據(失敗的那個)來執行邏輯,但是,我只是收到一個錯誤,有沒有辦法傳遞帶有錯誤的輸入數據?
Send Notification:
Type: Task
Resource: !GetAtt CommunicationSendCertifiedEmail.Arn
Retry:
- ErrorEquals:
- TierOneError
IntervalSeconds: 2
MaxAttempts: 9
BackoffRate: 1.5
- ErrorEquals:
- TierTwoError
IntervalSeconds: 4
MaxAttempts: 6
BackoffRate: 1.5
- ErrorEquals:
- TierThreeError
IntervalSeconds: 4
MaxAttempts: 3
BackoffRate: 2
- ErrorEquals:
- States.Timeout
- States.Runtime
- States.TaskFailed
- Lambda.ServiceException
IntervalSeconds: 4
MaxAttempts: 3
BackoffRate: 2
Catch:
- ErrorEquals:
- States.ALL
Next: Send Email Notification
在“發送電子郵件通知”上是我在執行失敗之前需要輸入的地方,但正如我之前所說,我只是得到這樣的東西:
{
"Error": "Error",
"Cause": "{\"errorType\":\"Error\",\"errorMessage\":...
}
我想得到這樣的東西:
{
"data": "{...}",
"Error": "Error",
"Cause": "{\"errorType\":\"Error\",\"errorMessage\":...
}
有任何想法嗎? 甚至有可能嗎?
在Catch
使用ResultPath
將錯誤包含在原始輸入中,而不是替換它。
結果路徑(可選)
確定將哪些輸入發送到 Next 字段中指定的狀態的路徑。
這將選擇並覆蓋整個輸入以將其替換為狀態輸出(在這種情況下是錯誤的),這就是為什么您沒有獲得任何輸入數據的原因。
這是一個示例 -這不是您想要的,而是當前正在發生的事情:
為錯誤輸出應該去的位置指定一個ResultPath
。
這樣一來,它會采取的狀態輸出(這是一個錯誤在這種情況下),並包括它與輸入。
這不會覆蓋所有狀態輸入,這允許您保留輸入。
這是一個例子 -這就是你想要的:
嘗試:
Catch:
- ErrorEquals:
- States.ALL
Next: Send Email Notification
ResultPath: $.error
如果前面的Catch
聲明捕獲了一個錯誤,它會包括一個錯誤輸出error
狀態下輸入內節點(節點被稱為error
,因為我們指定的路徑是$.error
)。
這就像上面的第二個圖。
例如,如果發送通知的狀態輸入是:
{
"foo": "bar"
}
當捕獲錯誤時,發送到Send Email Notification的狀態輸出將如下所示。
{
"foo": "bar",
"error": {
"Error": "Error here"
}
}
它也可能是下面的,因為對象通常還包含Cause
字段(就像你的情況一樣)。 該字段的值是人類可讀的錯誤描述。
{
"foo": "bar",
"error": {
"Error": "Error here",
"Cause": "{\"errorType\":\"Error\",\"errorMessage\"
}
}
重要的提示:
根據您的輸入數據為error
節點選擇一個唯一的名稱,因為我剛剛將error
用於演示目的。
如果指定的節點已經存在,例如您已經有一個名稱為error
的字段,則ResultPath
將使用您不想要的錯誤輸出更新並覆蓋該節點。
一張圖片值一千字,所以這是使用ResultPath
可能的第三條路徑(同樣,這不是你想要的):
如果您好奇,最后一條可能的路徑(與問題無關但很高興知道)是丟棄狀態結果(您需要它,因此它不相關)並保留原始輸入。
設置ResultPath
到null
實現這一點,因為概述這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.