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

CloudFlow:CloudFlow と Function Compute を統合する

最終更新日:Feb 13, 2025

フロー定義言語(FDL)を使用して、CloudFlow を他の Alibaba Cloud サービスと統合し、CloudFlow で他の Alibaba Cloud サービスを呼び出すことができます。このトピックでは、CloudFlowFunction 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 呼び出しを処理する方法を定義します。CloudFlowFunction Compute の統合では、次の統合モードがサポートされています。

  • RequestComplete

    このモードでは、システムがリクエストに応答して結果を返した後、フローは次の状態に進みます。このモードは、同期関数呼び出し、非同期関数呼び出し、および非同期タスク呼び出しに有効です。

  • WaitForSystemCallback

    このモードでは、システムが関数呼び出しのリクエストを送信した後、関数システムはシステムコールバック通知を送信します。ワークフローがシステムコールバック通知を受信すると、ワークフローは次のステップを実行します。このモードは、非同期関数呼び出しと非同期タスク呼び出しにのみ有効です。

  • WaitForCustomCallback

    関数呼び出しリクエストが完了した後、ワークフローは待機を続けます。ユーザー プログラムが 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 ComputeInvokeFunction 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: true
    
  • WaitForSystemCallback および 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 のその他のエラーについては、「エラーコード」をご参照ください。