Repository: getmoto/moto

Issue:
The security token included in the request is invalid on cn-northwest-1
How to reproduce the issue?
```
from moto import mock_lambda
import boto3

@mock_lambda
def test_china():
    client = boto3.client("lambda", region_name="cn-northwest-1")
    client.list_functions()
```
Will raise an exception:
```
@mock_lambda
    def test_china():
        client = boto3.client("lambda", region_name="cn-northwest-1")
>       client.list_functions()

test_sts_service.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../venv/lib/python3.7/site-packages/botocore/client.py:357: in _api_call
    return self._make_api_call(operation_name, kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <botocore.client.Lambda object at 0x111731490>
operation_name = 'ListFunctions', api_params = {}

    def _make_api_call(self, operation_name, api_params):
        operation_model = self._service_model.operation_model(operation_name)
        service_name = self._service_model.service_name
        history_recorder.record('API_CALL', {
            'service': service_name,
            'operation': operation_name,
            'params': api_params,
        })
        if operation_model.deprecated:
            logger.debug('Warning: %s.%s() is deprecated',
                         service_name, operation_name)
        request_context = {
            'client_region': self.meta.region_name,
            'client_config': self.meta.config,
            'has_streaming_input': operation_model.has_streaming_input,
            'auth_type': operation_model.auth_type,
        }
        request_dict = self._convert_to_request_dict(
            api_params, operation_model, context=request_context)
    
        service_id = self._service_model.service_id.hyphenize()
        handler, event_response = self.meta.events.emit_until_response(
            'before-call.{service_id}.{operation_name}'.format(
                service_id=service_id,
                operation_name=operation_name),
            model=operation_model, params=request_dict,
            request_signer=self._request_signer, context=request_context)
    
        if event_response is not None:
            http, parsed_response = event_response
        else:
            http, parsed_response = self._make_request(
                operation_model, request_dict, request_context)
    
        self.meta.events.emit(
            'after-call.{service_id}.{operation_name}'.format(
                service_id=service_id,
                operation_name=operation_name),
            http_response=http, parsed=parsed_response,
            model=operation_model, context=request_context
        )
    
        if http.status_code >= 300:
            error_code = parsed_response.get("Error", {}).get("Code")
            error_class = self.exceptions.from_code(error_code)
>           raise error_class(parsed_response, operation_name)
E           botocore.exceptions.ClientError: An error occurred (UnrecognizedClientException) when calling the ListFunctions operation: The security token included in the request is invalid.

../../../venv/lib/python3.7/site-packages/botocore/client.py:661: ClientError
```

On the other hand, when running in a different region, no exception is raised:
```
@mock_lambda
def test_us():
    client = boto3.client("lambda", region_name="us-west-1")
    client.list_functions()
```

This error happens in other services as well (e.g "sts") and not only in the lambda service.

Versions:
python==3.7
moto== 1.3.16
pytest==5.2.2
boto==2.49.0
botocore==1.12.189



Discussion:

Resolving patch:
diff --git a/moto/awslambda/urls.py b/moto/awslambda/urls.py
--- a/moto/awslambda/urls.py
+++ b/moto/awslambda/urls.py
@@ -1,7 +1,7 @@
 from __future__ import unicode_literals
 from .responses import LambdaResponse
 
-url_bases = ["https?://lambda.(.+).amazonaws.com"]
+url_bases = ["https?://lambda.(.+).amazonaws.com(|.cn)"]
 
 response = LambdaResponse()
 
diff --git a/moto/sts/urls.py b/moto/sts/urls.py
--- a/moto/sts/urls.py
+++ b/moto/sts/urls.py
@@ -1,6 +1,6 @@
 from __future__ import unicode_literals
 from .responses import TokenResponse
 
-url_bases = ["https?://sts(.*).amazonaws.com"]
+url_bases = ["https?://sts(.*).amazonaws.com(|.cn)"]
 
 url_paths = {"{0}/$": TokenResponse.dispatch}


Test patch:
diff --git a/tests/test_awslambda/test_lambda.py b/tests/test_awslambda/test_lambda.py
--- a/tests/test_awslambda/test_lambda.py
+++ b/tests/test_awslambda/test_lambda.py
@@ -86,6 +86,14 @@ def lambda_handler(event, context):
     return _process_lambda(pfunc)
 
 
+@pytest.mark.parametrize("region", ["us-west-2", "cn-northwest-1"])
+@mock_lambda
+def test_lambda_regions(region):
+    client = boto3.client("lambda", region_name=region)
+    resp = client.list_functions()
+    resp["ResponseMetadata"]["HTTPStatusCode"].should.equal(200)
+
+
 @mock_lambda
 def test_list_functions():
     conn = boto3.client("lambda", _lambda_region)
diff --git a/tests/test_sts/test_sts.py b/tests/test_sts/test_sts.py
--- a/tests/test_sts/test_sts.py
+++ b/tests/test_sts/test_sts.py
@@ -741,3 +741,11 @@ def test_federation_token_with_too_long_policy():
     ex.value.response["Error"]["Message"].should.contain(
         str(MAX_FEDERATION_TOKEN_POLICY_LENGTH)
     )
+
+
+@pytest.mark.parametrize("region", ["us-west-2", "cn-northwest-1"])
+@mock_sts
+def test_sts_regions(region):
+    client = boto3.client("sts", region_name=region)
+    resp = client.get_caller_identity()
+    resp["ResponseMetadata"]["HTTPStatusCode"].should.equal(200)