具有动态步骤的AWS步骤功能

时间:2019-02-01 04:13:48

标签: aws-step-functions

我正在研究AWS步骤功能,但是我找不到用例所需的问题的答案。假设我们总体上可以完成10个任务。有时,我们必须按顺序执行任务1、3以及某些时间4、8,而其他时间则执行1、9、5。

要执行的任务及其执行顺序取决于将json数据输入系统。

我想知道是否可以根据出现的需求动态创建步进函数。

2 个答案:

答案 0 :(得分:3)

如果它们都是动态的,则您必须具有一定的创造力才能在“步骤功能”中为流程建模。

一种方法可能是构建一个状态机,其中包含您的所有任务以及一个编排decider函数。 SM将以decider开始,然后根据其输出执行正确的作业。每个作业将依次再次调用decider。如果确定该过程已完成,则SM将成功结束。看起来可能是这样:

enter image description here

{
    "StartAt": "Decide next",
    "States": {
        "Decide next": {
            "Type": "Task",
            "Resource":"arn:aws:lambda:::function:decider",
            "ResultPath": "$.nextAction",
            "Next": "Choose action"
        },
        "Choose action": {
            "Type": "Choice",
            "Choices": [
                {
                    "Variable": "$.nextAction",
                    "StringEquals": "DONE",
                    "Next": "Process finished"
                },
                {
                    "Variable": "$.nextAction",
                    "StringEquals": "1",
                    "Next": "Job 1"
                },
                {
                    "Variable": "$.nextAction",
                    "StringEquals": "2",
                    "Next": "Job 2"
                },
                {
                    "Variable": "$.nextAction",
                    "StringEquals": "3",
                    "Next": "Job 3"
                }
            ]
        },
        "Job 1": {
            "Type": "Task",
            "Resource":"arn:aws:lambda:::function:job1",
            "ResultPath": "$.jobResult",
            "Next": "Decide next"
        },
        "Job 2": {
            "Type": "Task",
            "Resource":"arn:aws:lambda:::function:job2",
            "ResultPath": "$.jobResult",
            "Next": "Decide next"
        },
        "Job 3": {
            "Type": "Task",
            "Resource":"arn:aws:lambda:::function:job3",
            "ResultPath": "$.jobResult",
            "Next": "Decide next"
        },
        "Process finished": {
            "Type": "Succeed"
        }
    }
}

您将必须通过执行日志来查看SM的进度,您将无法在视觉上很好地看到它(所有运行的作业都是绿色的,这并不能告诉您有关它们的信息。继承)。

答案 1 :(得分:1)

请注意,您始终可以动态创建状态机。 (from here

package com.example;

import static com.amazonaws.services.stepfunctions.builder.StepFunctionBuilder.*;
import com.amazonaws.services.stepfunctions.builder.ErrorCodes;

public class StepFunctionsDemo {

    public static void main(String[] args) {
        final StateMachine stateMachine = stateMachine()
                .comment("A Hello World example of the Amazon States Language using an AWS Lambda Function")
                .startAt("Hello World")
                .state("Hello World", taskState()
                        .resource("arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME")
                        .transition(end()))
                .build();
        System.out.println(stateMachine.toPrettyJson());
    }
}