本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 API Gateway 创建 Step Functions API
您可以使用 Amazon API Gateway 将您的 AWS Step Functions API 与 API Gateway API 中的方法相关联。在 HTTPS 请求发送到 API 方法后,API Gateway 将会调用您的 Step Functions API 操作。
本教程说明如何创建 API 来使用一个资源和 POST
方法与 StartExecution
API 操作进行通信。您将使用 AWS Identity and Access Management (IAM) 控制台为 API Gateway 创建角色。然后,您将使用 API Gateway 控制台创建 API Gateway API,创建资源和方法,并将方法映射到 StartExecution
API 操作。最后,您将部署和测试您的 API。
注意
虽然 Amazon API Gateway 可以通过调用 StartExecution
启动 Step Functions 执行,但您必须调用 DescribeExecution
才能获得结果。
第 1 步:为 API Gateway 创建 IAM 角色
在创建您的 API Gateway API 之前,您需要向 API Gateway 授予调用 Step Functions API 操作的权限。
为 API Gateway 设置权限
-
登录到 IAM 控制台
,然后依次选择角色、创建角色。 -
在选择受信任的实体页面上,请执行以下操作:
对于可信实体类型,保留 AWS 服务的默认选择。
对于使用案例,从下拉菜单中选择 API Gateway。
选择 API Gateway,然后选择下一步。
-
在添加权限页面上,选择下一步。
-
(可选)在名称、查看和创建页面上,输入角色名称等详细信息。例如,输入
APIGatewayToStepFunctions
。 选择创建角色。
IAM 角色显示在角色列表中。
-
选择角色的名称并记下角色 ARN,如以下示例所示。
arn:aws:iam::123456789012:role/APIGatewayToStepFunctions
将策略附加到 IAM 角色
-
在角色页面上,搜索您的角色 (
APIGatewayToStepFunctions
),然后选择该角色。 -
在权限选项卡上,选择添加权限,然后选择附加策略。
-
在附加策略页面上,搜索
AWSStepFunctionsFullAccess
,选择该策略,然后选择添加权限。
第 2 步:创建 API Gateway API
在创建 IAM 角色后,您可以创建自定义 API Gateway API。
创建 API
-
打开 Amazon API Gateway 控制台
,然后选择创建 API。 在选择 API 类型页面上的 REST API 窗格中,选择构建。
在创建 REST API 页面上,选择新建 API,然后输入
StartExecutionAPI
作为 API 名称。将 API 端点类型保留为区域性,然后选择创建 API。
创建资源
-
在
StartExecutionAPI
的资源页面上,选择创建资源。 -
在创建资源页面上,输入
execution
作为资源名称,然后选择创建资源。
创建 POST 方法
-
选择 /execution 资源,然后选择创建方法。
-
对于方法类型,选择
POST
。 -
对于集成类型,选择 AWS 服务。
-
对于 AWS 区域,从列表中选择一个区域。
-
对于 AWS 服务,从列表中选择 Step Functions。
将 AWS 子域保留为空白。
-
对于 HTTP 方法,从列表中选择 POST。
注意
所有 Step Functions API 操作都使用 HTTP
POST
方法。 -
对于操作类型,选择使用操作名称。
-
对于操作名称,输入
StartExecution
。 -
对于执行角色,输入您之前创建的 IAM 角色的角色 ARN,如以下示例所示。
arn:aws:iam::123456789012:role/APIGatewayToStepFunctions
-
对于凭证缓存和默认超时,保留默认选项,然后选择保存。
API Gateway 与 Step Functions 之间的可视映射显示在 /execution - POST - 方法执行页面上。
第 3 步:测试和部署 API Gateway API
创建 API 后,您可以测试和部署它。
测试 API Gateway 和 Step Functions 之间的通信
-
在 /execution - POST - 方法执行页面上,选择测试选项卡。您可能需要选择右箭头按钮,以显示该选项卡。
-
在 /execution - POST - 方法测试选项卡上,使用现有状态机的 ARN 将以下请求参数复制到请求正文部分(或者创建使用 Lambda 函数的新状态机),然后选择测试。
{ "input": "{}", "name": "MyExecution", "stateMachineArn": "
arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld
" }有关更多信息,请参阅《AWS Step Functions API 参考》中的请求语法。
注意
如果您不希望在 API Gateway 调用正文中包含状态机的 ARN,可以在集成请求选项卡中配置映射模板,如以下示例所示。
{ "input": "$util.escapeJavaScript($input.json('$'))", "stateMachineArn": "$util.escapeJavaScript($stageVariables.arn)" }
利用这种方法,可以根据您的开发阶段(例如
dev
、test
和prod
)指定不同状态机的 ARN。有关在映射模板中指定阶段变量的更多信息,请参阅《API Gateway 开发者指南》中的$stageVariables
。 -
执行将会启动,并且执行 ARN 及其纪元日期显示在响应正文下。
{ "executionArn": "
arn:aws:states:us-east-1:123456789012:execution:HelloWorld:MyExecution
", "startDate": 1486768956.878 }注意
可以通过在 AWS Step Functions 控制台
上选择您的状态机来查看执行。
部署 API
-
在
StartExecutionAPI
的资源页面上,选择部署 API。 对于阶段,选择新建阶段。
对于阶段名称,输入
alpha
。(可选)对于描述,输入描述。
选择部署。
测试部署
-
在
StartExecutionAPI
的阶段页面上,依次展开 alpha、/、/execution、POST,然后选择 POST 方法。 -
在方法覆盖下,选择复制图标以复制您 API 的调用 URL。完整 URL 应类似于以下示例。
https://a1b2c3d4e5.execute-api.us-east-1.amazonaws.com/alpha/execution
-
在命令行中,使用您状态机的 ARN 运行
curl
命令,然后调用您的部署的 URL,如以下示例所示。curl -X POST -d '{"input": "{}","name": "MyExecution","stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld"}' https://a1b2c3d4e5.execute-api.us-east-1.amazonaws.com/alpha/execution
将返回执行 ARN 及其纪元日期,如以下示例所示。
{"executionArn":"arn:aws:states:us-east-1:123456789012:execution:HelloWorld:MyExecution","startDate":1.486772644911E9}
注意
如果您收到“缺少身份验证令牌”错误,请确保调用 URL 以 /execution 结尾。