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

CloudFlow:グローバル変数

最終更新日:May 08, 2025

ワークフロー内のデータが複数の状態を通過する場合、各状態は前の状態の出力を入力として受け取ります。変数を状態ごとに渡すと、状態をまたがるデータの受け渡しが複雑になります。 CloudFlow は、このプロセスを簡素化し、効率を向上させるためにグローバル変数メカニズムを提供します。

制限

次の表は、グローバル変数の制限について説明しています。最大値がビジネス要件を満たせない場合は、チケットを送信することで値を増やすことができます。

項目

最大値

変数キーの長さ

128 バイト

変数値の長さ

256 KiB

注意事項

重要
  • $OutputGlobalConstructor 内では、OutputConstructor の構築結果ではなく、Task 状態の生の出力を参照します。

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

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

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

競合状態

グローバル変数は、実行レベルのグローバル キーバリュー ストレージスペースを提供します。これは、実行ライフサイクル全体を通してすべての状態で読み取りおよび書き込みが可能です。フローにマップやパラレルなどの並列ロジックが存在する場合、異なる状態間でデータが上書きされる可能性があります。次の提案に注意してください。

  1. 異なるキーを使用して、Parallel 状態の異なるブランチにグローバル変数を書き込みます。

  2. Map 状態にグローバル変数を書き込まないでください。 Map のすべての反復定義は同じです。したがって、GlobalConstructor の変数名は同じです。異なるブランチから書き込まれた同じ変数名は互いに上書きされます。

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

グローバル変数を使用してデータを渡す

グローバル変数は、実行レベルの キーバリュー ストレージスペースを提供します。ワークフロー内の任意の状態は、状態の最後にグローバル変数にデータを書き込み、他の状態にデータを渡して消費させることができます。

上の図では、状態 A は GlobalConstructor を使用して、$Input.key_a に対応するデータ(上流の入力から取得)をグローバル変数の variable_a に格納します。また、状態 A は GlobalConstructor を使用して、状態 A の出力の $Output.key_b に対応するデータをグローバル変数の variable_b に格納します。ワークフローは InputConstructor を使用して、グローバル変数の variable_avariable_b の値を抽出し、状態 Z に入力として渡します。このようにして、状態をまたいでデータが渡されます。

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

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

  • $Global=Merge($Global,GlobalConstructor($Context,$Global)) は、グローバル コンストラクターによって構築された変数が $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. Header および InvokeFunctionResultBody.$: $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 // 戻り値の本文をグローバル変数 InvokeFunctionPayload に格納
    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 // グローバル変数 InvokeFunctionPayload を body パラメータとして使用
    OutputConstructor:
      demo.$: $Global // $Global の値を確認
    End: true
  • 状態が実行されると、InvokeFunction 関数は GlobalConstructor を実行して、InvokeFunction1 の戻り値の本文をグローバル変数の InvokeFunctionPayload キーに格納します。

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

  • InvokeFunction は OutputConstructor を使用して $Global の値を確認できます。image