Beispiel #1
0
def test_start_execution_task():
    default_task_json = {
        'End': True,
        'Parameters': {
            'StateMachineArn': {
                'Ref': 'teststatemachine7F4C511D'
            },
            'Input.$': '$$.Execution.Input'
        },
        'Type': 'Task',
        'Resource': {
            'Fn::Join': [
                '',
                [
                    'arn:', {
                        'Ref': 'AWS::Partition'
                    }, ':states:::states:startExecution.sync'
                ]
            ]
        }
    }

    stack = core.Stack(core.App(), 'test-stack')

    state_machine = sfn.StateMachine(stack,
                                     'test-state-machine',
                                     definition=sfn.Chain.start(
                                         sfn.Succeed(stack, 'Succeeded')))

    task = sfn.Task(stack,
                    'test-task',
                    task=emr_tasks.StartExecutionTask(state_machine, ))

    print_and_assert(default_task_json, task)
    def __init__(self,
                 scope: core.Construct,
                 id: str,
                 name: str,
                 state_machine: sfn.StateMachine,
                 input: Optional[Mapping[str, any]] = None,
                 fail_chain: Optional[sfn.IChainable] = None):
        super().__init__(scope, id)

        state_machine_task = emr_tasks.StartExecutionTask(
            self,
            name,
            state_machine=state_machine,
            input=input,
            integration_pattern=sfn.IntegrationPattern.RUN_JOB,
        )

        parse_json_string = emr_lambdas.ParseJsonStringBuilder.get_or_build(
            self)

        parse_json_string_task = sfn_tasks.LambdaInvoke(
            self,
            f'{name} - Parse JSON Output',
            result_path='$',
            lambda_function=parse_json_string,
            payload_response_only=True,
            payload=sfn.TaskInput.from_object(
                {'JsonString': sfn.TaskInput.from_data_at('$.Output').value}),
        )

        if fail_chain:
            state_machine_task.add_catch(fail_chain,
                                         errors=['States.ALL'],
                                         result_path='$.Error')
            parse_json_string_task.add_catch(fail_chain,
                                             errors=['States.ALL'],
                                             result_path='$.Error')

        state_machine_task.next(parse_json_string_task)

        self._start = state_machine_task
        self._end = parse_json_string_task