【问题标题】:Pass custom variables as an input to AWS step function将自定义变量作为输入传递给 AWS step 函数
【发布时间】:2023-03-24 07:03:01
【问题描述】:

无论如何,我是否可以将自定义变量作为输入传递给 AWS 步进函数?


    processData:
      name: ingest-data
        StartAt: Execute
        States:
          Execute:
            Type: Task
            Resource: "arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:#{AWS::StackName}-ingestIntnlData"
            Next: Check
          Check:
            Type: Choice
            Choices:
              - Variable: "$.results['finished']"
                BooleanEquals: false 
                Next: Wait
              - Variable: "$.results['finished']"
                BooleanEquals: true
                Next: Notify
          Wait:
            Type: Wait
            SecondsPath: "$.waitInSeconds"
            Next: Execute
          Notify:
            Type: Task
            Resource: "arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:#{AWS::StackName}-sendEMail"
            End: true

我有两个不同的阶梯函数,它们调用相同的 lambda。我希望将自定义变量传递给 lambda,以区分从两个 step 函数进行的调用。

标志变量之类的东西,或者即使有办法找出调用 lambda 的函数的名称,也应该足够了。

请帮帮我

【问题讨论】:

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


    【解决方案1】:

    我们可以在 Pass 状态下构建一个对象并作为输入传递给 lambda "Payload.$":"$" 只是通过所有输入

    {
       "StartAt":"Dummy Step 1 Output",
       "States":{
          "Dummy Step 1 Output":{
             "Type":"Pass",
             "Result":{
                "name":"xyz",
                "testNumber":1
             },
             "ResultPath":"$.inputForMap",
             "Next":"invoke-lambda"
          },
          "invoke-lambda":{
             "End":true,
             "Retry":[
                {
                   "ErrorEquals":[
                      "Lambda.ServiceException",
                      "Lambda.AWSLambdaException",
                      "Lambda.SdkClientException"
                   ],
                   "IntervalSeconds":2,
                   "MaxAttempts":6,
                   "BackoffRate":2
                }
             ],
             "Type":"Task",
             "Resource":"arn:aws:states:::lambda:invoke",
             "Parameters":{
                "FunctionName":"arn:aws:lambda:us-east-1:111122223333:function:my-lambda",
                "Payload.$":"$"
             }
          }
       }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用context object 并通过ExecutionId 喜欢

          {
          "Comment": "A Catch example of the Amazon States Language using an AWS Lambda Function",
          "StartAt": "nextstep",
          "States": {
              "nextstep": {
              "Type": "Task",
              "Resource": "arn:aws:lambda:eu-central-1:1234567890:function:catcherror",
              "Parameters": {
                              "executionId.$": "$$.Execution.Id"
              },
              "End": true
              }
          }
          }
      

      这个给你

      arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName

      如您所见,它包含您的状态机名称。

      您可以对它们做出决定

      【讨论】:

        【解决方案3】:

        您可以创建 Lambda 函数以用作使用 AWS Step Functions 创建的工作流中的步骤。对于您的第一步(您用作第一步的 Lambda 函数),您可以将值传递给它以满足您的需求:

        https://www.c-sharpcorner.com/article/passing-data-to-aws-lambda-function-and-invoking-it-using-aws-cli/

        然后您可以使用此处讨论的 Lambda 函数在步骤之间传递数据:

        https://medium.com/@tturnbull/passing-data-between-lambdas-with-aws-step-functions-6f8d45f717c3

        您可以使用其他受支持的编程语言(例如 Java)创建 Lambda 函数,如下所述:

        https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/creating_workflows_stepfunctions

        如您所见,使用 Lambda 和 AWS Step Functions 时有很多开发选项。

        【讨论】:

          猜你喜欢
          • 2022-08-26
          • 2014-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-10
          • 1970-01-01
          • 2020-02-09
          • 2019-11-07
          相关资源
          最近更新 更多