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

CloudFlow:タスクステップ

最終更新日:Jan 12, 2025

このトピックでは、タスクステップと例について説明します。

属性

タスクステップは、関数計算の関数呼び出し情報を定義します。タスクステップが実行されると、対応する関数が呼び出されます。

タスクステップには、次の属性が含まれています。

  • type: ステップタイプ。値 task は、ステップがタスクステップであることを示します。
  • name: ステップの名前。
  • resourceArn: リソース識別子。関数、MNS キュー、または Serverless Workflow フローを指定できます。例: acs:fc:cn-shanghai:18807708****3420:services/fnf_test/functions/hello。詳細については、「サービス統合」をご参照ください。
  • オプション:pattern: 統合サービスの実行モード。統合サービスごとに、サポートされる実行モードが異なります。デフォルト値: requestResponse。有効な値:
    • requestResponse: タスクが送信された後、システムはタスクの実行が終了するまで待機し、その後ステップを続行します。
    • sync: システムはタスクが非同期に送信された後、タスクの実行が終了するまで待機し、タスクの実行結果を受信した後にステップを続行します。
    • waitForCallback: システムは、タスクが非同期に送信された後 (関数の呼び出しなど)、ステップを一時停止し、システムがタスクのコールバックリクエストまたはタイムアウト通知を受信するまで待機します。
  • オプション:timeoutSeconds: タスクのタイムアウト期間。タスクの実行時間が指定されたタイムアウト期間を超えると、タスクステップはタイムアウトになります。
  • オプション:end: 現在のステップが終了した後、後続のステップに進むかどうかを指定します。
  • オプション:inputMappings: 入力マッピング。タスクステップの入力は、関数呼び出しのイベントとして使用されます。詳細については、「InvokeFunction」をご参照ください。
  • オプション:outputMappings: 出力マッピング。$local は関数呼び出しの結果であり、JSON 形式である必要があります。
    説明 出力マッピングが指定されていない場合、$local はデフォルトでこのステップの出力として使用されます。
  • オプション:errorMappings: エラーマッピング。この属性パラメーターは、ステップの実行中にエラーが発生し、catch パラメーターが指定されている場合にのみ有効です。$local.cause および $local.error の値を使用して、エラー情報を出力にマッピングし、次のステップに渡すことができます。
    説明 $local.error および $local.code の値はシステム用に予約されています。 errorMappings の source フィールドは、これら 2 つの値に設定する必要があります。詳細については、「」をご参照ください。また、errorMappings パラメーターはオプションです。指定しない場合、エラー発生後に次のステップでエラー情報を取得できません。
  • retry: 再試行ポリシーのグループ。各再試行ポリシーには、次の属性があります:
    • errors: 1 つ以上のエラー。詳細については、以下の表をご参照ください。エラー定義
    • intervalSeconds: 再試行間の初期間隔。最大値は 86,400 秒です。デフォルト値: 1 秒。
    • maxIntervalSeconds: 再試行の最大時間間隔。最大値とデフォルト値はどちらも 86,400 秒です。
    • maxAttempts: 最大再試行回数。デフォルト値: 3。
    • multiplier: 次の再試行間隔を作成するために再試行間隔に乗算される値。デフォルト値: 2。
  • catch: catch ポリシーのグループ。各 catch ポリシーには、次の属性があります:
    • errors: 1 つ以上のエラー。詳細については、以下の表をご参照ください。
    • goto: 宛先ステップの名前。
      説明 宛先ステップは、現在のタスクステップと並列のステップである必要があります。
