Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function buildInspectionMachine(
scope: cdk.Construct,
dispatchInspection: lambda.Function,
errorHandler: lambda.Function,
delay?: cdk.Duration,
sfnRole?: iam.IRole
): sfn.StateMachine {
const waitTime = delay || cdk.Duration.minutes(5);
const wait = new sfn.Wait(scope, "WaitDispatch", {
time: sfn.WaitTime.duration(waitTime),
});
const invokeDispatcher = new tasks.LambdaInvoke(
scope,
"InvokeDispatchInspection",
{ lambdaFunction: dispatchInspection }
);
const invokeErrorHandler = new tasks.LambdaInvoke(
scope,
"InvokeErrorHandler",
{ lambdaFunction: errorHandler }
);
const definition = wait
.next(invokeDispatcher)
.next(
new sfn.Choice(scope, "Job Complete?").when(
sfn.Condition.stringEquals("$.status", "FAILED"),
invokeErrorHandler
function buildReviewMachine(
scope: cdk.Construct,
compileReport: lambda.Function,
reviewer: lambda.Function,
publishReport: lambda.Function,
errorHandler: lambda.Function,
delay?: cdk.Duration,
sfnRole?: iam.IRole
): sfn.StateMachine {
const waitTime = delay || cdk.Duration.minutes(10);
const invokeErrorHandler = new tasks.LambdaInvoke(
scope,
"InvokeErrorHandler",
{ lambdaFunction: errorHandler }
);
const condFailed = sfn.Condition.stringEquals("$.status", "FAILED");
const condSucceeded = sfn.Condition.stringEquals("$.status", "SUCCEEDED");
const wait = new sfn.Wait(scope, "WaitCompile", {
time: sfn.WaitTime.duration(waitTime),
});
const definition = wait
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
dispatchInspection: lambda.Function,
errorHandler: lambda.Function,
delay?: cdk.Duration,
sfnRole?: iam.IRole
): sfn.StateMachine {
const waitTime = delay || cdk.Duration.minutes(5);
const wait = new sfn.Wait(scope, "WaitDispatch", {
time: sfn.WaitTime.duration(waitTime),
});
const invokeDispatcher = new tasks.LambdaInvoke(
scope,
"InvokeDispatchInspection",
{ lambdaFunction: dispatchInspection }
);
const invokeErrorHandler = new tasks.LambdaInvoke(
scope,
"InvokeErrorHandler",
{ lambdaFunction: errorHandler }
);
const definition = wait
.next(invokeDispatcher)
.next(
new sfn.Choice(scope, "Job Complete?").when(
sfn.Condition.stringEquals("$.status", "FAILED"),
invokeErrorHandler
)
);
return new sfn.StateMachine(scope, "InspectionMachine", {
definition,
{ lambdaFunction: errorHandler }
);
const condFailed = sfn.Condition.stringEquals("$.status", "FAILED");
const condSucceeded = sfn.Condition.stringEquals("$.status", "SUCCEEDED");
const wait = new sfn.Wait(scope, "WaitCompile", {
time: sfn.WaitTime.duration(waitTime),
});
const definition = wait
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
condSucceeded,
new tasks.LambdaInvoke(scope, "invokeCompileReport", {
lambdaFunction: compileReport,
})
)
)
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
sfn.Condition.stringEquals("$.status", "SUCCEEDED"),
new tasks.LambdaInvoke(scope, "invokeReviewer", {
lambdaFunction: reviewer,
})
)
)
.next(
new sfn.Choice(scope, "Job Complete?")
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
condSucceeded,
new tasks.LambdaInvoke(scope, "invokeCompileReport", {
lambdaFunction: compileReport,
})
)
)
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
sfn.Condition.stringEquals("$.status", "SUCCEEDED"),
new tasks.LambdaInvoke(scope, "invokeReviewer", {
lambdaFunction: reviewer,
})
)
)
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
sfn.Condition.stringEquals("$.status", "SUCCEEDED"),
new tasks.LambdaInvoke(scope, "invokePublishReport", {
lambdaFunction: publishReport,
})
)
);
return new sfn.StateMachine(scope, "InspectionMachine", {
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
sfn.Condition.stringEquals("$.status", "SUCCEEDED"),
new tasks.LambdaInvoke(scope, "invokeReviewer", {
lambdaFunction: reviewer,
})
)
)
.next(
new sfn.Choice(scope, "Job Complete?")
.when(condFailed, invokeErrorHandler)
.when(
sfn.Condition.stringEquals("$.status", "SUCCEEDED"),
new tasks.LambdaInvoke(scope, "invokePublishReport", {
lambdaFunction: publishReport,
})
)
);
return new sfn.StateMachine(scope, "InspectionMachine", {
definition,
role: sfnRole,
});
}
private createTask(handler: lambda.Function) {
return new sfn.Task(this, `${handler.node.id}-task`, {
task: new tasks.InvokeFunction(handler),
});
}
}
export const task = (
scope: cdk.Construct,
name: string,
desc: string,
{ retry, ...lambdaParams }: Params,
environment?: { [key: string]: string },
overrides?: Partial,
) => {
const lambda = taskLambda(scope, name, lambdaParams, environment, overrides)
const task = new sfn.Task(scope, [name, desc].join(': '), {
task: new tasks.InvokeFunction(lambda),
})
if (retry == true) {
task.addRetry(retry === true ? {} : retry)
}
return { lambda, task }
}