<!-- 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)



return config.service_port(service)
def do_start_edge(port, use_ssl, asynchronous=False):
    try:
        
        from localstack_ext.services import dns_server
        dns_server.start_servers()
    except Exception:
        pass
    
    print('Starting edge router (http%s port %s)...' % ('s' if use_ssl else '', port))
    
    proxy = start_proxy_server(port, use_ssl=True, update_listener=ProxyListenerEdge())
    if not asynchronous:
        proxy.join()
    return proxy
def can_use_sudo():
    try:
        run('echo | sudo -S echo', print_error=False)
        return True
    except Exception:
        return False
def ensure_can_use_sudo():
    if not is_root() and not can_use_sudo():
        print('Please enter your sudo password (required to configure local network):')
        run('sudo echo', stdin=True)
def start_edge(port=None, use_ssl=True, asynchronous=False):