このトピックでは、エラー処理の概要と例について説明します。再試行ポリシーとキャッチポリシーを使用して、一般的なエラーを処理し、ワークフローをより安定させることができます。
概要
CloudFlow のワークフロー統合中に、予期されたエラーまたは予期しないエラーが発生する可能性があります。この場合、現在の状態の操作を続行するか、次の状態に遷移できます。FnF.ALL
キーワードは、すべてのエラーをキャッチする特別なオプションです。再試行ポリシーとキャッチポリシーを使用してエラーを処理できます。詳細については、「再試行」と「キャッチ」をご参照ください。
エラー処理をサポートする状態
以下の状態の定義で [再試行] フィールドと [キャッチ] フィールドを使用して、再試行ポリシーとキャッチポリシーを指定し、状態のエラーを処理できます。
CloudFlow は、エラー処理時に常に最初に再試行ポリシーを実行します。再試行ポリシーが失敗した場合、CloudFlow はキャッチポリシーを実行します。
再試行
パラメーター | タイプ | 必須 | 説明 | 例 |
エラー | []string | はい | 発生する可能性のあるエラー。詳細については、「一般的なエラータイプ」をご参照ください。 | -MyCustomError -FnF.ALL |
説明 | string | はい | 再試行ポリシーの名前と説明。 | 再試行ポリシー #1 |
最大試行回数 | int | はい | 最大再試行回数。 | 3 |
間隔(秒) | int | はい | 再試行間隔。最大値:86400。単位:秒。 | 10 |
バックオフ率 | float | いいえ | 再試行が試行されるたびに、IntervalSeconds パラメーターで指定された再試行間隔が増加する倍率。 | 2 |
最大バックオフ秒数 | int | いいえ | ワークフローの実行中の最大再試行間隔。最大値:86400。単位:秒。 | 30 |
同じエラースタイプに対して複数の再試行ルールを定義した場合、CloudFlow は最初に一致した再試行ルールに基づいてのみ再試行を試みます。
キャッチ
パラメーター | タイプ | 必須 | 説明 | 例 |
エラー | []string | はい | 発生する可能性のあるエラー。詳細については、「一般的なエラータイプ」をご参照ください。 | -MyCustomError -FnF.ALL |
説明 | string | はい | キャッチポリシーの名前と説明。 | エラーキャッチルール #1 |
OutputConstructor | map[string]any | いいえ | 出力コンストラクター。このパラメーターは、Next パラメーターと一緒に使用されます。 | OutputConstructor をご参照ください。 |
次へ | string | はい | 指定されたエラーがキャッチされたときにワークフローが戻る状態。 | my-next-state |
OutputConstructor パラメーターは、Next パラメーターと一緒に使用されます。状態にエラーが発生した場合、その状態では予期される出力は生成されません。ワークフローが次の状態に遷移しても、ワークフローは続行できません。この場合、OutputConstructor パラメーターを使用して出力を構築し、その出力をワークフローが遷移する次の状態への入力として使用できます。
同じエラースタイプに対して複数のキャッチルールを定義した場合、CloudFlow は最初に一致したキャッチルールに基づいてのみキャッチを実行します。
一般的なエラータイプ
CloudFlow が Function Compute と統合されている場合、以下の一般的なエラータイプが発生します。CloudFlow が他のクラウドサービスと統合されている場合に発生するエラータイプの詳細については、対応するサービス統合ドキュメントをご参照ください。
エラータイプ | 説明 | |||
FC.{エラーコード} | Function Compute が 200 以外の HTTP ステータスコードを返します。一般的なエラータイプ:
説明
| |||
FC.Unknown | Function Compute は関数を呼び出しましたが、関数の実行中にエラーが発生し、キャッチされませんでした。エラーコードの例: | |||
{CustomError} | 呼び出し先によってスローされるカスタム例外エラー(関数の内部ビジネスエラーや CloudFlow など)。 | |||
FnF.TaskTimeout | ワークフローのステップの実行がタイムアウトしました。CloudFlow | |||
FnF.Timeout | ワークフロー全体の実行がタイムアウトしました。CloudFlow | |||
FnF.ALL | CloudFlow のすべてのエラーをシステムがキャッチします。 |
一般的なエラー処理の例
基本的な再試行
この例では、my-error-handle-example という名前のサービス統合呼び出し中にエラーが発生し、MyCustomException1
再試行ポリシーにヒットした場合、システムは再試行ポリシーに基づいて最大 3 回の再試行を試みます。3 回の再試行がすべて失敗した後、現在のエラーは MyCustomException1
キャッチポリシーにヒットします。システムは、OutputConstructor パラメーターを使用してカスタムエラー出力を構築し、カスタムエラー出力を ErrorCatchExit 状態への入力として使用します。次に、ワークフローは ErrorCatchExit
状態に遷移します。
Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: 基本的なエラー処理の例
StartAt: my-error-handle-example
States:
- Type: Task
Name: my-error-handle-example
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
invocationType: Sync
body: | // 複数行の文字列
xxx
Retry: // 再試行ポリシー
- Errors:
- MyCustomException1
Description: 再試行ポリシー 1
MaxAttempts: 3
IntervalSeconds: 2
Catch: // キャッチポリシー
- Errors:
- MyCustomException1
Description: キャッチポリシー 1
OutputConstructor:
ErrorCode: MyCustomException1
ErrorMessage: MyCustomException1
Next: ErrorCatchExit
Next: SucceededExit
- Type: Pass
Name: ErrorCatchExit
End: true
- Type: Pass
Name: SucceededExit
End: true
YAML 設定ファイルを保存する前に、resourceArn の有効性を確認する必要があります。resourceArn:acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST の resourceArn を実際の関数 ARN に置き換えてください。関数の ARN を取得する方法の詳細については、「関数の ARN を取得する」をご参照ください。
regionId: 関数が存在するリージョンの ID(cn-beijing、cn-hangzhou など)。
accountId: Alibaba Cloud アカウントの ID。
myfunction: 関数の名前。
LATEST: 関数のバージョン。ビジネス要件に基づいて、LATEST を特定のバージョンまたはエイリアスに置き換えることができます。
MyCustomException 1: ビジネス要件に基づいてエラーメッセージを変更できます。
バックオフ再試行
この例では、my-error-handle-example という名前のサービス統合呼び出し中にエラーが発生し、MyCustomException2
または MyCustomException3
再試行ポリシーにヒットした場合、システムは再試行ポリシーに基づいて最大 3 回の再試行を試みます。最初の再試行間隔は 5 秒です。システムは、バックオフ率 2.0 に基づいて、5 秒、10 秒、20 秒、40 秒の間隔で再試行を試みます。3 回の再試行がすべて失敗した後、現在のエラーは MyCustomException2
または MyCustomException3
キャッチポリシーにヒットします。システムは、OutputConstructor パラメーターを使用してカスタムエラー出力を構築し、カスタムエラー出力を ErrorCatchExit
状態への入力として使用します。次に、ワークフローは ErrorCatchExit 状態に遷移します。
Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: バックオフエラー処理の例
StartAt: my-error-handle-example
States:
- Type: Task
Name: my-error-handle-example
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
body: xxx
Retry: // 再試行ポリシー
- Errors:
- MyCustomException2
- MyCustomException3
Description: 再試行ポリシー 2
MaxAttempts: 3
IntervalSeconds: 5
BackoffRate: 2.0
Catch: // キャッチポリシー
- Errors:
- MyCustomException2
- MyCustomException3
Description: キャッチポリシー 2
Next: ErrorCatchExit
Next: SucceededExit
- Type: Pass
Name: ErrorCatchExit
End: true
- Type: Pass
Name: SucceededExit
End: true
複雑な再試行ポリシー
この例では、FnF.ALL
エラータイプに再試行ポリシーとキャッチポリシーが指定されています。my-error-handle-example という名前のサービス統合呼び出し中に、MyCustomException1
、MyCustomException2
、MyCustomException3
以外のエラーが発生した場合、システムは再試行ポリシーに基づいて最大 3 回の再試行を試みます。最初の再試行間隔は 5 秒です。バックオフ率 2.0 に基づく最後のバックオフ間隔は 40 秒です。ただし、最大バックオフ間隔は 30 秒に設定されています。システムは、5 秒、10 秒、20 秒、30 秒の間隔で再試行を試みます。3 回の再試行がすべて失敗した後、現在のエラーは FnF.ALL
キャッチポリシーにヒットします。OutputConstructor パラメーターを使用してカスタムエラー出力は構築されません。デフォルトでは、ワークフローは ErrorCatchExit
状態に遷移します。
Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: エラー処理の例
StartAt: my-error-handle-example
States:
- Type: Task
Name: my-error-handle-example
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
body: xxx
Retry: // 再試行ポリシー
- Errors:
- MyCustomException1
Description: 再試行ポリシー 1
MaxAttempts: 3
IntervalSeconds: 2
- Errors:
- MyCustomException2
- MyCustomException3
Description: 再試行ポリシー 2
MaxAttempts: 3
IntervalSeconds: 5
BackoffRate: 2.0
- Errors:
- FnF.ALL
Description: 再試行ポリシー 2
MaxAttempts: 3
IntervalSeconds: 5
BackoffRate: 2.0
MaxBackoffSeconds: 30
Catch: // キャッチポリシー
- Errors:
- MyCustomException1
Description: キャッチポリシー 1
OutputConstructor:
ErrorCode: MyCustomException1
ErrorMessage: MyCustomException1
Next: ErrorCatchExit
- Errors:
- MyCustomException2
- MyCustomException3
Description: キャッチポリシー 2
Next: ErrorCatchExit
- Errors:
- FnF.ALL
Description: キャッチポリシー 3
Next: ErrorCatchExit
Next: SucceededExit
- Type: Pass
Name: ErrorCatchExit
End: true
- Type: Pass
Name: SucceededExit
End: true