フロー定義言語(FDL)を使用して、CloudFlow を他の Alibaba Cloud サービスと統合し、CloudFlow で他の Alibaba Cloud サービスを呼び出すことができます。このトピックでは、CloudFlow が Function Compute と統合されて関数を呼び出す方法について説明します。
背景情報
CloudFlow は、フローの状態と状態マシンのモデルに基づいてビジネスフローを記述し、指定した API 呼び出しパラメーターを使用してフローの各ステップを完了します。
CloudFlow に関数を追加し、CloudFlow の関数を呼び出す場合は、オーケストレーションの仕様に従う必要があります。以下のセクションでは、CloudFlow に関数を追加して関数を呼び出す方法のサンプル手順を示します。
ステップ 1: 状態タイプを選択する
フローにタスク状態を追加し、タスクの定義に基づいて Function Compute をオーケストレートします。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: 関数呼び出しの例
States:
- Name: 関数呼び出しの例
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: xxx
invocationType: xxx
body: xxx
End: true
ステップ 2: 呼び出しパラメーターを設定する
Function Compute の関数の呼び出しには、関数を識別する Alibaba Cloud Resource Name(ARN)、関数の呼び出しモード、イベントパラメーターという主要なパラメーターが関係します。次の表で、パラメーターについて説明します。
Spec 仕様に従って、パラメーターはキャメルケースの命名規則に従い、小文字で始まります。
パラメーター | 必須 | パラメーターデータ型 | 説明 |
resourceArn | はい | 文字列。 | 関数を識別するために使用される関数の ARN。 |
invocationType | はい | 同期または非同期。 | 関数の呼び出しモード。 |
body | いいえ | JSON オブジェクトまたは文字列。呼び出される関数に渡される前にバイト配列にシリアル化されます。 | イベントパラメーター。関数実行プロセスの入力パラメーターです。 |
サンプルコード:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: 同期関数呼び出しの例
States:
- Name: 同期関数呼び出しの例
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
testKey: 関数のイベントにおける testKey パラメーターの内容
Next: 非同期関数呼び出しの例
- Name: 非同期関数呼び出しの例
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
invocationType: Async
body:
key1: value1
key2: value2
End: true
ステップ 3: 統合モードを設定する
タスク状態は TaskMode 属性をサポートしています。これは、現在の状態が API 呼び出しを処理する方法を定義します。CloudFlow と Function Compute の統合では、次の統合モードがサポートされています。
このモードでは、システムがリクエストに応答して結果を返した後、フローは次の状態に進みます。このモードは、同期関数呼び出し、非同期関数呼び出し、および非同期タスク呼び出しに有効です。
このモードでは、システムが関数呼び出しのリクエストを送信した後、関数システムはシステムコールバック通知を送信します。ワークフローがシステムコールバック通知を受信すると、ワークフローは次のステップを実行します。このモードは、非同期関数呼び出しと非同期タスク呼び出しにのみ有効です。
関数呼び出しリクエストが完了した後、ワークフローは待機を続けます。ユーザー プログラムが CloudFlow が提供するコールバックを使用して API に通知を送信するように通知し、CloudFlow がコールバック通知を受信するまで、ワークフローは進みません。このモードは、非同期関数呼び出しと非同期タスク呼び出しにのみ有効です。
関数呼び出しの詳細については、「同期呼び出し」、「非同期呼び出し」、および「非同期タスク管理」をご参照ください。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: 同期関数呼び出しの例
States:
- Name: 同期関数呼び出しの例
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
testKey: 関数のイベントにおける testKey パラメーターの内容
Next: 非同期関数呼び出しの例
- Name: 非同期関数呼び出しの例
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
invocationType: Async
body:
key1: value1
key2: value2
End: true
body パラメーターに callbackToken カスタムフィールドを追加し、callbackToken カスタムフィールドで $Context.Current.TaskToken 式を参照する必要があります。この式は、ワークフローがタスク実行結果をコールバックするときに使用する必要があるトークン属性を指定します。
ステップ 4: 呼び出しパラメーターを構築する
実際のフローオーケストレーションでは、ワークフローのコンテキストと前の状態の結果に基づいて、現在の関数呼び出しに必要なパラメーターを構築する必要があります。次のコードは、呼び出しパラメーターを構築する方法の例を示しています。
Spec 仕様で予約されている
$Contextおよび$Input定数を使用して、フロー内のデータにアクセスできます。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: 関数呼び出しの例
States:
- Name: 関数呼び出しの例
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
argument1.$: $Input.input.BucketName
argument2.$: $Input.input.TaskId
End: true
ステップ 5: 呼び出し結果を処理する
状態を呼び出してフロー全体を完了します。関数呼び出しシナリオでは、ワークフローは呼び出しの完了後に実行結果を返します。返された結果は、フローの条件付きステートメントとして、または次の状態の入力として使用できます。Function Compute の InvokeFunction API 定義によれば、関数のレスポンスパラメーター Type の値が Byte の場合、実際のデータ型は Byte です。関数の戻り値は、文字列、JSON オブジェクト、JSON 配列、または基本データ型の場合があります。
RequestComplete 統合モードでは、ワークフローは返された結果を受信した後、結果を JSON オブジェクトにカプセル化します。次のコードは、ワークフローの結果のカプセル化構造を示しています。
{ "Body": "function invocation result" }ワークフローの説明で
$Output.Bodyの JSONPath を使用して、関数の戻り値にアクセスできます。戻り値が JSON オブジェクトの場合、ワークフローのビルトイン関数を呼び出して戻り値を逆シリアル化できます。その後、JSON オブジェクトの操作に基づいて、戻り値のメンバーにアクセスできます。Type: StateMachine Name: MyWorkflow SpecVersion: v1 Description: ' ' StartAt: 関数呼び出しの例 1 States: - Name: 関数呼び出しの例 1 Type: Task TaskMode: RequestComplete Action: FC:InvokeFunction Parameters: resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1 invocationType: Sync body: argument1.$: $Input.Records argument2.$: $Input.BucketName Next: 条件付きステートメント - Type: Choice Name: 条件付きステートメント Branches: - Condition: $Input.ObjectSize >= $Input.Threshold Next: 関数呼び出しの例 2 Default: 操作は実行されません。 - Type: Pass Name: 操作は実行されません。 End: true - Name: 関数呼び出しの例 2 Type: Task TaskMode: RequestComplete Action: FC:InvokeFunction Parameters: resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2 invocationType: Sync body: argument1.$: $Input.BucketName argument2.$: $Input.TaskId End: trueWaitForSystemCallback および WaitForCustomCallback 統合モードでは、外部システムは ReportTaskSucceeded または ReportTaskFailed API 操作を呼び出して関数呼び出し結果をクエリし、結果をフローに渡します。ワークフローは返された結果をカプセル化しません。たとえば、関数の戻り値が {"message": "hello"} の場合、ワークフローの戻り値の構造は次のコードのようになります。
{ "message": "hello" }ワークフローの説明で $Output 式を使用して、関数の戻り値にアクセスできます。
一般的なエラー定義
FC.ResourceThrottled: 高い同時実行性のために関数がスロットルされています。関数呼び出しの合計数は、特定の同時実行値を超えることはできません。CloudFlow は、タスク状態を実行するときに Function Compute を同期的に呼び出します。同時実行値は、CloudFlow での関数呼び出しと他のモードでの関数呼び出しをカバーします。同時実行値が要件を満たせない場合は、同時実行値の変更をリクエストできます。FC.ResourceExhausted: リソース不足のために関数がスロットルされています。このエラーが発生した場合は、お問い合わせください。FC.InternalServerError: Function Compute でシステムエラーが発生しました。フローを再実行してください。FC.AccessDenied: Alibaba Cloud アカウントに必要な権限がないため、アクセスリクエストが拒否されました。FC.InvalidArgument: パラメーターが無効です。FC.EntityTooLarge: 指定された入力パラメーター値が有効値の範囲を超えています。
Function Compute のその他のエラーについては、「エラーコード」をご参照ください。