constructor()

in source/lib/text-analysis-workflow/callback-task-construct.ts [97:167]


    constructor(scope: cdk.Construct, id: string, props: StepFuncCallbackTaskProps) {
        super(scope, id);

        const _sqsLambda = new SqsToLambda(this, 'Task', {
            lambdaFunctionProps: props.lambdaFunctionProps,
            existingLambdaObj: props.existingLambdaObj,
            queueProps: props.queueProps,
            existingQueueObj: props.existingQueueObj,
            deadLetterQueueProps: props.deadLetterQueueProps,
            deployDeadLetterQueue: props.deployDeadLetterQueue,
            maxReceiveCount: props.maxReceiveCount,
            sqsEventSourceProps: props.sqsEventSourceProps
        });

        const _defaultSqsSendMessageProps: task.SqsSendMessageProps = {
            queue: _sqsLambda.sqsQueue,
            messageBody: sfn.TaskInput.fromObject({
                "input": sfn.JsonPath.stringAt('$'),
                "taskToken": sfn.JsonPath.taskToken
            }),
            integrationPattern: sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
            outputPath: "$",
            heartbeat: cdk.Duration.minutes(720),
            timeout: cdk.Duration.minutes(1440)
        };

        const _sqsSendMessageProps = props.sqsSendMessageProps !== undefined ?
            defaults.overrideProps(_defaultSqsSendMessageProps, props.sqsSendMessageProps as task.SqsSendMessageProps):
            _defaultSqsSendMessageProps;

        const _queueTask: task.SqsSendMessage = new task.SqsSendMessage(this, `${id}SendMessage`, _sqsSendMessageProps);


        const _failedState = new sfn.Fail(this, `${id}TaskFailed`, {
            cause: sfn.JsonPath.stringAt('$.cause')
        });
        _queueTask.addCatch(_failedState);

        _queueTask.addRetry({
            backoffRate: 2,
            maxAttempts: 6,
            interval: cdk.Duration.seconds(3)
        });

        this.startState = _queueTask;
        this.endStates = [ _queueTask ]
        this.sqsQueue = _sqsLambda.sqsQueue;
        this.lambda = _sqsLambda.lambdaFunction;
        this.deadLetterQueue = _sqsLambda.deadLetterQueue;

        if (props.stateMachine !== undefined) {
            props.stateMachine.grantTaskResponse(this.lambda.role!);
        } else {
            const _lambdaStateMatchineTaskPolicy = new iam.Policy(this, 'LambdaStateMachineTask', {
                statements: [ new iam.PolicyStatement({
                        effect: iam.Effect.ALLOW,
                        actions: [ 'states:SendTaskSuccess', 'states:sendTaskFailure', 'states:SendTaskHeartbeat' ],
                        resources: [ '*' ]
                    })
                ]
            });

            _lambdaStateMatchineTaskPolicy.attachToRole(_sqsLambda.lambdaFunction.role!);
            (_lambdaStateMatchineTaskPolicy.node.defaultChild as iam.CfnPolicy).addMetadata('cfn_nag', {
                rules_to_suppress: [{
                  id: 'W12',
                  reason: 'State machine resource not available, hence defaulting to "*"'
                }]
            });
        }
    }