【问题标题】:Is it Possible to Call One Step Function from another Step function?是否可以从另一个 Step 函数调用一个 Step Function?
【发布时间】:2020-04-02 18:28:54
【问题描述】:

我是这个 Step Functions 和 AWS 的新手。是否可以从 AWS (EMR) 中的另一个 Step Function 调用一个 Step Function?我正在开发一个 Step Function,在停止 EMR 之前,我必须在 EMR 中包含 Step Function。

这里我有两种情况。

1) 我必须从 SFN2 调用 SFN3 并停止 SFN2 中的 EMR。 2) 执行完所有 Step 功能后,我必须停止 EMR。

我已附上附件供您参考。

请帮助我。

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    您可以从任务状态(Lambda 或 Activity)调用 StartExecution,然后等待它完成(或者不完成,如果您不需要它)。

    如果您不需要等待它完成(我可能误解了这个问题,但我相信事实并非如此),您可以直接使用StartExecution 解雇并忘记。

    在相反的情况下,当您想要等待嵌套状态机完成时,您可能对 Job Status Poller 模式 (https://docs.aws.amazon.com/step-functions/latest/dg/job-status-poller-sample.html) 或将等待实现为在 EC2 / ECS / 等上运行的 Activity 感兴趣。(失去无服务器方法)。

    还有另一种方法可以解决在没有活动循环(状态轮询器)或服务器的情况下等待嵌套状态机的问题。这里有描述:https://medium.com/semantive/part-1-asynchronous-actions-within-aws-step-functions-without-servers-f58e030a0e8b

    【讨论】:

      【解决方案2】:

      从主工作流程中触发并忘记内部工作流程

      主工作流程的步骤功能代码

       "<StepName>":{
        "Type": "Task",
        "Next":"<NextStepName>",
        "Resource": "arn:aws:states:::states:startExecution",
        "Parameters":{  
          "Input":{
            "Comment": "Hello world!"
           },
          "StateMachineArn":"<InnerStepFunctionArn>"
         }
       },
      

      主要工作流角色的 IAM 政策

      启动执行策略

      StepFunctions/Write/Start Execution
      Resource:Inner Step Function
      
      
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": "states:StartExecution",
                  "Resource": "<InnerStepFunctionARN>"
              }
          ]
      }
      

      等待内部工作流执行完成

      主工作流程的步骤功能代码

       "<StepName>":{
        "Type": "Task",
        "Next":"<NextStepName>",
        "Resource": "arn:aws:states:::states:startExecution.sync",
        "Parameters":{  
          "Input":{
            "Comment": "Hello world!"
           },
          "StateMachineArn":"<InnerStepFunctionArn>"
         }
       },
      

      主要工作流角色的 IAM 政策

      启动执行策略

      StepFunctions/Write/Start Execution
      Resource:Inner Step Function
      
      
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": "states:StartExecution",
                  "Resource": "<InnerStepFunctionARN>"
              }
          ]
      }
      

      活动政策

      CloudWatchEvent Full Access
          {
              "Version": "2012-10-17",
              "Statement": [
                  {
                      "Sid": "CloudWatchEventsFullAccess",
                      "Effect": "Allow",
                      "Action": "events:*",
                      "Resource": "*"
                  },
                  {
                      "Sid": "IAMPassRoleForCloudWatchEvents",
                      "Effect": "Allow",
                      "Action": "iam:PassRole",
                      "Resource": "arn:aws:iam::*:role/AWS_Events_Invoke_Targets"
                  }
              ]
          }
      

      【讨论】:

        【解决方案3】:

        最近,AWS Step function 添加了一项功能,可以从另一个 step function 调用一个 step function。

        它就像调用任何其他服务(AWS Glue、AWS Lambda、AWS Sagemaker、AWS Batch)一样工作。 它确实支持同步和aysnc。不过需要检查回调支持。

        您可能还想检查从另一个状态函数调用一个状态函数所需的权限。

        官方文档链接: https://docs.aws.amazon.com/step-functions/latest/dg/sample-start-workflow.html https://docs.aws.amazon.com/step-functions/latest/dg/connect-stepfunctions.html

        【讨论】:

        • 请不要只发布链接作为答案。编辑您的帖子,使其包含一些解释和/或示例代码。
        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 2017-08-24
        • 2014-03-27
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        • 2022-11-22
        • 1970-01-01
        相关资源
        最近更新 更多