如何使用 API 网关调用 AWS step 函数?
How to Invoke AWS step function using API gateway?
根据Amazon的文档,step函数可以使用HTTP调用API。
Step Functions can be accessed and used with the Step Functions
console, the AWS SDKs, or an HTTP API.
我试图搜索详细信息,但似乎找不到任何好的信息。有谁知道如何使用 API 网关调用 AWS step 函数,类似于它调用 Lambda 函数的方式?
它使用的是 HTTP API,而不是 API 网关。
步进函数端点遵循以下格式:
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,但这样做没有多大意义。
这不是 "official" AWS 的方式——请参阅 Erndob 的回答。
AWS 方式(使用 AWS 凭证签署每个请求)的问题在于,大多数企业已经拥有成熟的方法来通过其 API 网关和(作为企业架构师发言)管理身份验证和授权不想处理在 AWS-credential-level.
复制它的麻烦
我确信 AWS 最终会将 Step Functions 与 API 网关集成,但截至撰写本文时(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 网关正常调用,传递具有两个属性的事件:
- action(Step Functions 方法名称,如 "startExecution")
- params(该方法所需的参数。参考此处:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/StepFunctions.html)
并且一定要锁定您的 API! :-)
如果您需要从 API 网关调用 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
可信身份提供商和附加策略的角色 ARN AWSStepFunctionsFullAccess
我最近在 .
上发布了一个使用 CloudFormation 和 OpenApi 运行的示例代码
根据Amazon的文档,step函数可以使用HTTP调用API。
Step Functions can be accessed and used with the Step Functions console, the AWS SDKs, or an HTTP API.
我试图搜索详细信息,但似乎找不到任何好的信息。有谁知道如何使用 API 网关调用 AWS step 函数,类似于它调用 Lambda 函数的方式?
它使用的是 HTTP API,而不是 API 网关。
步进函数端点遵循以下格式:
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,但这样做没有多大意义。
这不是 "official" AWS 的方式——请参阅 Erndob 的回答。
AWS 方式(使用 AWS 凭证签署每个请求)的问题在于,大多数企业已经拥有成熟的方法来通过其 API 网关和(作为企业架构师发言)管理身份验证和授权不想处理在 AWS-credential-level.
复制它的麻烦我确信 AWS 最终会将 Step Functions 与 API 网关集成,但截至撰写本文时(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 网关正常调用,传递具有两个属性的事件:
- action(Step Functions 方法名称,如 "startExecution")
- params(该方法所需的参数。参考此处:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/StepFunctions.html)
并且一定要锁定您的 API! :-)
如果您需要从 API 网关调用 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
我最近在