在步骤函数内循环

时间:2018-05-26 22:19:53

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

我试图在循环中调用我的步骤函数中的几个步骤但是我无法理解我是如何做到这一点的。这就是我现在所拥有的:我需要添加另一个lambda函数(GetReviews),然后在循环中调用CreateReview,SendNotification。我该怎么做呢? 我指的是" Iterating a Loop Using Lambda"文件,显示它是可能的。

步骤功能定义:

{
  "Comment": "Scheduling Engine",
  "StartAt": "CreateReview",
  "States": {
    "CreateReview": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:529627678433:function:CreateReview",
      "Next": "CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateReviewResult",
      "OutputPath": "$"      
    },
    "CreateNotification": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:529627678433:function:CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateNotificationResult",
      "OutputPath": "$",
      "End": true
    }
  }
}

enter image description here

1 个答案:

答案 0 :(得分:0)

对不起,您的回复很晚。您可能已经解决了两者之间的问题,但是您在这里

因此,当在“步进函数”中循环时,我非常简单地添加了一个选择状态(请参见Choice State Rules)。

您所在的州之一需要输出是否完成循环,是否迭代了项目数以及项目总数。

第一种情况是

{
  "Comment": "Scheduling Engine",
  "StartAt": "CreateReview",
  "States": {
    "GetReviews": {
       whatever
       "Next": "LoopChoiceState"
    },
    "LoopChoiceState": {
      "Type" : "Choice",
      "Choices": [
       {
          "Variable": "$.loopCompleted",
          "BooleanEquals": false,
          "Next": "GetReviews"
        }
      ],
      "Default": "YourEndState"
    },
    "CreateReview": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-westz2:529627678433:function:CreateReview",
      "Next": "CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateReviewResult",
      "OutputPath": "$"      
    },
    "CreateNotification": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:529627678433:function:CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateNotificationResult",
      "OutputPath": "$",
      "End": true
    }
  }
}

第二种情况:

{
  "Comment": "Scheduling Engine",
  "StartAt": "CreateReview",
  "States": {
    "GetReviews": {
       whatever
       "Next": "LoopChoiceState"
    },
    "LoopChoiceState": {
       "Type" : "Choice",
       "Choices": [
         {
           "Variable": "$.iteratedItemsCount",
           "NumericEquals": "$.totalItemsCount",
           "Next": "CreateNotification"
         }
     ],
     "Default": "CreateReview"
    },
    "CreateReview": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:529627678433:function:CreateReview",
      "Next": "CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateReviewResult",
      "OutputPath": "$"      
    },
    "CreateNotification": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:529627678433:function:CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateNotificationResult",
      "OutputPath": "$",
      "End": true
    }
  }
}

您还可以使用索引(当前索引和最后一个索引)来代替迭代的项目数;它可以帮助您跟踪创建评论的位置。