【问题标题】:how to call AWS step function from front-end javascript如何从前端 javascript 调用 AWS step 函数
【发布时间】:2022-01-03 05:06:56
【问题描述】:

我在 serverless.yml 文件中定义了一个这样定义的 AWS 步进函数。

functions:
  create:
    handler: create.main
    events:
      - http:
          path: notes
          method: post
          cors: true
          #authorizer: aws_iam
 findMatchingAlerts:
    handler: findMatchingAlerts.main
    events:
      - http:
          path: findMatchingAlerts
          method: post
          cors: true
          #authorizer: aws_iam
stepFunctions:
  stateMachines:
    hellostepfunc1:
      name: CreateNewListingAndSendNotificationStateMachine
      events:
        - http:
            path: CreateNewListing
            method: post
        - http:
            path: FindMatchingAlerts
            method: post
      definition:
        Comment: "Step function for inserting a new listing, looking up user alert filter, and sending out email notifications"
        StartAt: CreateNewListing
        States:
          CreateNewListing:
            Type: Task
            Resource: "arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:${self:service}-${opt:stage}-create"
            Next: FindMatchingAlerts
          FindMatchingAlerts:
            Type: Task
            Resource: "arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:${self:service}-${opt:stage}-findMatchingAlerts"
            End: true

CreateNewListingFindMatchingAlerts 都是 2 个 lambda 函数。

这是我想要做的:我有一个前端 UI,带有一个按钮,按下时调用 step 函数,并将适当的输入传递给 step 函数进行处理,我目前有这样的事情:

 return API.post("notes", "/CreateNewListing", {
      body: input
    });

但是,我可以从 AWS 控制台执行 step 功能。但是,当尝试将我的前端按钮与步进函数挂钩时,每当按下按钮时,我得到的是Error: network error,所以我猜测对步进函数的调用是不正确的。

有人可以帮助我吗?谢谢。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-step-functions


    【解决方案1】:

    1.您必须为 API Gateway 创建一个 IAM 角色 2.将策略附加到 IAM 角色 3.创建您的 API Gateway API -> 创建发布/获取方法 -> 选择集成类型:AWS 服务 选择 AWS 区域 AWS 服务:步骤函数 HTTP 方法:POST 行动:开始执行 执行角色:提供角色 并设置其他参数。

    4.部署 API Gateway API

    1. 测试 API 网关和 Step Functions 之间的通信 在 /execution - POST - Method Execution 页面上,选择 Test。

    在 /execution - POST - Method Test 页面上,使用现有状态机的 ARN(或创建新状态机)将以下请求参数复制到 Request Body 部分,然后选择 Test。

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

    参考

    https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-api-gateway.html

    【讨论】:

      【解决方案2】:

      您可以配置前端应用程序以将记录写入 DynamoDB。然后您需要在该 DynamoDB 表上添加一个Lambda trigger(它将监视新的记录条目)。触发后,Lambda 函数将从 DynamoDB 记录和execute the step function 准备执行输入。

      【讨论】:

        【解决方案3】:

        据我所知,在将 API Gateway 与 Step Functions 结合使用时,CORS 不起作用。我必须创建一个中间 Lambda 函数来调用 API 网关。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-22
          • 1970-01-01
          • 2017-08-24
          • 1970-01-01
          相关资源
          最近更新 更多