Hello all,

I have noticed that when I generate a presigned url for a file that will be uploaded to S3 that the Lambda function does not get triggered. It seems to only be happening for presigned url. I was able to successful have it trigger when I use the command line and upload a file through `aws s3 cp`. 

To recreate:
1: have any lambda function be added to an s3 bucket. My lambda configurations look as followed:
```
aws s3api --endpoint-url=http://localstack:4572 create-bucket --bucket mybucket;
aws s3api --endpoint-url=http://localstack:4572 create-bucket --bucket code;
aws s3 cp --endpoint-url=http://localstack:4572 --acl public-read /resources/example.zip s3://code/;
aws lambda create-function --endpoint-url=http://localstack:4574 --function-name MyLambdaFunction--runtime 'nodejs8.10' --handler 'index.handler' --role 'anyRole' --code S3Bucket=code,S3Key=example.zip,S3ObjectVersion=1.0.0;
```
Then add this lambda configuration to the bucket
```
{
    "LambdaFunctionConfigurations": [
        {
            "LambdaFunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:MyLambdaFunction",
            "Events": [
                "s3:ObjectCreated:*"
            ]
        }
    ]
}
```
by running
```
aws s3api --endpoint-url=http://localstack:4572 put-bucket-notification-configuration --bucket 'mybucket' --notification-configuration file:///resources/notification.json;
```
2: Generate a presigned url for the bucket you added the lambda too

```
aws s3 presign --endpoint-url=http://localstack:4572 s3://mybucket/test.txt  --expires-in 300
```
3:
```
 curl --upload-file test.txt -v http://localstack:4572/mybucket/test.txt?AWSAccess
KeyId=dummyaccess&Expires=1571680684&Signature=TbCFh1rzkNYwNEooaQKcJPF4%2Fss%3D
```

Lambda does not seem to get triggered.

Any help or fixes?

Thank you so much for your time and help. Localstack has been a great tool!
def filter(self, record):
            return record.name != 'werkzeug'
    root_handlers = logging.getLogger().handlers
    if len(root_handlers) > 0:
        root_handlers[0].addFilter(WerkzeugLogFilter())
        if is_debug():
            format = '%(asctime)s:API: %(message)s'
            handler = logging.StreamHandler()
            handler.setLevel(logging.INFO)
            handler.setFormatter(logging.Formatter(format))
            logging.getLogger('werkzeug').addHandler(handler)
    
    warnings.filterwarnings('ignore')
    logging.captureWarnings(True)
    logging.getLogger('boto3').setLevel(logging.INFO)
    logging.getLogger('s3transfer').setLevel(logging.INFO)
    logging.getLogger('docker').setLevel(logging.WARNING)
    logging.getLogger('urllib3').setLevel(logging.WARNING)
    logging.getLogger('requests').setLevel(logging.WARNING)
    logging.getLogger('botocore').setLevel(logging.ERROR)
    logging.getLogger('elasticsearch').setLevel(logging.ERROR)
def canonicalize_api_names(apis=None):
    """ Finalize the list of API names by
        (1) resolving and adding dependencies (e.g., "dynamodbstreams" requires "kinesis"),
        (2) resolving and adding composites (e.g., "serverless" describes an ensemble
                including "iam", "lambda", "dynamodb", "apigateway", "s3", "sns", and "logs"), and
        (3) removing duplicates from the list. """
    apis = apis or list(config.SERVICE_PORTS.keys())
    def contains(apis, api):