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

CloudFlow:データ受け渡し

最終更新日:Jan 12, 2025

フロー内の複数の状態間でのデータ受け渡しは、関数型プログラミング言語でのデータ受け渡しに似ています。CloudFlow の状態は、プログラミングの関数に似ています。状態は入力を受け入れ、出力を返し、出力をコンテキストに保存します。このトピックでは、データ受け渡しの概要と使用例について説明します。

概要

CloudFlow では、状態を組み合わせてネストできます。状態のランタイム環境のデータは、コンテキストと呼ばれます。データは、次のカテゴリに分類できます。

  • フローデータ:フローの名前とリージョン、フローを構成する状態の名前、フローの実行に使用されるResource Access Management(RAM)ロールが含まれます。

  • 実行データ:実行の名前と入力、現在の状態の入力と出力、コールバックに使用されるトークン、実行中に生成されたエラー情報、エラー処理の再試行回数が含まれます。

データアクセス

静的データか動的データかに関係なく、フローとフロー実行に関連するデータにアクセスするには、システムが提供する $Context 式を使用する必要があります。コンテキストには、次の内容が含まれています。

{
  "Execution": {
    "Name": "String",
    "Input": {},
    "RoleArn": "String"
  },
  "Current": {
    "Name": "String",
    "Input": {},
    "Output": {},
    "Error": {
      "Code": "String",
      "Detail": "String"
    },
    "RetryCount": "Number",
    "TaskToken": "String"
  }
}

コンテキストは、次のシナリオでデータを作成するために使用できます。

  • 入力コンストラクターと出力コンストラクター。詳細については、「入力と出力」をご参照ください。

  • Map 状態の ItemsPath フィールド。例:$Context.Current.Input

  • Choice 状態の Condition フィールド。例:$Context.Current.Input.Size>=1024

  • エラー処理の情報決定。例:$Context.Current.Error.Code および $Context.Current.Error.Detail

  • タスクコールバックトークンの受け渡し。例:$Context.Current.TaskToken

CloudFlow は、頻繁に使用されるショートカット $Input$Output を提供します。ショートカットを使用して、現在のノードの入力と出力にすばやくアクセスできます。

  • $Input$Context.Current.Input と同等です。

  • $Output$Context.Current.Output と同等です。

データ受け渡し

状態によって、入力と出力のロジックが異なります。入力コンストラクターと出力コンストラクターが定義されていない場合、状態には次の入力と出力のロジックがあります。

  • PassSucceedFailWait:これらの状態は入力を受け入れ、処理されていない元の入力を出力として使用します。

  • Choice:この状態は入力のみを受け入れ、出力を返さずに、入力を宛先状態に渡します。たとえば、Choice 状態は入力をデフォルトブランチに渡す場合があります。Choice 状態は、必要な条件が満たされているかどうかを判断するために、入力を特定のブランチに渡す場合もあります。必要な条件が満たされている場合、Choice 状態は入力を次の状態に渡します。

  • Parallel:システムは入力のディープコピーを作成し、コピーを複数のブランチに同時に渡します。状態の出力は Map[String]Any 形式です。Map[String]Any のキーは、ブランチ N と呼ばれる並列ブランチの暗黙的な名前です。Map[String]Any の値は、並列ブランチの実際の入力処理結果です。

  • Map:システムは、入力が配列か Map[String]Any かを判断します。Map 状態の入力が配列ではなく、ItemsPath パラメーターを使用して反復処理するコンテンツを指定していない場合、システムは Map 状態の値を反復配列として自動的に取得します。システムは配列を反復処理します。配列要素は、反復プロセッサへの入力として使用されます。Map 状態の出力は Map[String]Any 形式です。Map[String]Any のキーは Items 文字列です。Map[String]Any の値は、複数の反復結果で構成される配列です。

  • Task:この状態は、前の状態または外部データソースからの入力データを受け入れ、タスクスクリプトで特定のビジネスロジックを実行し、$Context 式を使用してデータにアクセスして操作し、タスクの実行結果を出力データとして後続の状態に渡すか、外部システムに保存します。

Type: StateMachine
Name: DataTransferExample
SpecVersion: v1
StartAt: Step1
States:
  - Type: Pass
    Name: Step1
    Next: Step2
  - Type: Parallel
    Name: Step2
    InputConstructor:
      FieldA: 123  # FieldA プロパティを持つ JSON オブジェクトを構築します
    Branches:
      - StartAt: Pass1
        States:
          - Type: Pass
            Name: Pass1
            End: true
      - StartAt: Pass2
        States:
          - Type: Pass
            Name: Pass2
            End: true
    Next: Step3
  - Type: Pass
    Name: Step3
    End: true

上記の例では、Step2 という名前の Parallel 状態で InputConstructor を使用して、FieldA プロパティを含む JSON オブジェクトを構築しています。FieldA プロパティの値は 123 です。デフォルトでは、入力は ParallelBranch #0 と ParallelBranch #1 に渡されます。たとえば、ParallelBranch #0 ブランチでは、入力は Pass1 状態に渡されます。次のコードは、Pass1 状態のコンテキストデータの例を示しています。

{
  "Execution": {
    "Name": "xxxx-xxxx-xxxx-xxxx",
    "Input": {},
    "RoleArn": "xxxx"
  },
  "Current": {
    "Name": "Pass1",
    "Input": {
      "FieldA": 123
    },
    "Output": {
      "FieldA": 123
    },
    "Error": null,
    "RetryCount": 0
  }
}