使用 API Gateway 创建 Step Functions API - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 API Gateway 创建 Step Functions API

您可以使用 Amazon API Gateway 将您 Amazon Step Functions 的 API 与 API Gateway API 中的方法相关联。在 HTTPS 请求发送到 API 方法后,API Gateway 将会调用您的 Step Functions API 操作。

本教程说明如何创建 API 来使用一个资源和 POST 方法与 StartExecution API 操作进行通信。您将使用 Amazon 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 设置权限
  1. 登录到 IAM 控制台,然后依次选择角色创建角色

  2. 选择受信任的实体页面上,请执行以下操作:

    1. 对于可信实体类型,保留 Amazon Web Service的默认选择。

    2. 对于使用案例,从下拉菜单中选择 API Gateway

  3. 选择 API Gateway,然后选择下一步

  4. 添加权限页面上,选择下一步

  5. (可选)在名称、查看和创建页面上,输入角色名称等详细信息。例如,输入 APIGatewayToStepFunctions

  6. 选择创建角色

    IAM 角色显示在角色列表中。

  7. 选择角色的名称并记下角色 ARN,如以下示例所示。

    arn:aws:iam::123456789012:role/APIGatewayToStepFunctions
将策略附加到 IAM 角色
  1. 角色页面上,搜索您的角色 (APIGatewayToStepFunctions),然后选择该角色。

  2. 权限选项卡上,选择添加权限,然后选择附加策略

  3. 附加策略页面上,搜索 AWSStepFunctionsFullAccess,选择该策略,然后选择添加权限

第 2 步:创建 API Gateway API

在创建 IAM 角色后,您可以创建自定义 API Gateway API。

创建 API
  1. 打开 Amazon API Gateway 控制台,然后选择创建 API

  2. 选择 API 类型页面上的 REST API 窗格中,选择构建

  3. 在 “创建 REST API” 页面上,选择 “新建 API”,然后输入 StartExecutionAPI 作为 API 名称

  4. API 端点类型保留为区域性,然后选择创建 API

创建资源
  1. StartExecutionAPI资源页面上,选择创建资源

  2. 创建资源页面上,输入 execution 作为资源名称,然后选择创建资源

创建 POST 方法
  1. 选择 /execution 资源,然后选择创建方法

  2. 对于方法类型,选择 POST

  3. 对于集成类型,选择 Amazon 服务

  4. 对于 Amazon Web Services 区域,从列表中选择一个区域。

    注意

    有关当前支持 Step Functions 的区域,请参阅支持的区域

  5. 对于 Amazon Web Service,从列表中选择 Step Functions

  6. Amazon 子域保留为空白。

  7. 对于 HTTP 方法,从列表中选择 POST

    注意

    所有 Step Functions API 操作都使用 HTTP POST 方法。

  8. 对于操作类型,选择使用操作名称

  9. 对于操作名称,输入 StartExecution

  10. 对于执行角色,输入您之前创建的 IAM 角色的角色 ARN,如以下示例所示。

    arn:aws:iam::123456789012:role/APIGatewayToStepFunctions
  11. 对于凭证缓存默认超时,保留默认选项,然后选择保存

API Gateway 与 Step Functions 之间的可视映射显示在 /execution - POST - 方法执行页面上。

第 3 步:测试和部署 API Gateway API

创建 API 后,您可以测试和部署它。

测试 API Gateway 和 Step Functions 之间的通信
  1. /execution - POST - 方法执行页面上,选择测试选项卡。您可能需要选择右箭头按钮,以显示该选项卡。

  2. /execution - POST - 方法测试选项卡上,使用现有状态机的 ARN 将以下请求参数复制到请求正文部分(或者创建使用 Lambda 函数的新状态机),然后选择测试

    { "input": "{}", "name": "MyExecution", "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld" }

    有关更多信息,请参阅《Amazon Step Functions API 参考》中的请求语法

    注意

    如果您不希望在 API Gateway 调用正文中包含状态机的 ARN,可以在集成请求选项卡中配置映射模板,如以下示例所示。

    { "input": "$util.escapeJavaScript($input.json('$'))", "stateMachineArn": "$util.escapeJavaScript($stageVariables.arn)" }

    利用这种方法,可以根据您的开发阶段(例如 devtestprod)指定不同状态机的 ARN。有关在映射模板中指定阶段变量的更多信息,请参阅《API Gateway 开发者指南》中的 $stageVariables

  3. 执行将会启动,并且执行 ARN 及其纪元日期显示在响应正文下。

    { "executionArn": "arn:aws:states:us-east-1:123456789012:execution:HelloWorld:MyExecution", "startDate": 1486768956.878 }
    注意

    可以通过在 Amazon Step Functions 控制台上选择您的状态机来查看执行。

部署 API
  1. StartExecutionAPI资源页面上,选择部署 API

  2. 对于阶段,选择新建阶段

  3. 对于阶段名称,输入 alpha

  4. (可选)对于描述,输入描述。

  5. 选择部署

测试部署
  1. StartExecutionAPI 的 “阶段” 页面上,展开 alpha//exec ution、POST,然后选择 POST 方法。

  2. 方法覆盖下,选择复制图标以复制您 API 的调用 URL。完整 URL 应类似于以下示例。

    https://a1b2c3d4e5.execute-api.us-east-1.amazonaws.com/alpha/execution
  3. 在命令行中,使用您状态机的 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 结尾。