

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

# 从正在运行的执行中启动新的 AWS Step Functions 状态机
<a name="connect-stepfunctions"></a>

Step Functions 与其自己的 API 集成以作为服务集成。了解如何使用 Step Functions 直接从正在运行的执行的 Task 状态启动新的状态机执行。构建新的工作流时，请使用[嵌套工作流执行](concepts-nested-workflows.md)降低主要工作流的复杂性并重用常用流程。

**经优化的 Step Functions 集成的主要功能**  
[运行作业 (.sync)](connect-to-resource.md#connect-sync) 集成模式可用。

有关更多信息，请参阅下列内容：
+ [从 Task 启动](concepts-nested-workflows.md)
+ [集成 服务](integrate-services.md)
+ [在 Step Functions 中将参数传递给服务 API](connect-parameters.md)

## 经过优化的步进函数 APIs
<a name="connect-stepfunctions-api"></a>
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)

## 工作流示例
<a name="connect-stepfunctions-api-examples"></a>

下面包括一个 `Task` 状态，此状态开始执行另一个状态机并等待其完成。

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync:2",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

下面包括一个 `Task` 状态，此状态开始执行另一个状态机。

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

以下内容包括实施[回调](connect-to-resource.md#connect-wait-token)服务集成模式的 `Task` 状态。

```
{ 
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.waitForTaskToken",
   "Arguments":{ 
      "Input":{
        "Comment": "Hello world!",
        "token": "{% $states.context.Task.Token %}"
       },
      "StateMachineArn":"arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

要将嵌套的工作流执行与启动它的父执行相关联，请传递一个特殊命名的参数，该参数包括从[上下文对象](input-output-contextobject.md)中提取的执行 ID。启动嵌套执行时，使用名为 `AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID` 的参数。传递执行 ID 并使用在 Context 对象中引用 ID。`$states.context.Execution.Id`有关更多信息，请参阅 [访问上下文对象](input-output-contextobject.md#contextobject-access)。

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!",
        "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID": "{% $states.context.Execution.Id %}"
       },
      "StateMachineArn":"arn:aws:states:{{region}}:{{account-id}}:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

 嵌套状态机返回以下内容：


| 资源 | Output | 
| --- | --- | 
| startExecution.sync | 字符串 | 
| startExecution.sync:2 | JSON | 

两者都将等待嵌套状态机完成，但它们返回不同的 `Output` 格式。例如，如果您创建一个返回对象 `{ "MyKey": "MyValue" }` 的 Lambda 函数，则会得到以下响应：

对于 startExecution.sync：

```
{
   {{<other fields>}}
   "Output": "{ \"MyKey\": \"MyValue\" }" 
}
```

对于 startExecution.sync:2：

```
{
   {{<other fields>}} 
   "Output": {
      "MyKey": "MyValue"
   }
}
```

### 为嵌套状态机配置 IAM 权限
<a name="nested-stepfunctions-iam-permissions"></a>

父状态机使用轮询和事件来确定子状态机是否已完成执行。轮询需要权限，`states:DescribeExecution`而发送 EventBridge 到 Step Functions 的事件则需要`events:PutTargets``events:PutRule`、和的权限`events:DescribeRule`。如果您的 IAM 角色中缺少这些权限，则在父状态机意识到子状态机的执行已完成之前，可能会有一段延迟。

对于为单个嵌套工作流执行调用 `StartExecution` 的状态机，应使用 IAM 策略限制该状态机的权限。

## 用于调用嵌套 Step Functions 工作流程的 IAM 策略
<a name="stepfunctions-iam"></a>

对于为单个嵌套工作流执行调用 `StartExecution` 的状态机，应使用 IAM 策略限制该状态机的权限。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:{{us-east-1}}:{{123456789012}}:stateMachine:{{myStateMachineName}}"
            ]
        }
    ]
}
```

有关更多信息，请参阅下列内容：
+ [将服务与 Step Functions 集成](integrate-services.md)
+ [在 Step Functions 中将参数传递给服务 API](connect-parameters.md)
+ [从正在运行的执行中启动新的 AWS Step Functions 状态机](#connect-stepfunctions)

------
#### [ Synchronous ]<a name="sync-async-iam-policies"></a>

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:{{us-east-1}}:{{123456789012}}:stateMachine:{{stateMachineName}}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "states:DescribeExecution",
                "states:StopExecution"
            ],
            "Resource": [
               "arn:aws:states:{{us-east-1}}:{{123456789012}}:execution:{{myStateMachineName}}:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:{{us-east-1}}:{{123456789012}}:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule"
            ]
        }
    ]
}
```

------
#### [ Asynchronous ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:{{us-east-1}}:{{123456789012}}:stateMachine:{{myStateMachineName}}"
            ]
        }
    ]
}
```

------

**所需的 ARN 类型**  
在**同步**策略中，请注意，`states:StartExecution` 需要状态机 ARN，而 `states:DescribeExecution` 和 `states:StopExecution` 需要执行 ARN。  
如果您错误地组合了所有三个操作，则 JSON 将有效，但 IAM 策略将不正确。不正确的策略可能会导致工作流程执行期间出现工作流程停滞 and/or 访问问题。

有关嵌套工作流执行的更多信息，请参阅[在 Step Functions 中从 Task 状态启动工作流程执行](concepts-nested-workflows.md)。