

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Step Functions のステートマシンについて
<a name="concepts-statemachines"></a>

Step Functions は、*ワークフロー*とも呼ばれる*ステートマシン*に基づいています。ワークフローは、イベント駆動の一連のステップで構成されます。

ワークフローは ASL (Amazon States Language) を使用して定義します。オプションで、ビジュアルワークフローデザイナーの Workflow Studio を使用してワークフローを構築・編集することもできます。

ワークフローの各ステップは*ステート*と呼ばれます。ステートには、Flow ステートと Task ステートの 2 種類があります。

**Flow ステート**  
 Flow ステートは、ステップの実行フローを制御します。例えば、**Choice ステート**は条件ロジックを提供し、**Wait ステート**はワークフロー実行を一時停止し、**Map ステート**はデータセット内の各項目に対して子ワークフローを実行し、**Parallel ステート**はワークフローに並列分岐を作成します。

**Task ステート**  
タスク状態は、別の AWS のサービス や API の呼び出しなど、別の AWS サービスが実行する作業単位を表します。Task ステートは**アクション**とも呼ばれます。数百のアクションを選択して、 AWS および外部サービスで作業を実行できます。(注: Step Functions の外部で動作するワーカーを使用してタスクを実行することもできます。詳細については、「[アクティビティ](concepts-activities.md)」を参照してください)。

![\[Step Functions ワークフローの構成要素の図解例。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/state-machine-conceptual-jsonata.png)


**実行とエラー処理**

ワークフローを実行すると、Step Functions は*実行*と呼ばれるワークフローインスタンスを作成します。ワークフロー実行のステータスをモニタリングできます。実行でエラーが発生した場合、ワークフローがエラーをキャッチすることがあります。ユースケースによっては、後で実行を再処理してワークフローを再開できます。

**データの受け渡し**

オプションで、**入力データ**を JSON テキスト形式でワークフローに提供できます。各**ステップ**は、変数とステートの出力を使用して後続のステップにデータを渡すことができます。変数に保存されたデータは後続のステップで使用できます。ステートの出力は直後のステップの入力となります。データの受け渡しの詳細については、「[変数を使用したステート間のデータ受け渡し](workflow-variables.md)」を参照してください。

ワークフローの最後に、ステートマシンはオプションで JSON 形式で出力を生成できます。

**データの変換**

ステートとステートマシンは、**クエリ言語**を使用してデータを変換できます。推奨されるクエリ言語は **JSONata** ですが、re:Invent 2024 より前に作成されたステートマシンは **JSONPath** を使用します。下位互換性のために、ステートマシンまたは個々のステートで、JSONata のクエリ言語を使用するように明示的に設定する必要があります。

JSONata を使用するステートマシンと個々のステートは、`QueryLanguage` フィールドが [JSONata] に設定されていることで認識できます。JSONPath を使用するステートマシンとステートには、`QueryLanguage` フィールドがありません。

JSONPath を使用するステートには、InputPath、Parameters、ResultSelector、ResultPath、OutputPath などのステートフィールドがあります。JSONPath のステートマシン定義では、`.$` で終わるフィールド名や、`$.` や `$$.` で始まる値も見られますが、これらは両方ともパスを表します。パス内には、`States.MathAdd` などの組み込み関数が使用される場合があります。組み込み関数は JSONPath で**のみ**使用されます。

JSONata のステートは **Arguments** フィールドと **Output** フィールドを使用します。これらのオプションフィールドには、`"{% $type = 'local' %}"` のような JSONata 式が記述されていることがあります。JSONata では、式、演算子、関数を使用できます。詳細については[Step Functions での JSONata を使用したデータ変換](transforming-data.md)を参照してください。

**注記**  
ステートごとに使用できるクエリ言語は 1 種類のみです。1 つのステップで JSONPath と JSONata を混在させることはできません。

## 主要なコンセプト
<a name="key-concepts-get-started"></a>



以下に、コンテキストの Step Functions の主要な用語の概要を示します。




| 言葉 | 説明 | 
| --- | --- | 
| ワークフロー | 多くの場合、ビジネスプロセスを反映する一連のステップ。 | 
| 状態 |  ステートマシンの個別のステップでは、入力に基づいて決定を行い、それらの入力からアクションを実行して、出力を他の状態に渡すことができます。 詳細については、「[Step Functions で使用するワークフローの状態の検出](workflow-states.md)」を参照してください。  | 
| Workflow Studio |  ワークフローのプロトタイプ作成と構築を迅速に行えるようにする視覚的なワークフローデザイナー。 詳細については、「[Step Functions Workflow Studio でのワークフローの開発](workflow-studio.md)」を参照してください。  | 
| ステートマシン | `StartAt`、`TimeoutSeconds`、`Version` などのフィールドを使用してワークフロー内の個々の状態またはステップを表す JSON テキストを使って定義されるワークフロー。 詳細については、「[Step Functions ワークフローの Amazon States Language でのステートマシン構造](statemachine-structure.md)」を参照してください。 | 
| Amazon States Language |   ステートマシンを定義するための、JSON ベースの構造化言語。ASL では、ユーザーが作業の実行 ([`Task` 状態](state-task.md))、次に移行する状態の決定 ([`Choice` 状態](state-choice.md))、エラーによる実行の停止 ([`Fail` 状態](state-fail.md)) などを実行できる、[状態](workflow-states.md)のコレクションを定義します。 詳細については、「[Amazon States Language を使用して Step Functions ワークフローを定義する](concepts-amazon-states-language.md)」を参照してください。  | 
| 入力および出力の設定 |  ワークフローの状態で JSON データを入力として受け取ります。また、通常 JSON データを出力として次の状態に渡します。Step Functions には、状態間のデータフローを制御するためのフィルターが用意されています。 詳細については、「[Step Functions の入力および出力処理](concepts-input-output-filtering.md)」を参照してください。  | 
| サービス統合 |  ワークフローから AWS サービス API アクションを呼び出すことができます。 詳細については、「[サービスと Step Functions の統合](integrate-services.md)」を参照してください。 | 
| サービス統合タイプ |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/concepts-statemachines.html)  | 
| サービス統合パターン | を呼び出すときは AWS のサービス、次のいずれかのサービス統合パターンを使用します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/concepts-statemachines.html)  | 
| 実行 |  ステートマシンの実行は、ワークフローを実行してタスクを実施するインスタンスです。  詳細については、「[Step Functions でステートマシンの実行を開始する](statemachine-starting.md)」を参照してください。 | 

