【问题标题】:How can I set up an APIGateway method to return a value from a step function?如何设置 APIGateway 方法以从步进函数返回值?
【发布时间】:2018-09-14 05:59:20
【问题描述】:

我有一个由几个 lambda 组成的状态机,我使用 Cloudformation 模板设置了这些 lambda,该模板进行一些处理并最终将文件保存到 S3;除非要求,否则我不会在此处添加它,因为它可以正常工作。 step 函数的最后一部分是一个 lambda,它输出以下内容:

{
   "output": {
      "statusCode": "200",
      "body": "{\"dataset-name\": \"inserted\"}",
      "headers": {
           "Content-Type": "application/json"
       }
    }
}

这里是 cloudformation 模板,我必须设置一个调用这个 step 函数的 API 方法:

PostDatasetMethod:
Type: AWS::ApiGateway::Method
DependsOn: Resource
Properties:
  ApiKeyRequired: false
  AuthorizationType: NONE
  HttpMethod: POST
  Integration:
    Credentials: !Ref 'IamRoleArn'
    IntegrationHttpMethod: POST
    PassthroughBehavior: NEVER
    Type: AWS
    Uri: 'arn:aws:apigateway:us-east-1:states:action/StartExecution'
    IntegrationResponses:
      - StatusCode: 200
    RequestTemplates:
      application/json: !Sub |
        {
          "input": "$util.escapeJavaScript($input.json('$'))",
          "stateMachineArn": "${StateMachine}"
        }
  ResourceId: !Ref 'Resource'
  RestApiId: !Ref 'Api'

但是,我得到了错误

Execution failed due to configuration error: No match for output mapping and no default output mapping configured

当我调用 API 时,即使 step 函数成功完成,我想是因为我不确定如何在 CloudFormation 模板中设置方法和集成响应。我只需要按原样传递上面的 json,类似于默认情况下为 lambdas 所做的。为了让这个 API 按预期工作,我还需要 CloudFormation 模板中的哪些内容?

【问题讨论】:

    标签: amazon-web-services aws-api-gateway amazon-cloudformation aws-step-functions


    【解决方案1】:

    Step Functions 是异步调用的,并且没有自然方法来进行同步调用。这意味着您不能让 API 网关方法返回 Step Functions 的输出。

    有人提出了各种方法来实现这一点,也许讨论最多的一种是: 创建一个 lambda 函数,其唯一目的是启动 Step Functions 的执行,然后开始轮询 Step Functions 的结果。

    Here 获取 Step Functions 结果的一些信息。请注意,由于 API 网关的执行限制,这仅在 Step Functions 的持续时间少于 30 秒时才有效。

    【讨论】:

    • “因为 Lambda 的执行限制” ...您的意思是 API 网关吗? Lambda 的限制是 5 分钟。 API 网关在约 29 秒时达到最大值。
    • @Michael-sqlbot 对不起,你是对的。立即编辑。谢谢
    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 2012-10-04
    • 2021-03-04
    • 2023-01-11
    • 2020-09-28
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多