8

根据亚马逊的文档,可以使用 HTTP API 调用 step 函数。

Step Functions 可以通过 Step Functions 控制台、AWS 开发工具包或 HTTP API 访问和使用。

我试图搜索详细信息,但似乎找不到任何好的信息。有谁知道如何使用 API 网关调用 AWS step 函数,类似于它调用 Lambda 函数的方式?

4

4 回答 4

4

这不是 AWS 的“官方”方式——请参阅 Erndob 的回答。

AWS 方式(使用 AWS 凭证签署每个请求)的问题在于,大多数企业已经拥有成熟的方法来通过其 API 网关管理身份验证和授权,并且(作为企业架构师)不想处理令人头疼的在 AWS 凭证级别复制此内容。

我确信 AWS 最终会将 Step Functions 与 API Gateway 集成,但在撰写本文时(1/17),这可能是完成工作的最简单方法。下面是我编写的一个简单的 Lambda 代理函数,用于利用 SDK 对请求进行签名的能力:

'use strict';

const AWS = require('aws-sdk');
const stepfunctions = new AWS.StepFunctions();

exports.handler = (event, context, callback) => {
    if(!event && event.action)
        callback("Error: 'action' is required.");
    if(!event && event.params)
        callback("Error: 'params' is required.");
    
    stepfunctions[event.action](event.params, function (err, data) {
        if (err) 
            console.log(err, err.stack);
        callback(err, data);
    });
};

您将需要授予您的 Lambda 权限以与您的 Step Functions 交互。要授予它对所有操作的完全访问权限,请创建一个新角色并附加以下策略:

  • AWSLambdaBasicExecutionRole
  • AWSStepFunctionsFullAccess

现在将 Lambda 配置为正常通过 API 网关调用,传入具有两个属性的事件:

  • 操作(Step Functions 方法名称,如“startExecution”)
  • 参数(该方法所需的参数。参考这里:http ://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/StepFunctions.html )

并确保锁定您的 API!:-)

于 2017-01-20T22:38:22.553 回答
4

如果您需要从 API Gateway 调用 StepFunction,现在可以在文档中进行详细描述:https ://docs.aws.amazon.com/step-functions/latest/dg/tutorial-api-gateway.html

  • 对于集成类型,选择AWS Service
  • 对于 AWS 服务,Step Functions从列表中选择
  • 对于 HTTP 方法,POST从列表中选择
  • 对于操作类型,选择Use action name
  • 对于操作,键入StartExecution
  • 对于执行角色,键入具有API Gateway受信任的身份提供者和附加策略的角色的 ARNAWSStepFunctionsFullAccess
于 2017-03-06T07:43:13.503 回答
3

它使用的是 HTTP API,而不是 API Gateway。

阶跃函数端点遵循以下格式:

https://states.${region}.amazonaws.com

例如:

https://states.us-east-1.amazonaws.com

您使用 HTTP API(同样,不是 API 网关)对您的状态执行操作。

更多关于 HTTP API 的信息:

http://docs.aws.amazon.com/step-functions/latest/apireference/Welcome.html

从技术上讲,您可以使用 API 网关来重定向到步骤函数 API,但这并没有多大意义。

于 2016-12-13T18:00:31.983 回答
1

我最近在https://stackoverflow.com/a/59326771/6697093上发布了一个使用 CloudFormation 和 OpenApi 使其工作的示例代码。

于 2019-12-13T16:59:05.910 回答