表 1. エラー定義
関数の実行ステータス関数計算レスポンスの HTTP ステータスコード関数計算レスポンスServerless Workflow ステップの失敗 (再試行と Catch の場合)再試行
未実行429ResourceExhaustedFC.ResourceExhaustedはい
未実行4xx (429 以外)ServiceNotFoundFunctionNotFound、または InvalidArgumentFC.ServiceNotFoundFC.FunctionNotFound、または FC.InvalidArgumentいいえ
不確定500InternalServerErrorFC.InternalServerErrorはい
未実行503ResourceThrottledFC.ResourceThrottledはい
実行成功、エラーコードが返される200カスタムエラー (errorType を含む)errorTypeビジネスに基づいて決定
実行失敗、エラーコードが返される200errorType なしFC.Unknownはい
実行成功、JSON 以外のオブジェクトが返される200errorType なしFC.InvalidOutputいいえ
その他のエラー:
  • FnF.ALL: 再試行または goto のユースケースのすべてのエラーをキャプチャします。

  • シンプルなタスクステップ

    次のサンプルフローには、タスクステップが含まれています。

    • 入力が {"name": "function flow"} の場合、出力は {"hello": "function flow"} です。
    • フローに入力が指定されていない場合、またはフロー入力に name キーが含まれていない場合、タスクステップの実行は失敗し、フローの失敗につながります。
    • フローを定義します。
      version: v1
      type: flow
      steps:
        - type: task
          name: hello
          resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello           
      resourceArn のパラメーター:
      • {region}: 実際のリージョン ( cn-shanghai など) に置き換えます。
      • {accountID}: アカウント ID に置き換えます。アカウント ID は、フローServerless Workflow コンソールcreate_flow_step1 ページでプロフィール写真をクリックすることで表示できます (次の図を参照)。
    • 関数を定義します。
      import json
      
      class MyError(Exception):
        pass
      
      def handle(event, context):
        evt = json.loads(event)
        if "name" in evt:
          return {
            "hello": evt["name"]
          }
        else:
          raise MyError("My unhandled exception")          
  • 再試行

    次の例は、MyError 時にタスクを再試行する方法を示しています。フローに入力が指定されていない場合、またはフロー入力に name キーが含まれていない場合、Serverless Workflow は再試行ポリシーに基づいてタスクを複数回再試行できません。

    • 最初のエラー発生後 3 秒間待機し、関数を再度呼び出します。
    • 2 番目のエラー発生後 6 秒 (intervalSeconds x multiplier) 待機し、関数を再度呼び出します。
    • 3 番目のエラー発生後 12 秒 (intervalSeconds x multiplier x multiplier) 待機し、関数を再度呼び出します。
    • 3 回の再試行後もエラーが発生する場合は、再試行回数が maxAttempts を超えています。そのため、タスクステップは失敗し、フローは失敗します。
    version: v1
    type: flow
    steps:
      - type: task
        name: hello
        resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello
        retry:
          - errors:
            - MyError
            intervalSeconds: 3
            maxAttempts: 3
            multiplier: 2            
  • エラーの catch

    次の例は、MyError を catch し、final ステップに移動する方法を示しています。エラーが catch されるため、フローは成功します。

    version: v1
    type: flow
    steps:
      - type: task
        name: hello
        resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello
        catch:
          - errors:
            - MyError
            goto: final
      - type: pass
        name: pass1
      - type: pass
        name: final           
  • エラーマッピングを指定したエラーの catch

    次の例は、MyError を catch し、final ステップに移動する方法を示しています。エラーマッピングが指定されているため、final ステップでエラー情報を取得して処理できます。フローは成功します。errorMappings で、このステップの入力と定数を出力にマッピングするように指定することもできます。

    version: v1
    type: flow
    steps:
      - type: task
        name: hello
        resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello
        errorMappings:
          - target: errMsg
            source: $local.cause # この値はシステム用に予約されており、このステップでエラーが発生したときに直接使用できます。
          - target: errCode
            source: $local.error # この値はシステム用に予約されており、このステップでエラーが発生したときに直接使用できます。
        catch:
          - errors:
            - MyError
            goto: final
      - type: pass
        name: pass1
      - type: pass
        name: final  

    最後のステップの event では、EventDetail に次のコンテンツが表示されます。

    "EventDetail": "{\"input\":{},\"local\":{\"errorCode\":\"MyError\",\"errorMsg\":\"some message\"}}",