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

CloudFlow:入力と出力

最終更新日:May 08, 2025

CloudFlow は、ワークフロー内の状態間でデータを渡します。状態は、前の状態によって提供された入力を受け取り、出力を返して次の状態に渡します。このトピックでは、ワークフローの入力と出力について説明します。

背景情報

CloudFlow ワークフローのデータは、関数型プログラミングの関数呼び出しと同様に、1 つの状態から別の状態へと流れます。各状態は入力を受け取り、出力を返します。出力データはコンテキストに格納されます。状態間のデータフローにより、複雑なロジックを必要とするビジネス アプリケーションのプロセスを自動化できます。

説明

入力と出力は JSON オブジェクトである必要があります。状態の入力と出力のサイズは 64 KiB を超えることはできません。状態の入力と出力のサイズが 64 KiB を超えると、フローは実行に失敗します。

実行の入力と出力

実行の入力

実行を開始するには、情報またはデータを提供する必要があります。情報またはデータは、1 つ以上の状態の入力として機能する場合があります。ワークフロー オーケストレーション中に $Context.Execution.Input システム式を使用することで、実行の入力にアクセスできます。

たとえば、オンラインの学生登録システムのロジックは、学生情報の収集、学生情報の検証、学生の登録という 3 つのプロセスで構成されています。各プロセスでは、学生の基本情報が必要です。この場合、学生の基本情報を、実行の入力として渡し、システム式を使用して実行入力にアクセスするように 3 つの対応する状態を構成できます。次の図は、実行入力の例を示しています。

image

実行の出力

実行の出力は、実行が成功した結果です。ワークフロー オーケストレーション中にシステム変数を使用して実行の出力にアクセスすることはできません。

状態の入力と出力

状態の入力

ワークフロー オーケストレーション中に、$Context.Current.Input システム式、またはその短縮形である $Input を使用して、現在の状態の入力にアクセスできます。

状態の出力

ワークフロー オーケストレーション中に、$Context.Current.Output システム式、またはその短縮形である $Output を使用して、現在の状態の出力にアクセスできます。短縮形 $Output は、出力コンストラクターのスコープ内でのみ使用できることに注意してください。

コンストラクター

コンストラクターで使用できるシステム式

コンストラクターでは、次のシステム式を使用できます。

  • $Context: $Context のライフサイクルは、ワークフローの実行期間全体と同じです。$Context の詳細については、「データの受け渡し」をご参照ください。

  • $Input: $Input のライフサイクルは、ワークフローが状態に入ったときに開始し、ワークフローが状態を終了したときに終了します。$Input は $Context.Current.Input の短縮形です。

  • $Output: $Output のライフサイクルは、ワークフローがタスク呼び出し応答状態に入ったときに開始し、ワークフローが状態を終了したときに終了します。$Output は $Context.Current.Output の短縮形です。

  • $Global: $Global のライフサイクルは、ワークフローの実行期間全体と同じです。$Global の詳細については、「グローバル変数」をご参照ください。

重要
  • 入力コンストラクター、出力コンストラクター、またはパラメーター コンストラクターで .$ で終わるキーには、式形式で値を割り当てる必要があります。そうでない場合、エラーが発生します。

  • $ で始まる組み込み関数またはシステム変数を使用する場合は、変数キーの末尾に .$ を追加して、変数が文字列として扱われないようにします。

  • 入力コンストラクターまたは出力コンストラクターは、最大 10 レイヤーの組み込み関数のネストをサポートします。

次の図は、$Input$Output$Context$Global システム式のライフサイクルと、さまざまな状態での割り当てプロセスを示しています。

  • $Input は実行の入力です。

  • 前の図では、$Input=InputConstructor($Context,$Global) は、スコープ内で InputConstructor$Context$Global を参照し、そこから情報を抽出できることを示しています。構築結果は $Input に割り当てられます。

  • $Output はタスク呼び出しの結果です。呼び出しが非同期 コールバック モードで開始された場合、$Output の値はコールバックの結果です。

  • $Output=OutputConstructor($Context,$Global) は、スコープ内で OutputConstructor$Context$Global を参照し、そこから情報を抽出できることを示しています。構築結果は $output に割り当てられます。

  • $Global はグローバル変数を示し、ワークフローの実行期間全体にわたってアクセスできます。

  • $Global=Merge($Global,GlobalConstructor($Context,$Global)) は、グローバル コンストラクターによって構築された変数が $Global の既存の変数とマージされ、次にすべての変数が $Global に格納されて共有グローバル変数が更新されることを示します。

  • $Context は実行全体で有効なままです。

