すべてのプロダクト
Search
ドキュメントセンター

CloudFlow:トラブルシューティング

最終更新日:Jan 12, 2025

サーバーレスワークフロー は、複数の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
表 3. 一般的なエラーステータス
エラーステータス説明
FC.{ErrorCode}Function Compute は 200 以外の HTTP ステータスコードを返します。次の一般的なエラーステータスが含まれます。
  • FC.ResourceThrottled: 高い同時実行性のために関数がスロットルされています。すべての関数は、合計同時実行値によって制御されます。サーバーレスワークフロー は、タスクノードが実行されるときに Function Compute を呼び出します。合計同時実行値は、他の呼び出しメソッドの同時実行値と組み合わされます。値の変更を申請できます。
  • FC.ResourceExhausted: リソース不足のために関数がスロットルされています。このタイプのエラーが発生した場合は、お問い合わせください。
  • FC.InternalServerError: Function Compute でシステムエラーが発生しました。フローを再実行してください。
説明 {Error code} は、Function Compute のエラーコードを示します。詳細については、エラーコードをご参照ください。
FC.UnknownFunction Compute は関数を呼び出しましたが、関数の実行中にエラーが発生し、エラーはキャッチされませんでした。例:UnhandledInvocationError
{CustomError}Function Compute は関数を呼び出しましたが、関数は例外をスローしました。
FnF.TaskTimeoutサーバーレスワークフロー のステップの実行がタイムアウトしました。
FnF.ALLサーバーレスワークフロー のすべてのエラーがキャッチされます。
FnF.Timeoutサーバーレスワークフロー での全体的な実行がタイムアウトしました。

カスタムエラーステータス

Function Compute と サーバーレスワークフロー の一般的なエラーに加えて、エラーステータスをカスタマイズすることもできます。関数コードを編集して例外をスローし、実行の状態またはエラーを サーバーレスワークフロー に渡すことができます。次に、サーバーレスワークフロー はフローに基づいてタスクを再試行またはリダイレクトします。次の関数コードは、Python でエラーステータスをカスタマイズする方法を示しており、このタイプのエラーをスローするタスクを サーバーレスワークフロー で再試行する方法を指定しています。カスタムタイプのエラーを処理するには、次の操作を実行します。
  1. 関数コードでエラーステータスをカスタマイズします。
    ...
    class ErrorNeedsRetry(Exception):
        pass
      
    def handler(event, context):
        try:
            # do sth
        except ServerException:
            raise ErrorNeedsRetry("custom error message")
  2. サーバーレスワークフロー のタスクステップを変更してエラーをキャッチし、タスクを再試行します。
    retry:
      - errors:
          - ErrorNeedsRetry
      intervalSeconds: 10
      maxAttempts: 3
      multiplier: 2

MNS などの別のクラウドサービスをタスクの実行ノードとして使用する

サードパーティのクラウドサービスがタスクの実行ノードとして使用されている場合、サーバーレスワークフロー はサービスの API 操作を直接呼び出してタスクを配布します。

Message Service(MNS)を実行ノードとして使用する場合、サーバーレスワークフロー は MNS の SendMessage 操作を呼び出してメッセージを送信します。詳細については、SendMessageをご参照ください。ほとんどの場合、API 操作を呼び出してこのようなタスクを実行できます。関数実行の結果は期待されていません。エラーがキャッチされた後、サーバーレスワークフロー で指定された回数まで再試行が実行されます。MNS や Visual Intelligence API などのクラウドサービスを実行ノードとして使用する場合、フローでエラーを処理する必要はありません。