サーバーレスワークフロー は、複数のAlibaba Cloudサービスと統合できます。サーバーレスワークフロー でタスクステップの実行ノードとしてクラウドサービスを使用する場合、エラーをキャッチしたりタスクを再試行したりすることで、ビジネスシナリオに基づいて実行エラーのトラブルシューティングを行うことができます。これにより、本番シナリオでのタスクの安定した実行が保証されます。このトピックでは、さまざまなビジネスシナリオにおけるサーバーレスワークフローのエラーをトラブルシューティングする方法について説明します。
トラブルシューティング方法
サーバーレスワークフロー のタスクステップを使用して、エラーをキャッチし、エラーがキャッチされた後にタスクを再試行またはリダイレクトできます。詳細については、タスクステップをご参照ください。
- エラーがキャッチされた後にタスクを再試行します。
steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:xxx retry: - errors: - FnF.ALL intervalSeconds: 10 maxIntervalSeconds: 300 maxAttempts: 3 multiplier: 2
表 1. エラーキャッチ後のタスク再試行パラメーター パラメーター 説明 retry
エラーがキャッチされた後にタスクが再試行されることを指定します。 errors
キャッチされるエラーのリスト。 intervalSeconds
再試行間の初期間隔。最大値:86400。デフォルト値:1。単位:秒。 maxAttempts
再試行の最大回数。デフォルト値:3。 multiplier
各試行中に再試行間隔が増加する乗数。デフォルト値:2。上記のサンプルコードでは、2回目の再試行は20秒後、3回目の再試行は40秒後に行われます。 - エラーがキャッチされた後にタスクをリダイレクトします。
steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:xxx errorMappings: - target: errMsg source: $local.cause // この値はシステム用に予約されており、このステップでエラーが発生したときに直接使用できます。 - target: errCode source: $local.error // この値はシステム用に予約されており、このステップでエラーが発生したときに直接使用できます。 catch: - errors: - FnF.ALL goto: final
表 2. エラーキャッチ後のタスクリダイレクトパラメーター パラメーター 説明 errorMappings
リダイレクトで渡すことができるこのステップのエラーフィールド。 catch
タスクでエラーをキャッチするポリシー。 errors
キャッチされるエラーのリスト。 goto
タスクがエラーをスローした後にリダイレクトされるオブジェクト。
サーバーレスワークフロー でタスクの実行ノードとして Function Compute を使用する
Function Compute が サーバーレスワークフロー のタスクの実行ノードとして機能する場合、次のエラータイプに注意してください。
- Function Compute によってプロンプトされた例外
- 関数コードエラー
エラー
サーバーレスワークフロー のタスクで を指定します。Function Compute またはサーバーレスワークフローによってプロンプトされる一般的なシステムエラー
次のコードは、一般的なエラーステータスを示しています。
- errors:
- FC.ResourceThrottled
- FC.ResourceExhausted
- FC.InternalServerError
- FC.Unknown
- FnF.TaskTimeout
- FnF.ALL
エラーステータス | 説明 |
FC.{ErrorCode} | Function Compute は 200 以外の HTTP ステータスコードを返します。次の一般的なエラーステータスが含まれます。
説明 {Error code} は、Function Compute のエラーコードを示します。詳細については、エラーコードをご参照ください。 |
FC.Unknown | Function Compute は関数を呼び出しましたが、関数の実行中にエラーが発生し、エラーはキャッチされませんでした。例:UnhandledInvocationError 。 |
{CustomError} | Function Compute は関数を呼び出しましたが、関数は例外をスローしました。 |
FnF.TaskTimeout | サーバーレスワークフロー のステップの実行がタイムアウトしました。 |
FnF.ALL | サーバーレスワークフロー のすべてのエラーがキャッチされます。 |
FnF.Timeout | サーバーレスワークフロー での全体的な実行がタイムアウトしました。 |
カスタムエラーステータス
Function Compute と サーバーレスワークフロー の一般的なエラーに加えて、エラーステータスをカスタマイズすることもできます。関数コードを編集して例外をスローし、実行の状態またはエラーを サーバーレスワークフロー に渡すことができます。次に、サーバーレスワークフロー はフローに基づいてタスクを再試行またはリダイレクトします。次の関数コードは、Python でエラーステータスをカスタマイズする方法を示しており、このタイプのエラーをスローするタスクを サーバーレスワークフロー で再試行する方法を指定しています。カスタムタイプのエラーを処理するには、次の操作を実行します。
- 関数コードでエラーステータスをカスタマイズします。
... class ErrorNeedsRetry(Exception): pass def handler(event, context): try: # do sth except ServerException: raise ErrorNeedsRetry("custom error message")
- サーバーレスワークフロー のタスクステップを変更してエラーをキャッチし、タスクを再試行します。
retry: - errors: - ErrorNeedsRetry intervalSeconds: 10 maxAttempts: 3 multiplier: 2
MNS などの別のクラウドサービスをタスクの実行ノードとして使用する
サードパーティのクラウドサービスがタスクの実行ノードとして使用されている場合、サーバーレスワークフロー はサービスの API 操作を直接呼び出してタスクを配布します。
Message Service(MNS)を実行ノードとして使用する場合、サーバーレスワークフロー は MNS の SendMessage 操作を呼び出してメッセージを送信します。詳細については、SendMessageをご参照ください。ほとんどの場合、API 操作を呼び出してこのようなタスクを実行できます。関数実行の結果は期待されていません。エラーがキャッチされた後、サーバーレスワークフロー で指定された回数まで再試行が実行されます。MNS や Visual Intelligence API などのクラウドサービスを実行ノードとして使用する場合、フローでエラーを処理する必要はありません。