def run(func, args=[], kwargs={}, service='lambda', capture_response=False,
        remote_aws_lambda_function_name=None, remote_aws_region=None, **task_kwargs):
    """
    Instead of decorating a function with @task, you can just run it directly.
    If you were going to do func(*args, **kwargs), then you will call this:

    import zappa.asynchronous.run
    zappa.asynchronous.run(func, args, kwargs)

    If you want to use SNS, then do:

    zappa.asynchronous.run(func, args, kwargs, service='sns')

    and other arguments are similar to @task
    """
    lambda_function_name = remote_aws_lambda_function_name or os.environ.get('AWS_LAMBDA_FUNCTION_NAME')
    aws_region = remote_aws_region or os.environ.get('AWS_REGION')

    task_path = get_func_task_path(func)
    return ASYNC_CLASSES[service](lambda_function_name=lambda_function_name,
                                  aws_region=aws_region,
                                  capture_response=capture_response,
                                  **task_kwargs).send(task_path, args, kwargs)