0

无论如何,我是否可以将自定义变量作为输入传递给 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,以区分从两个步骤函数进行的调用。

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

请帮帮我

4

3 回答 3

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.$":"$"
         }
      }
   }
}

在此处输入图像描述

于 2021-01-18T14:18:52.300 回答
0

您可以使用上下文对象并传递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

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

你可以对他们做出决定

于 2021-01-18T14:17:27.610 回答
0

您可以创建 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 时有很多开发选项。

于 2021-01-18T14:17:38.873 回答