## ステートマシンデータ
<a name="concepts-state-machine-data"></a>

ステートマシンのデータは、次の形式です。
+ ステートマシンへの最初の入力
+ 状態間で渡されるデータ
+ ステートマシンからの出力

このセクションでは、ステートマシンのデータを AWS Step Functionsでフォーマットして使用する方法について説明します。

**Topics**
+ [データ形式](#concepts-state-machine-data-format)
+ [ステートマシンの入出力](#concepts-state-machine-data-state-machine-input-output)
+ [状態の入出力](#concepts-state-machine-data-state-input-output)

### データ形式
<a name="concepts-state-machine-data-format"></a>

ステートマシンデータは JSON テキストで表されます。JSON によってサポートされる任意のデータ型を使用して、ステートマシンに値を指定できます。

**注記**  
JSON テキスト形式の数値は、JavaScript セマンティクスに準拠します。これらの数値は通常、倍精度 [IEEE-854](https://standards.ieee.org/findstds/standard/854-1987.html) 値に対応しています。
有効な JSON テキストを次に示します。  
引用符で区切られたスタンドアロンの文字列
オブジェクト
配列
数字
ブール値
`null`
状態の出力は、次の状態の入力になります。ただし、[入力および出力処理](concepts-input-output-filtering.md)を使用することにより、状態が入力データのサブセットでのみ機能するよう制限できます。

### ステートマシンの入出力
<a name="concepts-state-machine-data-state-machine-input-output"></a>

初期入力データは、2 つの方法のいずれかで AWS Step Functions ステートマシンに渡すことができます。実行を開始すると、データを `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` アクションに渡すことができます。[Step Functions コンソール](https://console.aws.amazon.com/states/home?region=us-east-1#/)から、データをステートマシンに渡すこともできます。初期データは、ステートマシンの `StartAt` 状態に渡されます。入力が提供されない場合、デフォルトは空のオブジェクト (`{}`) です。

実行の出力は、最後の状態 (`terminal`) により返されます。この出力は、実行の結果に JSON テキストとして表示されます。

標準ワークフローの場合、`[DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)` アクションなど、外部呼び出し元を使用して実行履歴から実行結果を取得できます。実行結果は、[Step Functions コンソール](https://console.aws.amazon.com/states/home?region=us-east-1#/)で確認できます。

Express ワークフローについては、ログ記録を有効にしている場合は、CloudWatch Logs から結果を取得したり Step Functions コンソールで実行を表示およびデバッグしたりすることができます。詳細については、「[CloudWatch Logs を使用した Step Functions の実行履歴のログ記録](cw-logs.md)」および「[Step Functions コンソールでの実行の詳細の表示](concepts-view-execution-details.md)」を参照してください。

ステートマシンに関連するクォータも考慮する必要があります。詳細については、[Step Functions のサービスクォータ](service-quotas.md)を参照してください。

### 状態の入出力
<a name="concepts-state-machine-data-state-input-output"></a>

各状態の入力は、前の状態の JSON テキストで構成されます。または、`StartAt` 状態の場合、実行への入力で構成されます。特定のフロー制御状態は、その出力への入力をエコーします。

次の例では、ステートマシンが 2 つの数値を同時に追加します。

1.  AWS Lambda 関数を定義します。

   ```
   function Add(input) {
     var numbers = JSON.parse(input).numbers;
     var total = numbers.reduce(
       function(previousValue, currentValue, index, array) {
         return previousValue + currentValue; });
     return JSON.stringify({ result: total });
   }
   ```

1.  ステートマシンを定義します。

   ```
   {
     "Comment": "An example that adds two numbers together.",
     "StartAt": "Add",
     "Version": "1.0",
     "TimeoutSeconds": 10,
     "States":
       {
           "Add": {
             "Type": "Task",
             "Resource": "arn:aws:lambda:region:123456789012:function:Add",
             "End": true
           }
       }
   }
   ```

1. 次の JSON テキストで実行を開始します。

   ```
   { "numbers": [3, 4] }
   ```

   `Add` 状態が JSON テキストを受け取り、Lambda 関数に渡します。

   Lambda 関数は、計算の結果をその状態に返します。

   状態は、その出力で次の値を返します。

   ```
   { "result": 7 }
   ```

   `Add` はステートマシンの最終状態でもあるため、この値はステートマシンの出力として返されます。

   最終状態が出力を返さない場合、ステートマシンは空のオブジェクト (`{}`) を返します。

詳細については、「[Step Functions の入力および出力処理](concepts-input-output-filtering.md)」を参照してください。

## 他の サービス AWS Step Functions から を呼び出す
<a name="concepts-invoke-sfn"></a>

ステートマシンを呼び出すため他の複数のサービスを構成できます。ステートマシンの[ワークフロータイプ](choosing-workflow-type.md)に基づいて、ステートマシンを非同期または同期的で呼び出すことができます。ステートマシンを同期で呼び出すには、`[StartSyncExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartSyncExecution.html)` API コールを使用するか、Amazon API Gateway を Express ワークフローと統合します。非同期呼び出しでは、Step Functions はタスクトークンが返されるまでワークフローの実行を一時停止します。ただし、タスクトークンを待っていると、ワークフローが同期します。

Step Functions を呼び出すように構成できるサービスには、次のものがあります。
+  AWS Lambda、[https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html) を呼び出しを使います。
+  [Amazon API Gateway](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-api-gateway.html) 
+  [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html) 
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-StepFunctions.html) 
+  [AWS IoT ルールエンジン](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rule-actions.html) 
+  [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/connect-stepfunctions.html) 

Step Functions 呼び出しには、`StartExecution` クォータが適用されます。詳細については、以下を参照してください。
+ [Step Functions のサービスクォータ](service-quotas.md)

## ステートマシンの移行
<a name="concepts-transitions"></a>

ステートマシンの新しい実行を開始すると、システムは最上位の `StartAt` フィールドで参照されている状態で開始されます。このフィールドは文字列として指定され、ワークフロー内の状態の名前と正確に一致する必要があります (大文字と小文字が区別されます)。

状態が実行されると、 は `Next`フィールドの値 AWS Step Functions を使用して、次の状態を決定します。

 `Next` フィールドでは、状態名を文字列として指定することもできます。この文字列では大文字と小文字が区別され、ステートマシンの説明で指定されたステートの名前と正確に一致する必要があります。

例えば、次の状態には `NextState` への移行が含まれています。

```
"SomeState" : {
  ...,
  "Next" : "NextState"
}
```

ほとんどの状態では、`Next` フィールドによる 1 つの移行ルールのみ許可されます。ただし、特定のフロー制御ステート (`Choice` ステートなど) では、それぞれ独自の `Next` フィールドを使用して複数の移行ルールを指定できます。[Amazon ステートメント言語](concepts-amazon-states-language.md)では、移行の指定方法など、指定可能な各状態タイプについて詳しく説明されています。

状態には、他の状態からの受信移行を複数指定できます。

プロセスは、終了状態 (`"Type": Succeed`、`"Type": Fail`、または `"End": true` の状態) のいずれかに到達するまで繰り返されます。そうでない場合は、ランタイムエラーが発生します。

実行を [redrive](redrive-executions.md) すると状態遷移とみなされます。さらに、redrive で再実行されるすべての状態も状態遷移とみなされます。

ステートマシン内の状態には次のルールが適用されます。
+ 状態は、囲みブロック内ではどのような順序で発生してもかまいません。ただし、リストに記載されている順序は、実行順序には影響しません。この順序は状態の内容によって決まります。
+ ステートマシン内では、`start` 状態として指定できるのは 1 つの状態のみです。`start` 状態は最上位構造内の `StartAt` フィールドの値によって定義されます。
+ ステートマシンのロジックによっては (ステートマシンに複数のロジックブランチがあるかどうかなど)、複数の状態が存在する可能性があります。
+ ステートマシンが 1 つの状態のみで構成される場合、開始状態と終了状態の両方になることがあります。

### 分散マップの状態の遷移
<a name="dist-map-transitions"></a>

`Map` 状態を分散モードで使用すると、*分散マップ状態*が開始された子ワークフロー実行ごとに 1 つの状態遷移に対して課金されます。`Map` 状態をインラインモードで使用すると、状態遷移は、*インラインマップ状態*が繰り返されるごとには課金されません。

`Map` 状態を分散モードで使用することによりコストを最適化し、ネストされたワークフローを `Map` 状態の定義に含めることができます。また、*分散マップ状態*は、**Express** タイプの子ワークフロー実行を開始するときに、より高い価値を発揮します。Step Functions は Express の子ワークフロー実行のレスポンスとステータスを保存します。そのため、実行データを CloudWatch Logs に保存する必要がなくなります。エラーしきい値の定義や項目グループのバッチ処理など、*分散マップの状態*で使用できるフロー制御にアクセスすることもできます。Step Functions の料金情報については、「[AWS Step Functions の料金](https://aws.amazon.com/step-functions/pricing/)」を参照してください。

## Step Functions 読み取り整合性
<a name="concepts-read-consistency"></a>

のステートマシンの更新 AWS Step Functions は結果整合性があります。数秒以内のすべての `StartExecution` 呼び出しでは、更新された定義と `roleArn` (IAM ロールの Amazon リソースネーム (ARN)) が使用されます。`UpdateStateMachine` を呼び出したすぐ後に開始された実行では、前のステートマシン定義と `roleArn` が使用されることがあります。

詳細については次を参照してください:
+ 「*[https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html) API リファレンス*」の「AWS Step Functions 」