このトピックでは、タスクステップと例について説明します。
属性
タスクステップは、関数計算の関数呼び出し情報を定義します。タスクステップが実行されると、対応する関数が呼び出されます。
タスクステップには、次の属性が含まれています。
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: 宛先ステップの名前。説明 宛先ステップは、現在のタスクステップと並列のステップである必要があります。
| 関数の実行ステータス | 関数計算レスポンスの HTTP ステータスコード | 関数計算レスポンス | Serverless Workflow ステップの失敗 (再試行と Catch の場合) | 再試行 |
| 未実行 | 429 | ResourceExhausted | FC.ResourceExhausted | はい |
| 未実行 | 4xx (429 以外) | ServiceNotFound、FunctionNotFound、または InvalidArgument | FC.ServiceNotFound、FC.FunctionNotFound、または FC.InvalidArgument | いいえ |
| 不確定 | 500 | InternalServerError | FC.InternalServerError | はい |
| 未実行 | 503 | ResourceThrottled | FC.ResourceThrottled | はい |
| 実行成功、エラーコードが返される | 200 | カスタムエラー (errorType を含む) | errorType | ビジネスに基づいて決定 |
| 実行失敗、エラーコードが返される | 200 | errorType なし | FC.Unknown | はい |
| 実行成功、JSON 以外のオブジェクトが返される | 200 | errorType なし | 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/helloresourceArnのパラメーター:{region}: 実際のリージョン (cn-shanghaiなど) に置き換えます。{accountID}: アカウント ID に置き換えます。アカウント ID は、フローServerless Workflow コンソール の
ページでプロフィール写真をクリックすることで表示できます (次の図を参照)。
- 関数を定義します。
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\"}}",