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

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

最終更新日:Mar 12, 2026

複数ステートで構成されるワークフローでは、各ステートは前のステートの出力を入力として受け取ります。仮に、ステート A が生成した値を、遠く離れたステート Z のみが必要とする場合でも、その値は途中にあるすべての中間ステートを通過しなければなりません。このような値の連鎖 (チェイニング) は、ワークフローを複雑にし、メンテナンスを困難にします。

グローバル変数はこの問題を解決します。任意のステートで値を保存し、他の任意のステートからチェーン全体をバイパスして直接その値を読み取ることができます。

image

クイックリファレンス

操作構文
書き込みGlobalConstructor 状態定義内myVar.$: $Output.Body
読み取り$Global.<key>$Global.myVar
キーの最大長128 Bytes--
値の最大サイズ256 KiB--

仕組み

グローバル変数は、実行レベルのキーバリューストアを提供します。任意のステートが終了時にこのストレージにデータを書き込むことができ、後続の任意のステートが入力チェーンを介してデータを受け取ることなく、そのデータを直接読み取ることができます。

コンストラクター

CloudFlow は、ステート内およびステート間でデータフローを管理するために、3 つのコンストラクターを使用します。

コンストラクター目的使用するケース
GlobalConstructorグローバルストレージに値を書き込む隣接していないステート間でデータを共有する
InputConstructorステートへの入力データを再形成するステートが実行される前に入力をフィルターまたは再構築する
OutputConstructorステートからの出力データを再形成する次のステートに渡す前に出力をフィルターまたは再構築する

3 つのコンストラクターはすべて、$Context$Global の両方を参照して情報を抽出できます。

次の図は、コンストラクターがステート内でどのように相互作用するかを示しています。

image

主な動作:

  • $Output は、Task 呼び出しの生の結果です。非同期コールバックタスクの場合、$Output にはコールバックの結果が含まれます。

  • GlobalConstructor が実行されると、その出力は既存の $Global の値とマージされます: $Global = Merge($Global, GlobalConstructor($Context, $Global))

  • $Global は、ワークフローの実行全体を通じてアクセス可能です。

評価順序

コンストラクターは、各ステート内で固定された順序で評価されます。GlobalConstructorOutputConstructor$Output$Global の異なるスナップショットを読み取るため、この順序を理解することが非常に重要です。

  1. Task が実行され、$Output (生のタスク結果) を生成します。

  2. GlobalConstructor が評価されます。ここでは $Output (生のタスク結果であり、OutputConstructor の結果ではありません) を使用します。

  3. OutputConstructor が評価されます。ここでは $Global (GlobalConstructor が更新するの値) を使用します。

具体例:

ある Task ステートが $Output = {"status": "ok", "data": {"id": 42}} を返します。現在のグローバルストレージは $Global = {"previousId": 10} です。

GlobalConstructor:
  latestId.$: $Output.data.id       # 42 を $Global.latestId に書き込みます

OutputConstructor:
  combined.$: $Global.previousId    # 10 (GlobalConstructor が実行される前の値) を読み取ります

このステートが完了した後:

  • $Global = {"previousId": 10, "latestId": 42} (マージ済み)

  • ステートの出力 = {"combined": 10} (更新前の $Global の値を使用)

重要

$Output in GlobalConstructor は、Task ステートの生の結果を指し、OutputConstructor の結果ではありません。同様に、$Global in OutputConstructor は、GlobalConstructor が値を更新する前の値を指します。

グローバル変数の書き込み

グローバル変数を書き込むには GlobalConstructor を使用します。これは各ステートの実行の最後に実行され、そのデータ構造は Map[String]Any です。

次の例では、関数の応答のヘッダーとボディを、それぞれ別のグローバル変数として保存します。

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

この定義では:

  • InvokeFunctionResultHeader.$: $Output.Header は、関数のレスポンスヘッダーを InvokeFunctionResultHeader グローバル変数に保存します。

  • InvokeFunctionResultBody.$: $Output.Body は、関数のレスポンスボディを InvokeFunctionResultBody グローバル変数に保存します。

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

グローバル変数を読み取るには、$Global キーワードを使用します。構築をサポートする任意の式は、$Global.<key> を通じてグローバルストレージにアクセスできます。

次の例は、最初のステートがグローバル変数を書き込み、2 番目のステートがそれを読み取る、2 つのステートからなるワークフローを示しています。

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 は、そのレスポンスボディを InvokeFunctionPayload グローバル変数に保存します。

  • InvokeFunction$Global.InvokeFunctionPayload を読み取り、それを body パラメーターとして関数の呼び出しに渡します。

  • OutputConstructor は、$Global の全コンテンツをステート出力の demo フィールドにマッピングします。

グローバル変数の値は、CloudFlow コンソールで実行出力を確認することで検証できます。

image

制限事項

項目最大値
変数キーの長さ128 Bytes
変数値の長さ256 KiB
コンテキストサイズ (InputConstructorOutputConstructor の出力が $Global を使用する場合)64 KiB

これらの制限がお客様のニーズを満たさない場合は、チケットを送信して上限緩和をリクエストしてください。

説明

$Global を介してデータを渡す場合、InputConstructorOutputConstructor の両方の出力は、64 KiB のコンテキストサイズの制限内に収める必要があります。

並列実行における競合状態

グローバル変数は、1 つの実行内のすべてのステートで共有されます。並列ロジック (Parallel または Map ステート) が存在する場合、同時書き込みによって互いに上書きされる可能性があります。以下のガイドラインに従ってください。

シナリオガイダンス
Parallel ステートブランチごとに一意キーを使用します。各ブランチは、上書きを避けるために独自のキーに書き込みます。
Map ステートグローバル変数を書き込まないでください。すべての反復は同じ GlobalConstructor 定義を共有するため、同じキーに書き込み、互いに上書きしてしまいます。
分散サブ実行分散モードのサブ実行は、親エグゼキューションのグローバル変数にアクセスできません。これらは異なる Execution レベルで実行され、個別のグローバルストレージを持ちます。