フロー内の複数の状態間でのデータ受け渡しは、関数型プログラミング言語でのデータ受け渡しに似ています。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と同等です。
データ受け渡し
状態によって、入力と出力のロジックが異なります。入力コンストラクターと出力コンストラクターが定義されていない場合、状態には次の入力と出力のロジックがあります。
Pass、Succeed、Fail、Wait:これらの状態は入力を受け入れ、処理されていない元の入力を出力として使用します。
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
}
}