是否可以从另一个 Step 函数调用一个 Step 函数?

lak*_*sha 8 amazon-web-services aws-lambda aws-step-functions

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

这里我有两种情况。

1) 我必须从 SFN2 呼叫 SFN3 并停止 SFN2 中的 EMR。2) 执行所有步骤功能后我必须停止 EMR。

我已附上附件供您参考。

在此输入图像描述

请帮助我。

非常感谢。

Mah*_*aly 5

从主工作流程中启动并忘记内部工作流程

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

 "<StepName>":{
  "Type": "Task",
  "Next":"<NextStepName>",
  "Resource": "arn:aws:states:::states:startExecution",
  "Parameters":{  
    "Input":{
      "Comment": "Hello world!"
     },
    "StateMachineArn":"<InnerStepFunctionArn>"
   }
 },
Run Code Online (Sandbox Code Playgroud)

主要工作流程角色的 IAM 策略

启动执行策略

StepFunctions/Write/Start Execution
Resource:Inner Step Function


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "states:StartExecution",
            "Resource": "<InnerStepFunctionARN>"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

等待内部工作流程执行完成

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

 "<StepName>":{
  "Type": "Task",
  "Next":"<NextStepName>",
  "Resource": "arn:aws:states:::states:startExecution.sync",
  "Parameters":{  
    "Input":{
      "Comment": "Hello world!"
     },
    "StateMachineArn":"<InnerStepFunctionArn>"
   }
 },
Run Code Online (Sandbox Code Playgroud)

主要工作流程角色的 IAM 策略

启动执行策略

StepFunctions/Write/Start Execution
Resource:Inner Step Function


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "states:StartExecution",
            "Resource": "<InnerStepFunctionARN>"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

活动政策

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"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)


Mar*_*ski 3

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

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

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

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