CloudFlow はタスク状態を使用してさまざまなサービスを呼び出します。サービス統合モードに基づいて、サービス呼び出し状態の遷移を制御できます。このトピックでは、一般的なサービス統合モードである RequestComplete、WaitForSystemCallback、および WaitForCustomCallback について説明します。
注意事項
RequestComplete、WaitForSystemCallback、および WaitForCustomCallback サービス統合モードを使用してサービスを統合できます。ただし、呼び出されたすべてのサービスがこれらの統合モードをサポートしているわけではありません。さまざまなサービスでサポートされている統合モードについては、統合モード をご参照ください。
RequestComplete
タスク状態のサービスを呼び出す場合、デフォルトで RequestComplete 統合モードが使用されます。サービスにリクエストを送信した後、システムはサービスがレスポンスを返すまで待機し、その後続タスクに進みます。
次の例は、RequestComplete 統合モードを使用して Function Compute の関数を呼び出す方法を示しています。CloudFlow がこのワークフローを実行すると、CloudFlow は指定された関数を呼び出し、関数の処理結果を待機します。呼び出しは同期であるため、ステートマシンは呼び出しが終了した後に関数処理結果を受け取ります。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation. // 関数呼び出しの例
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Sync
body: xxxx
End: trueWaitForSystemCallback
特定のタスクタイプの統合サービスと Function Compute の非同期呼び出しでは、WaitForSystemCallback 統合モードを使用できます。この方法では、タスクが完了するまで、ワークフローは次の状態に遷移できません。
次の例は、WaitForSystemCallback 統合モードを使用して Function Compute の関数を呼び出す方法を示しています。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation. // 関数呼び出しの例
Action: FC:InvokeFunction
TaskMode: WaitForSystemCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body: xxxx
End: trueWaitForSystemCallback 統合モードでは、タスクが完了するまでワークフローは次の状態に遷移できません。
WaitForSystemCallback 統合モードを使用するタスクが終了した場合、CloudFlow はタスクをキャンセルできません。統合サービスに対して予期しない料金が発生する可能性があります。予期しない料金を防ぐには、統合タスクを手動でキャンセルする必要があります。CloudFlow は、次の場合に統合タスクを自動的に終了できます。
ワークフローの実行が停止された場合。
Parallel 状態の別のブランチが、捕捉されたエラーのために失敗した場合。
Map 状態の反復が失敗し、対応するエラーが捕捉されなかった場合。
この場合、ワークフローエンジンはタスクのキャンセルに最善を尽くします。たとえば、ワークフローで WaitForSystemCallback 統合モードが使用されており、CloudFlow が子フローまたは Function Compute の関数を含む非同期タスクを呼び出す場合、CloudFlow の StopExecution API オペレーションを呼び出してワークフローを停止できます。CloudFlow は、子フローを停止し、次にワークフロー内の非同期タスク関連の関数を停止します。ただし、ワークフローエンジンは次の理由によりタスクをキャンセルできない場合があります。
実行ロールに対応する API オペレーションを呼び出す権限がない場合。
サービスが一時的に中断されている場合。
WaitForSystemCallback 統合モードをサポートする Alibaba Cloud サービスについては、通常の統合をサポートする Alibaba Cloud サービス をご参照ください。
WaitForCustomCallback
WaitForCustomCallback 統合モードは、タスクトークンを含むコールバックモードです。このモードでは、ワークフローを一時停止し、統合サービスで定義したロジックに基づいてワークフローの実行を制御できます。たとえば、フローの実行中にユーザーの承認が必要な場合、統合呼び出しは外部システムの承認フローを開始します。承認フローが完了すると、システムはワークフローをコールバックし、承認結果を返します。その後、ワークフローは後続の手順の実行を続けます。WaitForCustomCallback 統合モードを使用する統合呼び出しが開始されると、現在のタスクは自動的に一時停止されます。統合されたサービスが ReportTaskSucceeded または ReportTaskFailed API オペレーションを呼び出してタスクの実行結果を報告するまで、ワークフローは先に進みません。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation. // 関数呼び出しの例
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Sync
body: xxxx
End: true次の図は、WaitForCustomCallback 統合モードの仕組みを示しています。ポーリングと比較して、コールバックはサーバーの遅延と不要な負荷を効果的に削減します。さらに、コールバックとキューの組み合わせにより、Function Compute 以外の他のサービスのタスクを調整し、CloudFlow の調整範囲をあらゆるタイプのコンピューティングリソースに拡張できます。
例: WaitForCustomCallback 統合モードを使用するサービス統合ワークフロー
CloudFlow が外部マイクロサービスと統合されている
このセクションでは、CloudFlow を外部マイクロサービスと統合して信用調査を実行する方法について説明します。CloudFlow は、タスクトークンを含むメッセージを Simple Message Queue (formerly MNS) に送信します。外部マイクロサービスは Simple Message Queue (formerly MNS) と統合されており、Simple Message Queue のメッセージキューからメッセージを取得し、結果と元のタスクトークンを返します。その後、CloudFlow は後続のフローの実行を続けます。次の図は、完全なワークフローを示しています。
例:
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: an example of function invocation. // 関数呼び出しの例
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body:
payload.$: $Input
taskToken.$: $Context.Current.TaskToken
End: trueWaitForCustomCallback 統合モードを使用する場合、States セクションの Parameters フィールドで $Context.Current.TaskToken 式を使用してタスクトークンにアクセスできます。初期 $Context はコンテキストオブジェクトへのパスを指定し、現在のタスクのタスクトークンを取得します。
次に、外部マイクロサービスは ReportTaskSucceeded または ReportTaskFailed API オペレーションを呼び出して、トークンとタスクの実行ステータスを送信します。ワークフローは次の状態に遷移します。
CloudFlow がセルフマネージドサービスと統合されている
次の図は、Simple Message Queue (formerly MNS) サービスと API コールバックを使用して CloudFlow をセルフマネージドサービスと統合する方法を示しています。これにより、CloudFlow の使用範囲が拡張されます。Simple Message Queue (formerly MNS) は、任意の中間ストレージサービスにすることができます。