## Problem

The ASF op router cannot route certain operations that have dashes in their URI variable name. This is because Werkzeug allows only `[a-zA-Z_][a-zA-Z0-9_]*` as variable names, see [werkzeug/routing.py](https://github.com/pallets/werkzeug/blob/6962882b39aa6a2abbeb8e14da212e3d35079c86/src/werkzeug/routing.py#L158). However, some services like apigatewayv2 have dashes in their URI variable names, see [apigatewayv2 spec](https://github.com/boto/botocore/blob/edf0c1a4679eca7a18c89802af9c159a9a423550/botocore/data/apigatewayv2/2018-11-29/service-2.json#L1279-L1284): `"/v2/tags/{resource-arn}"`.

Werkzeug will raise the following exception:

```
Traceback (most recent call last):
  ...
  File "/home/thomas/workspace/localstack/localstack/localstack/aws/protocol/op_router.py", line 209, in __init__
    self._map = _create_service_map(service)
  File "/home/thomas/workspace/localstack/localstack/localstack/aws/protocol/op_router.py", line 197, in _create_service_map
    return Map(rules=rules)
  File "/home/thomas/workspace/localstack/localstack/.venv/lib/python3.8/site-packages/werkzeug/routing.py", line 1500, in __init__
    self.add(rulefactory)
  File "/home/thomas/workspace/localstack/localstack/.venv/lib/python3.8/site-packages/werkzeug/routing.py", line 1541, in add
    rule.bind(self)
  File "/home/thomas/workspace/localstack/localstack/.venv/lib/python3.8/site-packages/werkzeug/routing.py", line 800, in bind
    self.compile()
  File "/home/thomas/workspace/localstack/localstack/.venv/lib/python3.8/site-packages/werkzeug/routing.py", line 875, in compile
    _build_regex(self.rule if self.is_leaf else self.rule.rstrip("/"))
  File "/home/thomas/workspace/localstack/localstack/.venv/lib/python3.8/site-packages/werkzeug/routing.py", line 842, in _build_regex
    for converter, arguments, variable in parse_rule(rule):
  File "/home/thomas/workspace/localstack/localstack/.venv/lib/python3.8/site-packages/werkzeug/routing.py", line 243, in parse_rule
    raise ValueError(f"malformed url rule: {rule!r}")
ValueError: malformed url rule: '/v2/tags/<resource-arn>'
```



## Test

This parser test validates the behavior:
```python
def test_rest_url_parameter_with_dashes():
    """
    Test if requestUri parameters with dashes in them (e.g., "/v2/tags/{resource-arn}") are parsed correctly.
    """
    _botocore_parser_integration_test(
        service="apigatewayv2",
        action="GetTags",
        ResourceArn="arn:aws:apigatewayv2:us-east-1:000000000000:foobar",
    )
```

## Required change

This means that here we need to replace dashes with underscores, but only in the variable names, not the entire URL, which looks pretty painful to do.  https://github.com/localstack/localstack/blob/836616ef86ef844cb9aa13365d8bcd56e30ef8b6/localstack/aws/protocol/op_router.py#L161-L162

_botocore_parser_integration_test(
        service="opensearch",
        action="DeleteDomain",
        DomainName="test-domain",
    )
def test_restjson_query_location_opensearch_with_botocore():