我正在研究AWS步骤功能,但是我找不到用例所需的问题的答案。假设我们总体上可以完成10个任务。有时,我们必须按顺序执行任务1、3以及某些时间4、8,而其他时间则执行1、9、5。
要执行的任务及其执行顺序取决于将json数据输入系统。
我想知道是否可以根据出现的需求动态创建步进函数。
答案 0 :(得分:3)
如果它们都是动态的,则您必须具有一定的创造力才能在“步骤功能”中为流程建模。
一种方法可能是构建一个状态机,其中包含您的所有任务以及一个编排decider
函数。 SM将以decider
开始,然后根据其输出执行正确的作业。每个作业将依次再次调用decider
。如果确定该过程已完成,则SM将成功结束。看起来可能是这样:
{
"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());
}
}