<!-- Love localstack? Please consider supporting our collective:
👉  https://opencollective.com/localstack/donate -->

# Type of request: This is a ...

[*] bug report
[ ] feature request

# Detailed description

Sending CloudWatch metrics data using `content-encoding: gzip` encoding results in 404. The same metrics sent uncompressed using `content-encoding: identity` returns 200 OK.

The metrics compressed with `content-encoding: gzip` work against AWS CloudWatch.

According to [CloudWatch documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) `PutMetricData` accepts `gzip` compressed payloads but the docs are not clear on content-encoding at that point.

> Each PutMetricData request is limited to 40 KB in size for HTTP POST requests. You can send a payload compressed by gzip. Each request is also limited to no more than 20 different metrics.

## Expected behavior

I expected `localstack` `cloudwatch` to be able to receive `gzip` encoded payloads.

## Actual behavior

`encoding: gzip` results in HTTP error 404.

# Steps to reproduce

The Elixir library `telemetrics_library_cloudwatch` uses `gzip` compression by default. I configured a bunch of metrics and configured the library to periodically send the metrics. This resulted in 404 failures.

The requests against the `localstack` container started working when I commented out the `gzip` content type setting in line 12 of `TelemetryMetricsCloudWatch.Cloudwatch` module [here](https://github.com/bmuller/telemetry_metrics_cloudwatch/blob/2293af20e80c058338c8d4248191518642484986/lib/telemetry_metrics_cloudwatch/cloudwatch.ex#L12)

Apologies for not having simpler steps to reproduce.

## Command used to start LocalStack

Docker Compose with following settings:

```
  localstack:
    image: localstack/localstack:0.12.3
    restart: always
    environment:
      - SERVICES=s3,cloudwatch
      - DEFAULT_REGION=eu-west-2
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
      - DOCKER_HOST=unix:///var/run/docker.sock
      - HOST_TMP_FOLDER=/tmp/localstack
    ports:
      - 4566-4599:4566-4599
    volumes:
      - /tmp/localstack:/tmp/localstack
      - /var/run/docker.sock:/var/run/docker.sock
```

## Client code (AWS SDK code snippet, or sequence of "awslocal" commands)



if not port:
        port = config.EDGE_PORT
    if config.EDGE_PORT_HTTP:
        do_start_edge(config.EDGE_PORT_HTTP, use_ssl=False, asynchronous=True)
    if port > 1024 or is_root():
        return do_start_edge(port, use_ssl, asynchronous=asynchronous)
    
    class Terminator(object):
        def stop(self, quiet=True):
            try:
                url = 'http%s://%s:%s' % ('s' if use_ssl else '', LOCALHOST, port)
                requests.verify_ssl = False
                requests.post(url, headers={HEADER_KILL_SIGNAL: 'kill'})
            except Exception:
                pass
    
    ensure_can_use_sudo()
    
    TMP_THREADS.append(Terminator())
    
    sudo_cmd = 'sudo '
    python_cmd = sys.executable
    cmd = '%sPYTHONPATH=.:%s %s %s %s' % (sudo_cmd, LOCALSTACK_ROOT_FOLDER, python_cmd, __file__, port)
    process = run(cmd, asynchronous=asynchronous)
    return process
if __name__ == '__main__':
    logging.basicConfig()
    start_edge(int(sys.argv[1]))