

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Step Functions 中将参数传递给服务 API
<a name="connect-parameters"></a>

**管理状态和转换数据**  
了解如何[使用变量在状态之间传递数据](workflow-variables.md)和[使用 JSONata 转换数据](transforming-data.md)。

使用 `Parameters` 状态中的 `Task` 字段来控制传递给服务 API 的参数。

在 `Parameters` 字段中，必须在 API 操作中使用数组参数的复数形式。例如，如果您使用 `DescribeSnapshots` API 操作的[筛选](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSnapshots.html#API_DescribeSnapshots_RequestParameters)字段与 Amazon EC2 集成，则必须将该字段定义为 `Filters`。如果您没有使用复数形式，Step Functions 会返回以下错误：

```
The field Filter is not supported by Step Functions.
```

## 将静态 JSON 作为参数传递
<a name="connect-parameters-json"></a>

您可以直接在状态机定义中包含 JSON 对象，以作为参数传递给资源。

例如，要为 `RetryStrategy` 的 `SubmitJob` API 设置 AWS Batch 参数，您可以在参数中包含以下内容。

```
"RetryStrategy": {
  "attempts": 5
}
```

也可以使用静态 JSON 传递多个参数。作为一个更完整的示例，下面是向名为 `myTopic` 的 Amazon SNS 主题发布任务规范中的 `Resource` 和 `Parameters` 字段。

```
"Resource": "arn:aws:states:::sns:publish",
  "Parameters": {
     "TopicArn": "arn:aws:sns:us-east-2:account-id:myTopic",
     "Message": "test message",
     "MessageAttributes": {
       "my attribute no 1": {
         "DataType": "String",
         "StringValue": "value of my attribute no 1"
       },
       "my attribute no 2": {
         "DataType": "String",
         "StringValue": "value of my attribute no 2"
       }
     }
  },
```

## 使用路径将状态输入作为参数传递
<a name="connect-parameters-path"></a>

您可以使用[路径](amazon-states-language-paths.md)将部分状态输入作为参数传递。路径是一个以 `$` 开头的字符串，用于标识 JSON 文本中的组件。Step Functions 路径使用 [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/) 语法。

要指定参数使用路径，请在参数名称后使用 `.$` 结尾。例如，如果状态输入包含名为 `message` 的节点中的文本，就可以使用路径将该文本作为参数传递。

考虑以下状态输入：

```
{
  "comment": "A message in the state input",
  "input": {
    "message": "foo",
    "otherInfo": "bar"
  },
  "data": "example"
}
```

要将名为 `message` 的节点的值作为名为 `myMessage` 的参数传递，请指定以下语法：

```
"Parameters": {"myMessage.$": "$.input.message"},
```

然后，Step Functions 将值 `foo` 作为参数传递。

有关在 Step Functions 中使用参数的更多信息，请参阅以下内容：
+ [处理输入和输出](concepts-input-output-filtering.md)
+ [在 Step Functions 工作流中操作参数](input-output-inputpath-params.md)

## 将上下文对象节点作为参数传递
<a name="connect-parameters-context"></a>

除了静态内容和状态输入中的节点之外，您还可以将上下文对象中的节点作为参数传递。上下文对象是状态机执行期间存在的动态 JSON 数据。它包含状态机和当前执行的相关信息。您可以使用状态定义的 `Parameters` 字段中的路径访问上下文对象。



有关上下文对象以及如何从 `"Parameters"` 字段访问该数据的更多信息，请参阅以下内容：
+ [在 Step Functions 中从上下文对象访问执行数据](input-output-contextobject.md)
+ [访问上下文对象](input-output-contextobject.md#contextobject-access)
+ [从上下文对象获取令牌](connect-to-resource.md#wait-token-contextobject)