InputConstructor

InputConstructor はワークフローの入力を構築します。InputConstructor の式は、Choice 状態の条件式とは異なります。条件式はブール値のみを返すことができますが、InputConstructor の式は任意の値を返すことができます。状態 InputConstructor では、次のシステム変数を使用できます。

  • $Context

  • $Input

  • $Global

重要

複数の入力構成が存在する場合、入力の優先順位は、InputConstructor、ItemsPath、ItemConstructor の順に降順になります。

次の状態機械定義は、InputConstructor の使用方法の例を示しています。

Type: StateMachine
Name: test3-tx
SpecVersion: v1
StartAt: InvokeFunction1
States:
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    InputConstructor:
      FieldA.$: $Context.Execution.Input
      FieldB: World
      FieldC.$: length($Context.Execution.Input)
      FieldD.$: $Global.InvokeFunctionPayload
    Parameters:
      resourceArn: >-
        acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
      invocationType: Sync
      body.$: $Input
    End: true
  - Type: Task
    Name: InvokeFunction1
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      invocationType: Sync
      resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
    GlobalConstructor:
      InvokeFunctionPayload.$: $Output.Body
    Next: InvokeFunction
  • 前の例では、InputConstructor のデータ構造は Map[String]Any です。

  • FieldA.$: $Context.Execution.Input は、FieldA キーが文字列として扱われる代わりに、$Context.Execution.Input から値を動的に取得することを示します。

  • FieldB: World は、静的文字列 'World' が FieldB に割り当てられていることを示します。FieldB キーは .$ マーカーで終わっていないため、値は動的に取得されません。

  • FieldC.$: length($Context.Execution.Input) は、組み込み関数 length を使用して $Context.Execution.Input の値の長さを取得し、その長さが FieldC に割り当てられていることを示します。コンストラクターで使用できる組み込み関数の詳細については、「組み込み関数」をご参照ください。

  • FieldD.$: $Global. InvokeFunctionPayload 式は、グローバル ストレージ空間の InvokeFunctionPayload キーの値を抽出し、その値を FieldD フィールドとして Task 状態に渡します。

OutputConstructor

InputConstructor と比較して、OutputConstructor は異なる時間に実行され、コンテキスト式でより多くの変数をサポートします。たとえば、入力コンストラクターでは $Context または $Input のみを使用できますが、出力コンストラクターでは $Output を使用して出力を表すことができます。これは、タスク呼び出しによって出力が既に生成されているためです。状態 OutputConstructor では、次のシステム変数を使用できます。

  • $Context

  • $Input

  • $Output

  • $Global

次の状態機械定義は、OutputConstructor の使用方法の例を示しています。

Type: StateMachine
Name: test3-tx
SpecVersion: v1
StartAt: InvokeFunction1
States:
  - Type: Task
    Name: InvokeFunction1
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      invocationType: Sync
      resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
    GlobalConstructor:
      InvokeFunctionPayload.$: $Output.Body
    Next: InvokeFunction
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: >-
        acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
      invocationType: Sync
      body.$: $Input
    OutputConstructor:
      returnID.$: uuid()
      functionResult.$: $Output
      functionResultStr.$: jsonToString($Output)
      executionInput.$: $Context.Execution.Input
      lastOutput.$: $Input
      demo.$: $Global
    End: true
  • 前の例では、OutputConstructor のデータ構造は map[string]any です。

  • functionResult.$ は状態出力を動的に取得し、executionInput.$ は実行入力を動的に取得し、lastOutput.$ は状態入力を動的に取得します。

  • returnID.$ は一意の ID を取得し、functionResultStr.$ は状態出力から作成された文字列を取得します。