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

CloudFlow:グローバル IO、グローバル変数

最終更新日:Jun 22, 2026

ワークフロー内のデータが複数のステートを経由する場合、各ステートは前のステートの出力を入力として受け取ります。ステートごとに変数を受け渡すと、ステートをまたいだデータの受け渡しが複雑になります。 CloudFlow は、このプロセスを簡素化し、効率を向上させるために、グローバル変数の仕組みを提供しています。

制限事項

これらの制限が要件を満たさない場合は、チケットを送信してください。

項目

最大値

変数キーの長さ

128 バイト

変数値の長さ

256 KiB

注意事項

重要
  • GlobalConstructor 内の $Output は、OutputConstructor の構築結果ではなく、Task ステートの生の出力を参照します。

  • OutputConstructor 内の $Global は、GlobalConstructor による構築前の生の値を参照します。

コンテキストサイズの制限

CloudFlow が $Global を使用してデータを受け渡す場合、InputConstructorOutputConstructor の出力は、コンテキストサイズが 64 KiB を超えないようにする必要があります。

競合状態

グローバル変数は、実行レベルのグローバルなキーと値のストレージ領域を提供し、実行のライフサイクル全体を通じてすべてのステートで読み書きが可能です。MapParallel などの並列ロジックがフロー内に存在する場合、異なるステート間でデータが上書きされる可能性があります。次の点に注意してください:

  1. Parallel ステートの異なるブランチには、異なるキーを使用してグローバル変数を書き込んでください。

  2. Map ステートにはグローバル変数を書き込まないでください。Map のすべてのイテレーション定義は同じであるため、GlobalConstructor 内の変数名も同じになります。異なるブランチから書き込まれた同じ変数名は、互いに上書きされます。

  3. 分散モードの子実行は、親実行のグローバル変数にアクセスできません。これは、子実行と親実行の Execution レベルが異なるためです。

グローバル変数を使用したデータの受け渡し

グローバル変数は、実行レベルのキーと値のストレージ領域を提供します。ワークフロー内のどのステートでも、ステートの終了時にグローバル変数にデータを書き込み、そのデータを他のステートに渡して利用できます。

image

上の図では、ステート A は GlobalConstructor を使用して、上流の入力から取得した $Input.key_a に対応するデータを、グローバル変数の variable_a に保存します。また、ステート A は GlobalConstructor を使用して、ステート A の出力内の $Output.key_b に対応するデータを、グローバル変数の variable_b に保存します。ワークフローは InputConstructor を使用して、グローバル変数内の variable_avariable_b の値を抽出し、これらの値をステート Z に入力として渡します。このようにして、ステートをまたいだデータの受け渡しが実現されます。

image

CloudFlow ワークフローの入力と出力は、タスク間でデータを明示的に受け渡すために使用され、タスクの独立性と明確性を確保するのに役立ちます。グローバル変数は、タスクをまたいだ共有状態またはグローバルリソース構成を維持するために使用されます。入力、出力、およびグローバル変数を組み合わせて使用することで、効率的で柔軟なシステム設計が実現されます。上の図は、InputConstructorOutputConstructor、および GlobalConstructor を比較したものです。説明:

  • InputConstructor($Context,$Global)OutputConstructor($Context,$Global)、および GlobalConstructor($Context,$Global) は、InputConstructor、OutputConstructor、および GlobalConstructor が $Context$Global を参照して情報を抽出できることを示します。

  • $Global=Merge($Global,GlobalConstructor($Context,$Global)) は、GlobalConstructor によって構築された変数が $Global 内の既存の変数とマージされ、すべての変数が $Global に保存されて共有グローバル変数が更新されることを示しています。

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

  • 図では、$Global はグローバル変数を表し、ワークフロー実行全体を通じてアクセス可能です。

グローバル変数の作成と更新

グローバル変数は、GlobalConstructor を使用して作成および更新されます。ステートの実行が終了すると、GlobalConstructor が実行されます。次のステートマシン定義は、GlobalConstructor の使用方法を示しています:

Type: StateMachine
Name: MyWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: >-
        acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
      invocationType: Sync
      body.$: $Input 
    GlobalConstructor:
      InvokeFunctionResultHeader.$: $Output.Header
      InvokeFunctionResultBody.$: $Output.Body
    End: true
  • GlobalConstructor のデータ構造は Map[String]Any です。

  • InvokeFunctionResultHeader.$: $Output.HeaderInvokeFunctionResultBody.$: $Output.Body は、関数の戻り値のヘッダーとボディが、グローバル変数の InvokeFunctionResultHeader キーと InvokeFunctionResultBody キーにそれぞれ保存されることを示しています。

グローバル変数の読み取り

CloudFlow は、グローバル変数を読み取るために $Global キーワードを定義しています。式の構築をサポートするすべてのシナリオにおいて、$Global を使用して現在の実行のグローバルストレージ領域にアクセスできます。ステートは、明示的なキーを使用してグローバルストレージ領域から値を抽出できます。次のステートマシン定義は、$Global の使用方法を示しています:

Type: StateMachine
Name: MyWorkFlow
SpecVersion: v1
StartAt: InvokeFunction1
States:
  - Type: Task
    Name: InvokeFunction1
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      invocationType: Sync
      resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
    GlobalConstructor:
      InvokeFunctionPayload.$: $Output.Body
    Next: InvokeFunction
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
      invocationType: Sync
      body.$: $Global.InvokeFunctionPayload
    OutputConstructor:
      demo.$: $Global
    End: true
  • InvokeFunction1 ステートは GlobalConstructor を実行し、その戻り値のボディをグローバル変数の InvokeFunctionPayload キーに保存します。

  • InvokeFunction ステートは、Parameters 内の $Global.InvokeFunctionPayload 式を使用して、グローバルストレージ領域から InvokeFunctionPayload キーの値を抽出し、その値を body フィールドとして Task ステートに渡して実行します。

  • InvokeFunction ステートは、OutputConstructor を使用して $Global 内の値を表示します。実行が完了すると、[ワークフロー出力] パネルに InvokeFunctionPayload の値が "hello world\n" として表示され、グローバル変数が正常に読み取られたことが確認されます。