

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

# Step Functions で Workflow Studio を使用して状態の入力と出力を設定する
<a name="workflow-studio-process"></a>

**ステートの管理とデータの変換**  
[変数を使用したステート間のデータ受け渡し](workflow-variables.md)と [JSONata を使用したデータ変換](transforming-data.md)について説明します。

各状態は、受け取った入力に基づいて決定を下すか、アクションを実行します。ほとんどの場合、出力を他の状態に渡します。Workflow Studio では、[インスペクターパネル](workflow-studio.md#workflow-studio-components-formdefinition) パネルの **[入力]** タブおよび **[出力]** タブでステートが入力と出力データをフィルタリングし、操作する方法を設定できます。**[Info]** リンクを使用して、入力と出力を設定する時にコンテキストヘルプにアクセスします。

![\[状態入力、出力、および情報ヘルプパネルを示すスクリーンショットの例\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/wfs_input_output_01.png)


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

## 状態へ入力を構成する
<a name="workflow-studio-process-input"></a>

各状態は、前の状態からの入力を JSON として受け取ります。入力をフィルターする場合は、[インスペクターパネル](workflow-studio.md#workflow-studio-components-formdefinition) パネルの **[入力]** タブで `InputPath` フィルターを使用できます。`InputPath` は文字列であり、`$` で始まり、特定の JSON ノードを識別します。これらは[リファレンスパス](amazon-states-language-paths.md) と呼ばれ、JsonPath 構文をフォローします。

入力をフィルターするには、次の手順を実行します。
+ **[InputPath で入力をフィルタリング]** を選択します。
+ `InputPath` フィルターに有効な [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/) を入力してください。例えば、**\$1.data**。

ご自分の `InputPath` フィルターがご自分のワークフローに追加されます。

**Example 例 1: Workflow Studio スタジオの InputPath フィルターを使用する**  
ステートへの入力に次の JSON データが含まれているとします。  

```
{
  "comment": "Example for InputPath",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```
`InputPath` フィルターを適用するには、**[InputPath で入力をフィルタリング]** を選択し、適切なリファレンスパスを入力します。**\$1.dataset2.val1** に入ると、次の JSON が状態への入力として渡されます。  

```
{"a"}
```
リファレンスパスでは、値の選択もできます。リファレンスが `{ "a": [1, 2, 3, 4] }` で、リファレンスパス`$.a[0:2]` を `InputPath` フィルターとして適用した場合、結果は次のようになります。  

```
[ 1, 2 ]
```

[Parallel ワークフローの状態](state-parallel.md)、[Map 状態のワークフロー](state-map.md)、[Pass ワークフロー状態](state-pass.md) フローには、**[入力]** タブで `Parameters` と呼ばれる追加の入力フィルタリングオプションがあります。このフィルターは InputPath フィルターの後に有効になり、1 つ以上のキーバリューペアで構成されるカスタム JSON オブジェクトを構築するために使用できます。各ペアの値は、静的な値のいずれかとなり、入力から選択するか、パスを使って [Step Functions の Context オブジェクトから実行データにアクセスする](input-output-contextobject.md) から選択することができます。

**注記**  
パラメータでリファレンスパスを使用して入力内の JSON ノードを参照するように指定するには、パラメータ名の末尾を `.$` で終了します。

**Example 例 2: パラレルステート用のカスタム JSON 入力の作成**  
次の JSON データがパラレルステートへの入力であるとします。  

```
{
  "comment": "Example for Parameters",
  "product": {
    "details": {
      "color": "blue",
      "size": "small",
      "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

この入力の一部を選択し、静的な値を使って追加のキーバリューペアを渡すには、**[パラメータ]** フィールドで **[並列]** 状態の **[入力]** タブ で次のように指定できます。

```
{
 "comment": "Selecting what I care about.",
 "MyDetails": {
    "size.$": "$.product.details.size",
    "exists.$": "$.product.availability",
    "StaticValue": "foo"
    }
 }
```

次の JSON データが結果になります。

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
    "size": "small",
    "exists": "in stock",
    "StaticValue": "foo"
  }
}
```

## 状態の出力を構成
<a name="workflow-studio-process-output"></a>

状態ごとに、次の状態に渡される前にフィルタリングできる JSON 出力を生成します。複数のフィルタが使用でき、それぞれ異なる方法で出力に影響します。各状態で使用可能な出力フィルターは、**[Inspector]** 内の **[出力]** タブでリストされます。[Task ワークフロー状態](state-task.md) 状態では、選択した出力フィルターは次の順序で処理されます。

1.  `ResultSelector`: 状態の結果を操作するためにこのフィルターを使用します。結果の一部を使用して新しい JSON オブジェクトを作成できます。

1.  `Step Functions で ResultPath を使用してステートの出力を指定する`: このフィルターを使用して、出力に渡す状態入力とタスク結果の組み合わせを選択します。

1.  `OutputPath を使用したステートの出力のフィルタリング`: このフィルターを使用して、JSON 出力をフィルターして、結果からどの情報を次の状態に渡すのか選択します。

### ResultSelector の使用
<a name="workflow-studio-process-output-resultselector"></a>

`ResultSelector` は、次の状態に対するオプションの出力フィルターです。
+  [Task ワークフロー状態](state-task.md) 状態とは、[[State browser] (状態ブラウザ)](workflow-studio.md#workflow-studio-components-states) の **[アクション]** タブにあげられているすべての状態です。
+  状態ブラウザの **[フロー]** タブにある [Map 状態のワークフロー](state-map.md) 状態。
+  状態ブラウザの **[フロー]** タブにある [Parallel ワークフローの状態](state-parallel.md) 状態。

`ResultSelector` を使用して、1 つ以上のキーバリューペアで構成されるカスタム JSON オブジェクトを作成できます。各ペアの値は、静的な値にすることも、状態の結果からパスで選択することもできます。

**注記**  
パラメータでパスを使用して、結果内の JSON ノードをリファレンスにするように指定するには、パラメータ名の末尾を `.$` で終了します。

**Example ResultSelector フィルターの使用例**  
この例では、`ResultSelector` を使って、Amazon EMR `CreateCluster` 状態の Amazon EMR CreateCluster API コールからのレスポンスを操作します。以下は、Amazon EMR `CreateCluster` API コールからの結果です。  

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```
この情報パートを選択し、静的値を持つ追加のキーバリューのペアを渡すには、状態の **[出力]** タブの下、**[ResultSelector]** フィールドで次のように指定します。  

```
{
 "result": "found",
 "ClusterId.$": "$.output.ClusterId", 
 "ResourceType.$": "$.resourceType"
 }
```
`ResultSelector` を使用すると、次の結果になります。  

```
{
 "result": "found",
 "ClusterId": "AKIAIOSFODNN7EXAMPLE",
 "ResourceType": "elasticmapreduce"
}
```

### ResultPath の使用
<a name="workflow-studio-process-output-resultpath"></a>

状態の出力は、入力のコピー、生成される結果、またはその入力と結果の組み合わせです。`ResultPath` を使用して、上記のうち、状態出力に渡す組み合わせを制御します。その他の `ResultPath` ユースケースについては、[Step Functions で ResultPath を使用してステートの出力を指定する](input-output-resultpath.md) を参照してください。

`ResultPath` は、次の状態に対するオプションの出力フィルターです。
+  [Task ワークフロー状態](state-task.md) 状態は、状態ブラウザの **[アクション]** パネルにあげられているすべての状態です。
+  状態ブラウザの **[フロー]** タブにある [Map 状態のワークフロー](state-map.md) 状態。
+  状態ブラウザの **[フロー]** タブにある [Parallel ワークフローの状態](state-parallel.md) 状態。
+  状態ブラウザの **[フロー]** タブにある [Pass ワークフロー状態](state-pass.md) 状態。

`ResultPath` は、結果を元の状態の入力に追加するために使用できます。指定されたパスは、結果を追加する場所を示します。

**Example ResultPath フィルターの使用例**  
次のものがタスクステートへの入力であるとします。  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
タスクステートの結果は次のとおりです。  

```
Hello, AWS Step Functions
```
`ResultPath` を適用し、`$.taskresult` のように、結果を追加する場所を示すリファレンス[パス](amazon-states-language-paths.md)を入力して、状態の入力にこの結果を追加します。  
この `ResultPath` を使って、状態の出力として渡される JSON を次に示します。  

```
{
  "details": "Default example",
  "who": "AWS Step Functions",
  "taskresult": "Hello, AWS Step Functions!"
}
```

### OutputPath を使用する
<a name="workflow-studio-process-output-resultselector"></a>

`OutputPath` フィルターを使うと、不要な情報をフィルターして、必要な一部の JSON のみを渡すことができるようになります。`OutputPath` は `$` で始まる文字列で、JSON テキスト内のノードを識別します。

**Example OutputPath フィルターの使用例**  
Lambda Invoke API コールが Lambda 関数の結果に加えてメタデータを返すとしましょう。  

```
{
  "ExecutedVersion": "$LATEST",
  "Payload": {
     "foo": "bar",
     "colors": [
          "red",
          "blue",
          "green"    
     ],
     "car": {
          "year": 2008,
          "make": "Toyota",
          "model": "Matrix"
     }
   },
"SdkHttpMetadata": {
  "AllHttpHeaders": {
    "X-Amz-Executed-Version": ["$LATEST"]
...
```
`OutputPath` を使用して、追加のメタデータをフィルターで除外します。デフォルトでは、Workflow Studio で作成された Lambda Invoke 状態の **[OutputPath]** フィルターの値は `$.Payload` です。このデフォルト値では、追加のメタデータが削除され、Lambda 関数を直接実行するのに等しい出力が返されます。  
Lambda 呼び出しタスクの結果の例と **[出力]** フィルターの `$.Payload` の値は、次の JSON データを出力として渡します。  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
`OutputPath` フィルターは、最後に有効になる出力フィルターであるため、`ResultSelector` または `ResultPath` のような追加出力フィルターを使用する場合は、`OutputPath` フィルターの `$.Payload` のデフォルト値を適宜変更する必要があります。