Repository: getmoto/moto
Pull request #7220 (2024-01-15 23:37:28)

Techdebt: Remove old/deprecated code
Remove warning when describing an unknown EC2 image. The warning has been there for ages, and I've never heard of someone needing this validation, so I'm just removing it for now. If necessary, we can make the exception opt-in (allow it by default, but throw the correct exception of the user explicitly configures it) (The warning was introduced in https://github.com/getmoto/moto/pull/1331, for context.)

Remove `moto_server service` argument - we can just run `moto_server` for all services, no need to run a separate server per service anymore

Remove warnings from KMS/Events - info about what params are implemented should just be part of the documentation

Rename EC2 `add_instances` to `run_instances` to make it more obvious which action we're talking about

Removes imports from `moto.core`, as they shouldn't necessarily be exposed to end-users


Patch:
diff --git a/moto/__init__.py b/moto/__init__.py
index f5091de00..82ab04989 100644
--- a/moto/__init__.py
+++ b/moto/__init__.py
@@ -2,18 +2,3 @@ from moto.core.decorator import mock_aws  # noqa  # pylint: disable=unused-impor
 
 __title__ = "moto"
 __version__ = "4.2.14.dev"
-
-
-try:
-    # Need to monkey-patch botocore requests back to underlying urllib3 classes
-    from botocore.awsrequest import (  # type: ignore[attr-defined]
-        HTTPConnection,
-        HTTPConnectionPool,
-        HTTPSConnectionPool,
-        VerifiedHTTPSConnection,
-    )
-except ImportError:
-    pass
-else:
-    HTTPSConnectionPool.ConnectionCls = VerifiedHTTPSConnection
-    HTTPConnectionPool.ConnectionCls = HTTPConnection
diff --git a/moto/acm/models.py b/moto/acm/models.py
index 8d7bcf4c8..21b36504a 100644
--- a/moto/acm/models.py
+++ b/moto/acm/models.py
@@ -10,7 +10,8 @@ from cryptography.hazmat.primitives import hashes, serialization
 from cryptography.x509 import OID_COMMON_NAME, DNSName, NameOID
 
 from moto import settings
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 
 from .exceptions import (
diff --git a/moto/acmpca/models.py b/moto/acmpca/models.py
index c91f35a3d..7d7f0f954 100644
--- a/moto/acmpca/models.py
+++ b/moto/acmpca/models.py
@@ -9,7 +9,8 @@ from cryptography.hazmat.backends import default_backend
 from cryptography.hazmat.primitives import hashes, serialization
 from cryptography.x509 import Certificate, NameOID, load_pem_x509_certificate
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time, utcnow
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/amp/models.py b/moto/amp/models.py
index afb09112c..3aed63a82 100644
--- a/moto/amp/models.py
+++ b/moto/amp/models.py
@@ -2,7 +2,8 @@
 
 from typing import Any, Callable, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random
 from moto.utilities.paginator import paginate
diff --git a/moto/apigateway/models.py b/moto/apigateway/models.py
index 331bf0454..d207bbd83 100644
--- a/moto/apigateway/models.py
+++ b/moto/apigateway/models.py
@@ -19,7 +19,8 @@ except ImportError:
 from openapi_spec_validator.validation.exceptions import OpenAPIValidationError
 
 from moto.apigateway.exceptions import MethodNotFoundException
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import path_url
 from moto.moto_api._internal import mock_random as random
 
diff --git a/moto/apigatewaymanagementapi/models.py b/moto/apigatewaymanagementapi/models.py
index 9947ded1d..374b99b8f 100644
--- a/moto/apigatewaymanagementapi/models.py
+++ b/moto/apigatewaymanagementapi/models.py
@@ -2,7 +2,7 @@
 from collections import defaultdict
 from typing import Any, Dict
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.utils import unix_time
 
 
diff --git a/moto/apigatewayv2/models.py b/moto/apigatewayv2/models.py
index 88e811205..0b396a214 100644
--- a/moto/apigatewayv2/models.py
+++ b/moto/apigatewayv2/models.py
@@ -5,7 +5,8 @@ from typing import Any, Dict, List, Optional, Union
 
 import yaml
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/appconfig/models.py b/moto/appconfig/models.py
index b4e9ac0b0..50019eb15 100644
--- a/moto/appconfig/models.py
+++ b/moto/appconfig/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
 
diff --git a/moto/applicationautoscaling/models.py b/moto/applicationautoscaling/models.py
index e8feb39bd..50ce4c58f 100644
--- a/moto/applicationautoscaling/models.py
+++ b/moto/applicationautoscaling/models.py
@@ -3,7 +3,8 @@ from collections import OrderedDict
 from enum import Enum, unique
 from typing import Dict, List, Optional, Tuple, Union
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.ecs import ecs_backends
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/appsync/models.py b/moto/appsync/models.py
index 3177115d5..e2a568b64 100644
--- a/moto/appsync/models.py
+++ b/moto/appsync/models.py
@@ -3,7 +3,8 @@ import json
 from datetime import datetime, timedelta, timezone
 from typing import Any, Dict, Iterable, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/athena/models.py b/moto/athena/models.py
index a822c53d0..3c64299ec 100644
--- a/moto/athena/models.py
+++ b/moto/athena/models.py
@@ -2,7 +2,8 @@ import time
 from datetime import datetime
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 from moto.utilities.paginator import paginate
 
diff --git a/moto/autoscaling/models.py b/moto/autoscaling/models.py
index f81a65916..c65884f89 100644
--- a/moto/autoscaling/models.py
+++ b/moto/autoscaling/models.py
@@ -2,7 +2,8 @@ import itertools
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional, Tuple, Union
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import camelcase_to_underscores
 from moto.ec2 import ec2_backends
 from moto.ec2.exceptions import InvalidInstanceIdError
@@ -805,7 +806,7 @@ class FakeAutoScalingGroup(CloudFormationModel):
             if self.launch_config
             else None
         )
-        reservation = self.autoscaling_backend.ec2_backend.add_instances(
+        reservation = self.autoscaling_backend.ec2_backend.run_instances(
             self.image_id,
             count_needed,
             self.user_data,
diff --git a/moto/awslambda/models.py b/moto/awslambda/models.py
index 10cc9f0e5..fe19adced 100644
--- a/moto/awslambda/models.py
+++ b/moto/awslambda/models.py
@@ -23,7 +23,8 @@ import requests.exceptions
 
 from moto import settings
 from moto.awslambda.policy import Policy
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import RESTError
 from moto.core.utils import iso_8601_datetime_with_nanoseconds, unix_time_millis, utcnow
 from moto.dynamodb import dynamodb_backends
@@ -149,7 +150,7 @@ class _DockerDataVolumeContext:
             try:
                 with zip2tar(self._lambda_func.code_bytes) as stream:
                     container.put_archive(settings.LAMBDA_DATA_DIR, stream)
-                if settings.test_proxy_mode():
+                if settings.is_test_proxy_mode():
                     ca_cert = load_resource_as_bytes(__name__, "../moto_proxy/ca.crt")
                     with file2tar(ca_cert, "ca.crt") as cert_stream:
                         container.put_archive(settings.LAMBDA_DATA_DIR, cert_stream)
@@ -968,7 +969,7 @@ class LambdaFunction(CloudFormationModel, DockerModel):
             env_vars["MOTO_PORT"] = moto_port
             env_vars["MOTO_HTTP_ENDPOINT"] = f'{env_vars["MOTO_HOST"]}:{moto_port}'
 
-            if settings.test_proxy_mode():
+            if settings.is_test_proxy_mode():
                 env_vars["HTTPS_PROXY"] = env_vars["MOTO_HTTP_ENDPOINT"]
                 env_vars["AWS_CA_BUNDLE"] = "/var/task/ca.crt"
 
diff --git a/moto/awslambda_simple/models.py b/moto/awslambda_simple/models.py
index 915c9f674..2fa786632 100644
--- a/moto/awslambda_simple/models.py
+++ b/moto/awslambda_simple/models.py
@@ -1,7 +1,7 @@
 from typing import Any, Optional, Union
 
-from ..awslambda.models import LambdaBackend
-from ..core import BackendDict
+from moto.awslambda.models import LambdaBackend
+from moto.core.base_backend import BackendDict
 
 
 class LambdaSimpleBackend(LambdaBackend):
diff --git a/moto/backends.py b/moto/backends.py
index c60b4bbb7..14ba4ad92 100644
--- a/moto/backends.py
+++ b/moto/backends.py
@@ -33,7 +33,7 @@ if TYPE_CHECKING:
     from moto.cognitoidp.models import CognitoIdpBackend
     from moto.comprehend.models import ComprehendBackend
     from moto.config.models import ConfigBackend
-    from moto.core import SERVICE_BACKEND, BackendDict
+    from moto.core.base_backend import SERVICE_BACKEND, BackendDict
     from moto.databrew.models import DataBrewBackend
     from moto.datapipeline.models import DataPipelineBackend
     from moto.datasync.models import DataSyncBackend
diff --git a/moto/batch/models.py b/moto/batch/models.py
index 2499f28f6..6acb78eec 100644
--- a/moto/batch/models.py
+++ b/moto/batch/models.py
@@ -11,7 +11,8 @@ from typing import Any, Dict, List, Optional, Set, Tuple
 import dateutil.parser
 
 from moto import settings
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import unix_time_millis
 from moto.ec2.exceptions import InvalidSubnetIdError
 from moto.ec2.models import EC2Backend, ec2_backends
@@ -1270,7 +1271,7 @@ class BatchBackend(BaseBackend):
             subnet_cycle = cycle(compute_resources["subnets"])
 
             for instance_type in needed_instance_types:
-                reservation = self.ec2_backend.add_instances(
+                reservation = self.ec2_backend.run_instances(
                     image_id="ami-03cf127a",  # Todo import AMIs
                     count=1,
                     user_data=None,
diff --git a/moto/batch_simple/models.py b/moto/batch_simple/models.py
index 508553092..307480f7e 100644
--- a/moto/batch_simple/models.py
+++ b/moto/batch_simple/models.py
@@ -3,13 +3,9 @@ from os import getenv
 from time import sleep
 from typing import Any, Dict, List, Optional, Tuple
 
-from ..batch.models import (
-    BatchBackend,
-    ClientException,
-    Job,
-    batch_backends,
-)
-from ..core import BackendDict
+from moto.batch.exceptions import ClientException
+from moto.batch.models import BatchBackend, Job, batch_backends
+from moto.core.base_backend import BackendDict
 
 
 class BatchSimpleBackend(BatchBackend):
diff --git a/moto/budgets/models.py b/moto/budgets/models.py
index 22269fcac..16104e6c4 100644
--- a/moto/budgets/models.py
+++ b/moto/budgets/models.py
@@ -3,7 +3,8 @@ from copy import deepcopy
 from datetime import datetime
 from typing import Any, Dict, Iterable, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 
 from .exceptions import BudgetMissingLimit, DuplicateRecordException, NotFoundException
diff --git a/moto/ce/models.py b/moto/ce/models.py
index 16ff45db2..7092a74c3 100644
--- a/moto/ce/models.py
+++ b/moto/ce/models.py
@@ -3,7 +3,8 @@
 from datetime import datetime
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_without_milliseconds
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/cloudformation/custom_model.py b/moto/cloudformation/custom_model.py
index 0af0f4e39..e03879fba 100644
--- a/moto/cloudformation/custom_model.py
+++ b/moto/cloudformation/custom_model.py
@@ -4,7 +4,7 @@ from typing import Any, Dict
 
 from moto import settings
 from moto.awslambda import lambda_backends
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.moto_api._internal import mock_random
 
 
diff --git a/moto/cloudformation/models.py b/moto/cloudformation/models.py
index 1d6e18053..beaa6019c 100644
--- a/moto/cloudformation/models.py
+++ b/moto/cloudformation/models.py
@@ -7,7 +7,8 @@ import yaml
 from yaml.parser import ParserError  # pylint:disable=c-extension-no-member
 from yaml.scanner import ScannerError  # pylint:disable=c-extension-no-member
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import (
     iso_8601_datetime_with_milliseconds,
     iso_8601_datetime_without_milliseconds,
diff --git a/moto/cloudformation/parsing.py b/moto/cloudformation/parsing.py
index 0c55ad418..8b0eaa608 100644
--- a/moto/cloudformation/parsing.py
+++ b/moto/cloudformation/parsing.py
@@ -35,7 +35,7 @@ from moto.cloudformation.custom_model import CustomModel
 from moto.cloudwatch import models as cw_models  # noqa  # pylint: disable=all
 
 # End ugly list of imports
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.datapipeline import models as data_models  # noqa  # pylint: disable=all
 from moto.dynamodb import models as ddb_models  # noqa  # pylint: disable=all
 from moto.ec2 import models as ec2_models
diff --git a/moto/cloudfront/models.py b/moto/cloudfront/models.py
index edbd85c29..4fc6fcdcd 100644
--- a/moto/cloudfront/models.py
+++ b/moto/cloudfront/models.py
@@ -1,7 +1,8 @@
 import string
 from typing import Any, Dict, Iterable, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.moto_api._internal import mock_random as random
 from moto.moto_api._internal.managed_state_model import ManagedState
diff --git a/moto/cloudtrail/models.py b/moto/cloudtrail/models.py
index f1ddfde3a..af8b33141 100644
--- a/moto/cloudtrail/models.py
+++ b/moto/cloudtrail/models.py
@@ -3,7 +3,8 @@ import time
 from datetime import datetime
 from typing import Any, Dict, Iterable, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_without_milliseconds, utcnow
 from moto.utilities.tagging_service import TaggingService
 
diff --git a/moto/cloudwatch/models.py b/moto/cloudwatch/models.py
index 42a0f8fff..9a8da6fa8 100644
--- a/moto/cloudwatch/models.py
+++ b/moto/cloudwatch/models.py
@@ -5,7 +5,8 @@ from typing import Any, Dict, Iterable, List, Optional, SupportsFloat, Tuple
 from dateutil import parser
 from dateutil.tz import tzutc
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudWatchMetricProvider
+from moto.core.base_backend import BaseBackend
+from moto.core.common_models import BackendDict, BaseModel, CloudWatchMetricProvider
 from moto.core.utils import (
     iso_8601_datetime_with_nanoseconds,
     iso_8601_datetime_without_milliseconds,
diff --git a/moto/codebuild/models.py b/moto/codebuild/models.py
index 8442f554f..4be175617 100644
--- a/moto/codebuild/models.py
+++ b/moto/codebuild/models.py
@@ -4,7 +4,8 @@ from typing import Any, Dict, List, Optional
 
 from dateutil import parser
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/codecommit/models.py b/moto/codecommit/models.py
index bcce77106..7e1e4e44a 100644
--- a/moto/codecommit/models.py
+++ b/moto/codecommit/models.py
@@ -1,6 +1,7 @@
 from typing import Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/codepipeline/models.py b/moto/codepipeline/models.py
index a0deadafa..98552ff20 100644
--- a/moto/codepipeline/models.py
+++ b/moto/codepipeline/models.py
@@ -8,7 +8,8 @@ from moto.codepipeline.exceptions import (
     ResourceNotFoundException,
     TooManyTagsException,
 )
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
 from moto.iam.exceptions import IAMNotFoundException
 from moto.iam.models import IAMBackend, iam_backends
diff --git a/moto/cognitoidentity/models.py b/moto/cognitoidentity/models.py
index c8c8cddb0..a0a714cac 100644
--- a/moto/cognitoidentity/models.py
+++ b/moto/cognitoidentity/models.py
@@ -4,7 +4,8 @@ import re
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 
 from .exceptions import InvalidNameException, ResourceNotFoundError
diff --git a/moto/cognitoidp/models.py b/moto/cognitoidp/models.py
index 48462be09..34ce1dbeb 100644
--- a/moto/cognitoidp/models.py
+++ b/moto/cognitoidp/models.py
@@ -10,7 +10,8 @@ from typing import Any, Dict, List, Optional, Set, Tuple
 
 from jose import jws
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.paginator import paginate
diff --git a/moto/comprehend/models.py b/moto/comprehend/models.py
index c6543a41c..ff37e0b64 100644
--- a/moto/comprehend/models.py
+++ b/moto/comprehend/models.py
@@ -2,7 +2,8 @@
 
 from typing import Any, Dict, Iterable, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.utilities.tagging_service import TaggingService
 
 from .exceptions import (
diff --git a/moto/config/models.py b/moto/config/models.py
index a8cc82040..2aa96b2fd 100644
--- a/moto/config/models.py
+++ b/moto/config/models.py
@@ -48,8 +48,8 @@ from moto.config.exceptions import (
     TooManyTags,
     ValidationException,
 )
-from moto.core import BackendDict, BaseBackend, BaseModel
-from moto.core.common_models import ConfigQueryModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, ConfigQueryModel
 from moto.core.responses import AWSServiceSpec
 from moto.core.utils import utcnow
 from moto.iam.config import policy_config_query, role_config_query
diff --git a/moto/core/__init__.py b/moto/core/__init__.py
index b202845dc..f21d0fd9e 100644
--- a/moto/core/__init__.py
+++ b/moto/core/__init__.py
@@ -1,7 +1,4 @@
 from .models import DEFAULT_ACCOUNT_ID  # noqa
-from .base_backend import BaseBackend, BackendDict, SERVICE_BACKEND  # noqa
-from .common_models import BaseModel  # noqa
-from .common_models import CloudFormationModel, CloudWatchMetricProvider  # noqa
 from .models import patch_client, patch_resource  # noqa
 from .responses import ActionAuthenticatorMixin
 
diff --git a/moto/core/config.py b/moto/core/config.py
index d4e4ddb67..957025d33 100644
--- a/moto/core/config.py
+++ b/moto/core/config.py
@@ -16,9 +16,18 @@ class _core_config(TypedDict, total=False):
     passthrough: _passthrough_config
 
 
+class _iam_config(TypedDict, total=False):
+    load_aws_managed_policies: bool
+
+
 DefaultConfig = TypedDict(
     "DefaultConfig",
-    {"batch": _docker_config, "core": _core_config, "lambda": _docker_config},
+    {
+        "batch": _docker_config,
+        "core": _core_config,
+        "lambda": _docker_config,
+        "iam": _iam_config,
+    },
     total=False,
 )
 
@@ -26,6 +35,7 @@ default_user_config: DefaultConfig = {
     "batch": {"use_docker": True},
     "lambda": {"use_docker": True},
     "core": {"mock_credentials": True, "passthrough": {"urls": [], "services": []}},
+    "iam": {"load_aws_managed_policies": False},
 }
 
 
diff --git a/moto/core/decorator.py b/moto/core/decorator.py
index 11d6aab75..b74c37c9f 100644
--- a/moto/core/decorator.py
+++ b/moto/core/decorator.py
@@ -29,7 +29,7 @@ def mock_aws(
     clss = (
         ServerModeMockAWS
         if settings.TEST_SERVER_MODE
-        else (ProxyModeMockAWS if settings.test_proxy_mode() else MockAWS)
+        else (ProxyModeMockAWS if settings.is_test_proxy_mode() else MockAWS)
     )
     if func is not None:
         return clss().__call__(func=func)
diff --git a/moto/core/versions.py b/moto/core/versions.py
index 07769fed6..cc2a6dba6 100644
--- a/moto/core/versions.py
+++ b/moto/core/versions.py
@@ -13,5 +13,9 @@ def is_responses_0_17_x() -> bool:
     return LooseVersion(RESPONSES_VERSION) >= LooseVersion("0.17.0")
 
 
+def is_werkzeug_2_0_x_or_older() -> bool:
+    return LooseVersion(WERKZEUG_VERSION) < LooseVersion("2.1.0")
+
+
 def is_werkzeug_2_3_x() -> bool:
     return LooseVersion(WERKZEUG_VERSION) >= LooseVersion("2.3.0")
diff --git a/moto/databrew/models.py b/moto/databrew/models.py
index 6b14676b1..e96c53c88 100644
--- a/moto/databrew/models.py
+++ b/moto/databrew/models.py
@@ -5,7 +5,8 @@ from copy import deepcopy
 from datetime import datetime
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import camelcase_to_pascal, underscores_to_camelcase
 from moto.utilities.paginator import paginate
 
diff --git a/moto/datapipeline/models.py b/moto/datapipeline/models.py
index 535beb4a5..3ea28e3b2 100644
--- a/moto/datapipeline/models.py
+++ b/moto/datapipeline/models.py
@@ -2,7 +2,8 @@ import datetime
 from collections import OrderedDict
 from typing import Any, Dict, Iterable, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import utcnow
 
 from .utils import get_random_pipeline_id, remove_capitalization_of_dict_keys
diff --git a/moto/datasync/models.py b/moto/datasync/models.py
index c66691818..b44f1033e 100644
--- a/moto/datasync/models.py
+++ b/moto/datasync/models.py
@@ -1,7 +1,8 @@
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import InvalidRequestException
 
diff --git a/moto/dax/models.py b/moto/dax/models.py
index ec573008c..cca90b813 100644
--- a/moto/dax/models.py
+++ b/moto/dax/models.py
@@ -1,7 +1,8 @@
 """DAXBackend class with methods for supported APIs."""
 from typing import Any, Dict, Iterable, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random as random
 from moto.moto_api._internal.managed_state_model import ManagedState
diff --git a/moto/dms/models.py b/moto/dms/models.py
index 51bad6c7a..e246de65d 100644
--- a/moto/dms/models.py
+++ b/moto/dms/models.py
@@ -1,7 +1,8 @@
 from datetime import datetime
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 
 from .exceptions import (
diff --git a/moto/ds/models.py b/moto/ds/models.py
index 1842643b7..3ff10dd4c 100644
--- a/moto/ds/models.py
+++ b/moto/ds/models.py
@@ -2,7 +2,8 @@
 from datetime import datetime, timezone
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.ds.exceptions import (
     ClientException,
     DirectoryLimitExceededException,
diff --git a/moto/dynamodb/models/__init__.py b/moto/dynamodb/models/__init__.py
index 0f289060e..1cf919be8 100644
--- a/moto/dynamodb/models/__init__.py
+++ b/moto/dynamodb/models/__init__.py
@@ -3,7 +3,7 @@ import re
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional, Set, Tuple, Union
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.exceptions import JsonRESTError
 from moto.core.utils import unix_time
 from moto.dynamodb.comparisons import get_expected, get_filter_expression
diff --git a/moto/dynamodb/models/dynamo_type.py b/moto/dynamodb/models/dynamo_type.py
index 21b368355..82f737556 100644
--- a/moto/dynamodb/models/dynamo_type.py
+++ b/moto/dynamodb/models/dynamo_type.py
@@ -6,7 +6,7 @@ from typing import Any, Dict, List, Optional, Union
 from boto3.dynamodb.types import TypeDeserializer, TypeSerializer
 from botocore.utils import merge_dicts
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.dynamodb.exceptions import (
     EmptyKeyAttributeException,
     IncorrectDataType,
diff --git a/moto/dynamodb/models/table.py b/moto/dynamodb/models/table.py
index 06b8a3d8c..40b42efe5 100644
--- a/moto/dynamodb/models/table.py
+++ b/moto/dynamodb/models/table.py
@@ -2,7 +2,7 @@ import copy
 from collections import defaultdict
 from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple
 
-from moto.core import BaseModel, CloudFormationModel
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import unix_time, unix_time_millis, utcnow
 from moto.dynamodb.comparisons import get_expected, get_filter_expression
 from moto.dynamodb.exceptions import (
diff --git a/moto/dynamodb_v20111205/models.py b/moto/dynamodb_v20111205/models.py
index e5a3a309d..97eb95379 100644
--- a/moto/dynamodb_v20111205/models.py
+++ b/moto/dynamodb_v20111205/models.py
@@ -2,7 +2,8 @@ import json
 from collections import OrderedDict, defaultdict
 from typing import Any, Dict, Iterable, List, Optional, Tuple, Union
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time, utcnow
 
 from .comparisons import get_comparison_func
diff --git a/moto/dynamodbstreams/models.py b/moto/dynamodbstreams/models.py
index 3e5cc5279..b69ec43d4 100644
--- a/moto/dynamodbstreams/models.py
+++ b/moto/dynamodbstreams/models.py
@@ -3,7 +3,8 @@ import json
 import os
 from typing import Any, Dict, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.dynamodb.models import DynamoDBBackend, dynamodb_backends
 from moto.dynamodb.models.table import StreamShard, Table
 from moto.dynamodb.models.utilities import DynamoJsonEncoder
diff --git a/moto/ebs/models.py b/moto/ebs/models.py
index 3b39c4371..a09438086 100644
--- a/moto/ebs/models.py
+++ b/moto/ebs/models.py
@@ -2,7 +2,8 @@
 
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.ec2.models import EC2Backend, ec2_backends
 from moto.ec2.models.elastic_block_store import Snapshot
diff --git a/moto/ec2/models/__init__.py b/moto/ec2/models/__init__.py
index bd448918a..4f7d7cbfb 100644
--- a/moto/ec2/models/__init__.py
+++ b/moto/ec2/models/__init__.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 from ..exceptions import (
     EC2ClientError,
diff --git a/moto/ec2/models/core.py b/moto/ec2/models/core.py
index f850ce75c..0ecc94dcf 100644
--- a/moto/ec2/models/core.py
+++ b/moto/ec2/models/core.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 
 from ..exceptions import FilterNotImplementedError
 
diff --git a/moto/ec2/models/elastic_block_store.py b/moto/ec2/models/elastic_block_store.py
index ac094d757..2416cad4c 100644
--- a/moto/ec2/models/elastic_block_store.py
+++ b/moto/ec2/models/elastic_block_store.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, Iterable, List, Optional, Set
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.packages.boto.ec2.blockdevicemapping import BlockDeviceType
 
 from ..exceptions import (
diff --git a/moto/ec2/models/elastic_ip_addresses.py b/moto/ec2/models/elastic_ip_addresses.py
index 3a3677e91..5252e7eb1 100644
--- a/moto/ec2/models/elastic_ip_addresses.py
+++ b/moto/ec2/models/elastic_ip_addresses.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import (
     FilterNotImplementedError,
diff --git a/moto/ec2/models/elastic_network_interfaces.py b/moto/ec2/models/elastic_network_interfaces.py
index 74e022041..d1e4ec9b3 100644
--- a/moto/ec2/models/elastic_network_interfaces.py
+++ b/moto/ec2/models/elastic_network_interfaces.py
@@ -1,6 +1,6 @@
 from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import InvalidNetworkAttachmentIdError, InvalidNetworkInterfaceIdError
 from .core import TaggedEC2Resource
diff --git a/moto/ec2/models/fleets.py b/moto/ec2/models/fleets.py
index 611e964ab..19dd57da5 100644
--- a/moto/ec2/models/fleets.py
+++ b/moto/ec2/models/fleets.py
@@ -158,7 +158,7 @@ class Fleet(TaggedEC2Resource):
     def create_on_demand_requests(self, weight_to_add: float) -> None:
         weight_map, added_weight = self.get_launch_spec_counts(weight_to_add)
         for launch_spec, count in weight_map.items():
-            reservation = self.ec2_backend.add_instances(
+            reservation = self.ec2_backend.run_instances(
                 image_id=launch_spec.image_id,
                 count=count,
                 instance_type=launch_spec.instance_type,
diff --git a/moto/ec2/models/flow_logs.py b/moto/ec2/models/flow_logs.py
index b4db5b103..810a200c7 100644
--- a/moto/ec2/models/flow_logs.py
+++ b/moto/ec2/models/flow_logs.py
@@ -1,7 +1,7 @@
 import itertools
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import (
     FlowLogAlreadyExists,
diff --git a/moto/ec2/models/iam_instance_profile.py b/moto/ec2/models/iam_instance_profile.py
index ef547325e..ad8b75156 100644
--- a/moto/ec2/models/iam_instance_profile.py
+++ b/moto/ec2/models/iam_instance_profile.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.ec2.models.instances import Instance
 from moto.iam.models import InstanceProfile
 
diff --git a/moto/ec2/models/instances.py b/moto/ec2/models/instances.py
index f76ebce45..5dd1961ac 100644
--- a/moto/ec2/models/instances.py
+++ b/moto/ec2/models/instances.py
@@ -1,11 +1,10 @@
 import contextlib
 import copy
-import warnings
 from collections import OrderedDict
 from typing import Any, Dict, ItemsView, List, Optional, Set, Tuple
 
 from moto import settings
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.core.utils import camelcase_to_underscores, utcnow
 from moto.ec2.models.elastic_network_interfaces import NetworkInterface
 from moto.ec2.models.fleets import Fleet
@@ -139,15 +138,6 @@ class Instance(TaggedEC2Resource, BotoInstance, CloudFormationModel):
 
         amis = self.ec2_backend.describe_images(filters={"image-id": self.image_id})
         ami = amis[0] if amis else None
-        if ami is None:
-            warnings.warn(
-                f"Could not find AMI with image-id:{self.image_id}, "
-                "in the near future this will "
-                "cause an error.\n"
-                "Use ec2_backend.describe_images() to "
-                "find suitable image for your test",
-                PendingDeprecationWarning,
-            )
 
         self.platform = ami.platform if ami else None
         self.virtualization_type = ami.virtualization_type if ami else "paravirtual"
@@ -300,7 +290,7 @@ class Instance(TaggedEC2Resource, BotoInstance, CloudFormationModel):
             for group_id in security_group_ids
         ]
 
-        reservation = ec2_backend.add_instances(
+        reservation = ec2_backend.run_instances(
             image_id=properties["ImageId"],
             user_data=properties.get("UserData"),
             count=1,
@@ -622,7 +612,7 @@ class InstanceBackend:
                 return instance
         raise InvalidInstanceIdError(instance_id)
 
-    def add_instances(
+    def run_instances(
         self,
         image_id: str,
         count: int,
@@ -630,6 +620,18 @@ class InstanceBackend:
         security_group_names: List[str],
         **kwargs: Any,
     ) -> Reservation:
+        """
+        The Placement-parameter is validated to verify the availability-zone exists for the current region.
+
+        The InstanceType-parameter can be validated, to see if it is a known instance-type.
+        Enable this validation by setting the environment variable `MOTO_EC2_ENABLE_INSTANCE_TYPE_VALIDATION=true`
+
+        The ImageId-parameter can be validated, to see if it is a known AMI.
+        Enable this validation by setting the environment variable `MOTO_ENABLE_AMI_VALIDATION=true`
+
+        The KeyPair-parameter can be validated, to see if it is a known key-pair.
+        Enable this validation by setting the environment variable `MOTO_ENABLE_KEYPAIR_VALIDATION=true`
+        """
         location_type = "availability-zone" if kwargs.get("placement") else "region"
         default_region = "us-east-1"
         if settings.ENABLE_KEYPAIR_VALIDATION:
@@ -737,23 +739,6 @@ class InstanceBackend:
 
         return new_reservation
 
-    def run_instances(self) -> None:
-        """
-        The Placement-parameter is validated to verify the availability-zone exists for the current region.
-
-        The InstanceType-parameter can be validated, to see if it is a known instance-type.
-        Enable this validation by setting the environment variable `MOTO_EC2_ENABLE_INSTANCE_TYPE_VALIDATION=true`
-
-        The ImageId-parameter can be validated, to see if it is a known AMI.
-        Enable this validation by setting the environment variable `MOTO_ENABLE_AMI_VALIDATION=true`
-
-        The KeyPair-parameter can be validated, to see if it is a known key-pair.
-        Enable this validation by setting the environment variable `MOTO_ENABLE_KEYPAIR_VALIDATION=true`
-        """
-        # Logic resides in add_instances
-        # Fake method here to make implementation coverage script aware that this method is implemented
-        pass
-
     def start_instances(
         self, instance_ids: List[str]
     ) -> List[Tuple[Instance, InstanceState]]:
diff --git a/moto/ec2/models/internet_gateways.py b/moto/ec2/models/internet_gateways.py
index a12f314d5..79794ede2 100644
--- a/moto/ec2/models/internet_gateways.py
+++ b/moto/ec2/models/internet_gateways.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import (
     DependencyViolationError,
diff --git a/moto/ec2/models/launch_templates.py b/moto/ec2/models/launch_templates.py
index 47243440a..e76df70d6 100644
--- a/moto/ec2/models/launch_templates.py
+++ b/moto/ec2/models/launch_templates.py
@@ -1,7 +1,7 @@
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import (
     InvalidLaunchTemplateNameAlreadyExistsError,
diff --git a/moto/ec2/models/nat_gateways.py b/moto/ec2/models/nat_gateways.py
index 7fd552769..33eefac7c 100644
--- a/moto/ec2/models/nat_gateways.py
+++ b/moto/ec2/models/nat_gateways.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
 
 from ..utils import random_nat_gateway_id, random_private_ip
diff --git a/moto/ec2/models/route_tables.py b/moto/ec2/models/route_tables.py
index 83a4c2c15..de4eb383e 100644
--- a/moto/ec2/models/route_tables.py
+++ b/moto/ec2/models/route_tables.py
@@ -1,7 +1,7 @@
 import ipaddress
 from typing import Any, Dict, List, Optional, Set
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.ec2.models.carrier_gateways import CarrierGateway
 from moto.ec2.models.elastic_network_interfaces import NetworkInterface
 from moto.ec2.models.instances import Instance
diff --git a/moto/ec2/models/security_groups.py b/moto/ec2/models/security_groups.py
index 36dc25564..afda023c0 100644
--- a/moto/ec2/models/security_groups.py
+++ b/moto/ec2/models/security_groups.py
@@ -4,7 +4,7 @@ import json
 from collections import defaultdict
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.core.utils import aws_api_matches
 
 from ..exceptions import (
diff --git a/moto/ec2/models/spot_requests.py b/moto/ec2/models/spot_requests.py
index f1fde656c..1dbb07799 100644
--- a/moto/ec2/models/spot_requests.py
+++ b/moto/ec2/models/spot_requests.py
@@ -125,7 +125,7 @@ class SpotInstanceRequest(TaggedEC2Resource):
             return super().get_filter_value(filter_name, "DescribeSpotInstanceRequests")
 
     def launch_instance(self) -> "Instance":
-        reservation = self.ec2_backend.add_instances(
+        reservation = self.ec2_backend.run_instances(
             image_id=self.launch_specification.image_id,
             count=1,
             user_data=self.user_data,
diff --git a/moto/ec2/models/subnets.py b/moto/ec2/models/subnets.py
index 1d99d484f..8225d7c57 100644
--- a/moto/ec2/models/subnets.py
+++ b/moto/ec2/models/subnets.py
@@ -3,7 +3,7 @@ import itertools
 from collections import defaultdict
 from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Tuple
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 if TYPE_CHECKING:
     from moto.ec2.models.instances import Instance
diff --git a/moto/ec2/models/transit_gateway.py b/moto/ec2/models/transit_gateway.py
index 417f61802..e247d13ff 100644
--- a/moto/ec2/models/transit_gateway.py
+++ b/moto/ec2/models/transit_gateway.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
 from moto.utilities.utils import filter_resources, merge_multiple_dicts
 
diff --git a/moto/ec2/models/vpc_peering_connections.py b/moto/ec2/models/vpc_peering_connections.py
index 5d430f0f1..ad9423a7c 100644
--- a/moto/ec2/models/vpc_peering_connections.py
+++ b/moto/ec2/models/vpc_peering_connections.py
@@ -2,7 +2,7 @@ import weakref
 from collections import defaultdict
 from typing import Any, Dict, Iterator, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import (
     InvalidVPCPeeringConnectionIdError,
diff --git a/moto/ec2/models/vpc_service_configuration.py b/moto/ec2/models/vpc_service_configuration.py
index 2cafb16b8..f8157a2c4 100644
--- a/moto/ec2/models/vpc_service_configuration.py
+++ b/moto/ec2/models/vpc_service_configuration.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 from moto.moto_api._internal import mock_random
 
 from ..exceptions import UnknownVpcEndpointService
diff --git a/moto/ec2/models/vpcs.py b/moto/ec2/models/vpcs.py
index 41a9ad72d..4c4b67f5f 100644
--- a/moto/ec2/models/vpcs.py
+++ b/moto/ec2/models/vpcs.py
@@ -5,7 +5,7 @@ from collections import defaultdict
 from operator import itemgetter
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import (
     CidrLimitExceeded,
diff --git a/moto/ec2/models/vpn_gateway.py b/moto/ec2/models/vpn_gateway.py
index 524ebfa6c..edb65287f 100644
--- a/moto/ec2/models/vpn_gateway.py
+++ b/moto/ec2/models/vpn_gateway.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import CloudFormationModel
+from moto.core.common_models import CloudFormationModel
 
 from ..exceptions import InvalidVpnGatewayAttachmentError, InvalidVpnGatewayIdError
 from ..utils import generic_filter, random_vpn_gateway_id
diff --git a/moto/ec2/models/windows.py b/moto/ec2/models/windows.py
index 5ea80be62..e8f66c68e 100644
--- a/moto/ec2/models/windows.py
+++ b/moto/ec2/models/windows.py
@@ -1,4 +1,4 @@
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random as random
 
 
diff --git a/moto/ec2/responses/instances.py b/moto/ec2/responses/instances.py
index f1ccff666..479cc3edb 100644
--- a/moto/ec2/responses/instances.py
+++ b/moto/ec2/responses/instances.py
@@ -103,7 +103,7 @@ class InstanceResponse(EC2BaseResponse):
         iam_instance_profile_name = kwargs.get("iam_instance_profile_name")
         iam_instance_profile_arn = kwargs.get("iam_instance_profile_arn")
         if iam_instance_profile_arn or iam_instance_profile_name:
-            # Validate the profile exists, before we error_on_dryrun and add_instances
+            # Validate the profile exists, before we error_on_dryrun and run_instances
             filter_iam_instance_profiles(
                 self.current_account,
                 iam_instance_profile_arn=iam_instance_profile_arn,
@@ -112,7 +112,7 @@ class InstanceResponse(EC2BaseResponse):
 
         self.error_on_dryrun()
 
-        new_reservation = self.ec2_backend.add_instances(
+        new_reservation = self.ec2_backend.run_instances(
             image_id, min_count, user_data, security_group_names, **kwargs
         )
         if iam_instance_profile_name:
diff --git a/moto/ec2instanceconnect/models.py b/moto/ec2instanceconnect/models.py
index 8c5fb8187..62422d92f 100644
--- a/moto/ec2instanceconnect/models.py
+++ b/moto/ec2instanceconnect/models.py
@@ -1,6 +1,6 @@
 import json
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 
 class Ec2InstanceConnectBackend(BaseBackend):
diff --git a/moto/ecr/models.py b/moto/ecr/models.py
index bb69637ee..0f4c0df09 100644
--- a/moto/ecr/models.py
+++ b/moto/ecr/models.py
@@ -7,7 +7,8 @@ from typing import Any, Dict, Iterable, List, Optional, Tuple
 
 from botocore.exceptions import ParamValidationError
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import iso_8601_datetime_without_milliseconds, utcnow
 from moto.ecr.exceptions import (
     ImageAlreadyExistsException,
diff --git a/moto/ecs/models.py b/moto/ecs/models.py
index 72363f5bb..d983f8551 100644
--- a/moto/ecs/models.py
+++ b/moto/ecs/models.py
@@ -5,7 +5,8 @@ from os import getenv
 from typing import Any, Dict, Iterator, List, Optional, Tuple
 
 from moto import settings
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import JsonRESTError
 from moto.core.utils import pascal_to_camelcase, remap_nested_keys, unix_time
 from moto.ec2 import ec2_backends
diff --git a/moto/efs/models.py b/moto/efs/models.py
index 88a31ebdd..33df67491 100644
--- a/moto/efs/models.py
+++ b/moto/efs/models.py
@@ -9,7 +9,8 @@ import time
 from copy import deepcopy
 from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, Union
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import camelcase_to_underscores, underscores_to_camelcase
 from moto.ec2 import ec2_backends
 from moto.ec2.exceptions import InvalidSubnetIdError
diff --git a/moto/eks/models.py b/moto/eks/models.py
index c85c81b2f..102030742 100644
--- a/moto/eks/models.py
+++ b/moto/eks/models.py
@@ -1,7 +1,7 @@
 from datetime import datetime
 from typing import Any, Dict, Iterator, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.utils import iso_8601_datetime_without_milliseconds
 from moto.moto_api._internal import mock_random as random
 
diff --git a/moto/elasticache/models.py b/moto/elasticache/models.py
index da3978895..b2cd0790f 100644
--- a/moto/elasticache/models.py
+++ b/moto/elasticache/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 
 from ..moto_api._internal import mock_random
diff --git a/moto/elasticbeanstalk/models.py b/moto/elasticbeanstalk/models.py
index 8cdb1dfa9..e2a92f105 100644
--- a/moto/elasticbeanstalk/models.py
+++ b/moto/elasticbeanstalk/models.py
@@ -1,7 +1,8 @@
 import weakref
 from typing import Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import (
     ApplicationNotFound,
diff --git a/moto/elastictranscoder/models.py b/moto/elastictranscoder/models.py
index c5d416cd6..8997c3ca8 100644
--- a/moto/elastictranscoder/models.py
+++ b/moto/elastictranscoder/models.py
@@ -1,7 +1,8 @@
 import string
 from typing import Any, Dict, List, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random as random
 
 
diff --git a/moto/elb/models.py b/moto/elb/models.py
index 9c1fba044..0d829fd19 100644
--- a/moto/elb/models.py
+++ b/moto/elb/models.py
@@ -2,7 +2,8 @@ import datetime
 from collections import OrderedDict
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.ec2.exceptions import InvalidInstanceIdError
 from moto.ec2.models import ec2_backends
 from moto.moto_api._internal import mock_random
diff --git a/moto/elbv2/models.py b/moto/elbv2/models.py
index 4b3cf67ea..029a4dc26 100644
--- a/moto/elbv2/models.py
+++ b/moto/elbv2/models.py
@@ -5,7 +5,8 @@ from typing import Any, Dict, Iterable, List, Optional
 from botocore.exceptions import ParamValidationError
 from jinja2 import Template
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import RESTError
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.ec2.models import ec2_backends
diff --git a/moto/emr/models.py b/moto/emr/models.py
index 863c2b0a7..fa0d7100e 100644
--- a/moto/emr/models.py
+++ b/moto/emr/models.py
@@ -1,10 +1,10 @@
-import warnings
 from datetime import datetime, timedelta, timezone
 from typing import Any, Dict, List, Optional, Tuple
 
 from dateutil.parser import parse as dtparse
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.emr.exceptions import (
     InvalidRequestException,
     ResourceNotFoundException,
@@ -436,7 +436,7 @@ class ElasticMapReduceBackend(BaseBackend):
             result_groups.append(group)
         return result_groups
 
-    def add_instances(
+    def run_instances(
         self,
         cluster_id: str,
         instances: Dict[str, Any],
@@ -444,7 +444,7 @@ class ElasticMapReduceBackend(BaseBackend):
     ) -> None:
         cluster = self.clusters[cluster_id]
         instances["is_instance_type_default"] = not instances.get("instance_type")
-        response = self.ec2_backend.add_instances(
+        response = self.ec2_backend.run_instances(
             EXAMPLE_AMI_ID, instances["instance_count"], "", [], **instances
         )
         for instance in response.instances:
@@ -648,13 +648,6 @@ class ElasticMapReduceBackend(BaseBackend):
         try:
             subnet = self.ec2_backend.get_subnet(ec2_subnet_id)
         except InvalidSubnetIdError:
-            warnings.warn(
-                f"Could not find Subnet with id: {ec2_subnet_id}\n"
-                "In the near future, this will raise an error.\n"
-                "Use ec2.describe_subnets() to find a suitable id "
-                "for your test.",
-                PendingDeprecationWarning,
-            )
             return default_return_value
 
         manager = EmrSecurityGroupManager(self.ec2_backend, subnet.vpc_id)
diff --git a/moto/emr/responses.py b/moto/emr/responses.py
index f047743ec..76df29203 100644
--- a/moto/emr/responses.py
+++ b/moto/emr/responses.py
@@ -402,7 +402,7 @@ class ElasticMapReduceResponse(BaseResponse):
                 cluster.id, instance_groups
             )
             for i in range(0, len(instance_group_result)):
-                self.backend.add_instances(
+                self.backend.run_instances(
                     cluster.id, instance_groups[i], instance_group_result[i]
                 )
 
diff --git a/moto/emrcontainers/models.py b/moto/emrcontainers/models.py
index 0211e432d..653d8de04 100644
--- a/moto/emrcontainers/models.py
+++ b/moto/emrcontainers/models.py
@@ -3,7 +3,8 @@ import re
 from datetime import datetime
 from typing import Any, Dict, Iterator, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_without_milliseconds
 
 from ..config.exceptions import ValidationException
diff --git a/moto/emrserverless/models.py b/moto/emrserverless/models.py
index fab76443d..ca753564e 100644
--- a/moto/emrserverless/models.py
+++ b/moto/emrserverless/models.py
@@ -4,7 +4,8 @@ import re
 from datetime import datetime
 from typing import Any, Dict, Iterator, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_without_milliseconds
 from moto.emrcontainers.utils import get_partition, paginated_list
 
diff --git a/moto/es/models.py b/moto/es/models.py
index fe18e1e4b..56b557a55 100644
--- a/moto/es/models.py
+++ b/moto/es/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 
 from .exceptions import DomainNotFound
diff --git a/moto/events/models.py b/moto/events/models.py
index 6722d1b35..11d7c62bd 100644
--- a/moto/events/models.py
+++ b/moto/events/models.py
@@ -13,7 +13,8 @@ from typing import Any, Dict, List, Optional, Tuple
 import requests
 
 from moto import settings
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import JsonRESTError
 from moto.core.utils import (
     iso_8601_datetime_without_milliseconds,
diff --git a/moto/firehose/models.py b/moto/firehose/models.py
index f22aeff87..e8c35a85a 100644
--- a/moto/firehose/models.py
+++ b/moto/firehose/models.py
@@ -22,7 +22,8 @@ from typing import Any, Dict, List, Optional, Tuple
 
 import requests
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 from moto.firehose.exceptions import (
     ConcurrentModificationException,
diff --git a/moto/forecast/models.py b/moto/forecast/models.py
index a1fe901f8..ca4a51b45 100644
--- a/moto/forecast/models.py
+++ b/moto/forecast/models.py
@@ -2,7 +2,7 @@ import re
 from datetime import datetime
 from typing import Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.utils import iso_8601_datetime_without_milliseconds
 
 from .exceptions import (
diff --git a/moto/glacier/models.py b/moto/glacier/models.py
index e97d636e9..38608e385 100644
--- a/moto/glacier/models.py
+++ b/moto/glacier/models.py
@@ -2,7 +2,8 @@ import datetime
 import hashlib
 from typing import Any, Dict, List, Optional, Union
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.exceptions import JsonRESTError
 from moto.utilities.utils import md5_hash
 
diff --git a/moto/glue/models.py b/moto/glue/models.py
index 6a9ae31c4..4a8c076c1 100644
--- a/moto/glue/models.py
+++ b/moto/glue/models.py
@@ -5,7 +5,8 @@ from collections import OrderedDict
 from datetime import datetime
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time, utcnow
 from moto.moto_api._internal import mock_random
 from moto.moto_api._internal.managed_state_model import ManagedState
diff --git a/moto/greengrass/models.py b/moto/greengrass/models.py
index 84ac09028..1910c652e 100644
--- a/moto/greengrass/models.py
+++ b/moto/greengrass/models.py
@@ -4,7 +4,8 @@ from collections import OrderedDict
 from datetime import datetime
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/guardduty/models.py b/moto/guardduty/models.py
index 0bf50d94b..8e02b95fb 100644
--- a/moto/guardduty/models.py
+++ b/moto/guardduty/models.py
@@ -1,7 +1,8 @@
 from datetime import datetime
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 
 from .exceptions import DetectorNotFoundException, FilterNotFoundException
diff --git a/moto/iam/models.py b/moto/iam/models.py
index 7d2c05430..b9f1ecdc9 100644
--- a/moto/iam/models.py
+++ b/moto/iam/models.py
@@ -1,5 +1,4 @@
 import base64
-import copy
 import json
 import os
 import re
@@ -12,13 +11,9 @@ from cryptography import x509
 from cryptography.hazmat.backends import default_backend
 from jinja2 import Template
 
-from moto.core import (
-    DEFAULT_ACCOUNT_ID,
-    BackendDict,
-    BaseBackend,
-    BaseModel,
-    CloudFormationModel,
-)
+from moto.core import DEFAULT_ACCOUNT_ID
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import RESTError
 from moto.core.utils import (
     iso_8601_datetime_with_milliseconds,
@@ -31,6 +26,7 @@ from moto.iam.policy_validation import (
     IAMTrustPolicyDocumentValidator,
 )
 from moto.moto_api._internal import mock_random as random
+from moto.settings import load_iam_aws_managed_policies
 from moto.utilities.utils import md5_hash
 
 from ..utilities.tagging_service import TaggingService
@@ -1795,12 +1791,7 @@ def filter_items_with_path_prefix(
 
 
 class IAMBackend(BaseBackend):
-    def __init__(
-        self,
-        region_name: str,
-        account_id: str,
-        aws_policies: Optional[List[ManagedPolicy]] = None,
-    ):
+    def __init__(self, region_name: str, account_id: str):
         super().__init__(region_name=region_name, account_id=account_id)
         self.instance_profiles: Dict[str, InstanceProfile] = {}
         self.roles: Dict[str, Role] = {}
@@ -1808,7 +1799,7 @@ class IAMBackend(BaseBackend):
         self.groups: Dict[str, Group] = {}
         self.users: Dict[str, User] = {}
         self.credential_report: Optional[bool] = None
-        self.aws_managed_policies = aws_policies or self._init_aws_policies()
+        self.aws_managed_policies = self._init_aws_policies()
         self.managed_policies = self._init_managed_policies()
         self.account_aliases: List[str] = []
         self.saml_providers: Dict[str, SAMLProvider] = {}
@@ -1825,6 +1816,8 @@ class IAMBackend(BaseBackend):
         self.initialize_service_roles()
 
     def _init_aws_policies(self) -> List[ManagedPolicy]:
+        if not load_iam_aws_managed_policies():
+            return []
         # AWS defines some of its own managed policies
         # we periodically import them via `make aws_managed_policies`
         aws_managed_policies_data_parsed = json.loads(aws_managed_policies_data)
@@ -1834,15 +1827,7 @@ class IAMBackend(BaseBackend):
         ]
 
     def _init_managed_policies(self) -> Dict[str, ManagedPolicy]:
-        return dict((p.arn, copy.deepcopy(p)) for p in self.aws_managed_policies)
-
-    def reset(self) -> None:
-        region_name = self.region_name
-        account_id = self.account_id
-        # Do not reset these policies, as they take a long time to load
-        aws_policies = self.aws_managed_policies
-        self.__dict__ = {}
-        IAMBackend.__init__(self, region_name, account_id, aws_policies)
+        return dict((p.arn, p) for p in self.aws_managed_policies)
 
     def initialize_service_roles(self) -> None:
         pass
diff --git a/moto/identitystore/models.py b/moto/identitystore/models.py
index 8ec0d2613..d1991d065 100644
--- a/moto/identitystore/models.py
+++ b/moto/identitystore/models.py
@@ -1,9 +1,9 @@
-import warnings
 from typing import TYPE_CHECKING, Any, Dict, List, NamedTuple, Optional, Tuple
 
 from botocore.exceptions import ParamValidationError
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BaseBackend
+from moto.core.models import BackendDict
 from moto.moto_api._internal import mock_random
 from moto.utilities.paginator import paginate
 
@@ -134,6 +134,9 @@ class IdentityStoreBackend(BaseBackend):
     def get_group_id(
         self, identity_store_id: str, alternate_identifier: Dict[str, Any]
     ) -> Tuple[str, str]:
+        """
+        The ExternalId alternate identifier is not yet implemented
+        """
         identity_store = self.__get_identity_store(identity_store_id)
         if "UniqueAttribute" in alternate_identifier:
             if (
@@ -147,8 +150,6 @@ class IdentityStoreBackend(BaseBackend):
                         == alternate_identifier["UniqueAttribute"]["AttributeValue"]
                     ):
                         return g.GroupId, identity_store_id
-        elif "ExternalId" in alternate_identifier:
-            warnings.warn("ExternalId has not been implemented.")
 
         raise ResourceNotFoundException(
             message="GROUP not found.", resource_type="GROUP"
diff --git a/moto/inspector2/models.py b/moto/inspector2/models.py
index eba170f7d..53de199c8 100644
--- a/moto/inspector2/models.py
+++ b/moto/inspector2/models.py
@@ -1,7 +1,8 @@
 import json
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/instance_metadata/models.py b/moto/instance_metadata/models.py
index fd3fd7243..5a3d82c17 100644
--- a/moto/instance_metadata/models.py
+++ b/moto/instance_metadata/models.py
@@ -1,4 +1,4 @@
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 
 class InstanceMetadataBackend(BaseBackend):
diff --git a/moto/iot/models.py b/moto/iot/models.py
index 359dd5a83..80d8498e4 100644
--- a/moto/iot/models.py
+++ b/moto/iot/models.py
@@ -11,7 +11,8 @@ from cryptography.hazmat.backends import default_backend
 from cryptography.hazmat.primitives import hashes, serialization
 from cryptography.hazmat.primitives.asymmetric import rsa
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.paginator import paginate
diff --git a/moto/iotdata/models.py b/moto/iotdata/models.py
index f149bfbfa..481da8f65 100644
--- a/moto/iotdata/models.py
+++ b/moto/iotdata/models.py
@@ -4,7 +4,8 @@ from typing import Any, Dict, List, Optional, Tuple
 
 import jsondiff
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import merge_dicts
 from moto.iot.models import IoTBackend, iot_backends
 
diff --git a/moto/ivs/models.py b/moto/ivs/models.py
index e9d71e441..344d1f12d 100644
--- a/moto/ivs/models.py
+++ b/moto/ivs/models.py
@@ -1,7 +1,7 @@
 """IVSBackend class with methods for supported APIs."""
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.ivs.exceptions import ResourceNotFoundException
 from moto.moto_api._internal import mock_random
 from moto.utilities.paginator import paginate
diff --git a/moto/kinesis/models.py b/moto/kinesis/models.py
index 770dff1ac..2590ca39f 100644
--- a/moto/kinesis/models.py
+++ b/moto/kinesis/models.py
@@ -9,7 +9,8 @@ from gzip import GzipFile
 from operator import attrgetter
 from typing import Any, Dict, Iterable, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import unix_time, utcnow
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.paginator import paginate
diff --git a/moto/kinesisvideo/models.py b/moto/kinesisvideo/models.py
index 12a9b58d7..d93d69b66 100644
--- a/moto/kinesisvideo/models.py
+++ b/moto/kinesisvideo/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 from moto.moto_api._internal import mock_random as random
 
diff --git a/moto/kinesisvideoarchivedmedia/models.py b/moto/kinesisvideoarchivedmedia/models.py
index c3e626fc8..a4b6f2733 100644
--- a/moto/kinesisvideoarchivedmedia/models.py
+++ b/moto/kinesisvideoarchivedmedia/models.py
@@ -1,6 +1,6 @@
 from typing import Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.kinesisvideo.models import KinesisVideoBackend, kinesisvideo_backends
 from moto.sts.utils import random_session_token
 
diff --git a/moto/kms/models.py b/moto/kms/models.py
index 928a2dc88..f567a9c58 100644
--- a/moto/kms/models.py
+++ b/moto/kms/models.py
@@ -5,7 +5,8 @@ from copy import copy
 from datetime import datetime, timedelta
 from typing import Any, Dict, Iterable, List, Optional, Set, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import JsonRESTError
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random
@@ -650,6 +651,7 @@ class KmsBackend(BaseBackend):
         Verify message using public key from generated private key.
 
         - grant_tokens are not implemented
+        - The MessageType-parameter DIGEST is not yet implemented
         """
         key = self.describe_key(key_id)
 
diff --git a/moto/kms/responses.py b/moto/kms/responses.py
index ef02e0f1f..4630fbead 100644
--- a/moto/kms/responses.py
+++ b/moto/kms/responses.py
@@ -2,7 +2,6 @@ import base64
 import json
 import os
 import re
-import warnings
 from typing import Any, Dict
 
 from moto.core.responses import BaseResponse
@@ -621,20 +620,13 @@ class KmsResponse(BaseResponse):
         return json.dumps({"Plaintext": response_entropy})
 
     def sign(self) -> str:
-        """https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html"""
         key_id = self._get_param("KeyId")
         message = self._get_param("Message")
         message_type = self._get_param("MessageType")
-        grant_tokens = self._get_param("GrantTokens")
         signing_algorithm = self._get_param("SigningAlgorithm")
 
         self._validate_key_id(key_id)
 
-        if grant_tokens:
-            warnings.warn(
-                "The GrantTokens-parameter is not yet implemented for client.sign()"
-            )
-
         if isinstance(message, str):
             message = message.encode("utf-8")
 
@@ -669,20 +661,9 @@ class KmsResponse(BaseResponse):
         message_type = self._get_param("MessageType")
         signature = self._get_param("Signature")
         signing_algorithm = self._get_param("SigningAlgorithm")
-        grant_tokens = self._get_param("GrantTokens")
 
         self._validate_key_id(key_id)
 
-        if grant_tokens:
-            warnings.warn(
-                "The GrantTokens-parameter is not yet implemented for client.verify()"
-            )
-
-        if message_type == "DIGEST":
-            warnings.warn(
-                "The MessageType-parameter DIGEST is not yet implemented for client.verify()"
-            )
-
         if not message_type:
             message_type = "RAW"
 
diff --git a/moto/lakeformation/models.py b/moto/lakeformation/models.py
index 1c8c79893..2fcc94e3b 100644
--- a/moto/lakeformation/models.py
+++ b/moto/lakeformation/models.py
@@ -2,7 +2,8 @@ from collections import defaultdict
 from enum import Enum
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.utilities.tagging_service import TaggingService
 
 from .exceptions import AlreadyExists, EntityNotFound, InvalidInput
diff --git a/moto/logs/models.py b/moto/logs/models.py
index ae144aaab..92638925e 100644
--- a/moto/logs/models.py
+++ b/moto/logs/models.py
@@ -2,7 +2,8 @@ from datetime import datetime, timedelta
 from gzip import compress as gzip_compress
 from typing import Any, Dict, Iterable, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import unix_time_millis, utcnow
 from moto.logs.exceptions import (
     InvalidParameterException,
diff --git a/moto/managedblockchain/models.py b/moto/managedblockchain/models.py
index 7cfce11a4..79dc02cde 100644
--- a/moto/managedblockchain/models.py
+++ b/moto/managedblockchain/models.py
@@ -2,7 +2,8 @@ import datetime
 import re
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 
 from .exceptions import (
diff --git a/moto/mediaconnect/models.py b/moto/mediaconnect/models.py
index 1e87fe29a..18b7d3ca3 100644
--- a/moto/mediaconnect/models.py
+++ b/moto/mediaconnect/models.py
@@ -1,7 +1,8 @@
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.mediaconnect.exceptions import NotFoundException
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/medialive/models.py b/moto/medialive/models.py
index b0b720526..434623b29 100644
--- a/moto/medialive/models.py
+++ b/moto/medialive/models.py
@@ -1,7 +1,8 @@
 from collections import OrderedDict
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 
 
diff --git a/moto/mediapackage/models.py b/moto/mediapackage/models.py
index 380307186..5c228069e 100644
--- a/moto/mediapackage/models.py
+++ b/moto/mediapackage/models.py
@@ -1,7 +1,8 @@
 from collections import OrderedDict
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import ClientError
 
diff --git a/moto/mediastore/models.py b/moto/mediastore/models.py
index 44de5d7e4..4502d2d95 100644
--- a/moto/mediastore/models.py
+++ b/moto/mediastore/models.py
@@ -2,7 +2,8 @@ from collections import OrderedDict
 from datetime import date
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import (
     ContainerNotFoundException,
diff --git a/moto/mediastoredata/models.py b/moto/mediastoredata/models.py
index 3597b3c4c..497903e22 100644
--- a/moto/mediastoredata/models.py
+++ b/moto/mediastoredata/models.py
@@ -2,7 +2,8 @@ import hashlib
 from collections import OrderedDict
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import ClientError
 
diff --git a/moto/meteringmarketplace/models.py b/moto/meteringmarketplace/models.py
index 9c61be9fc..a1fbd6045 100644
--- a/moto/meteringmarketplace/models.py
+++ b/moto/meteringmarketplace/models.py
@@ -1,7 +1,8 @@
 import collections
 from typing import Any, Deque, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 
 
diff --git a/moto/moto_api/_internal/models.py b/moto/moto_api/_internal/models.py
index 3a5c596c2..b67e9533f 100644
--- a/moto/moto_api/_internal/models.py
+++ b/moto/moto_api/_internal/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import DEFAULT_ACCOUNT_ID, BackendDict, BaseBackend
+from moto.core import DEFAULT_ACCOUNT_ID
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.model_instances import reset_model_data
 
 
diff --git a/moto/moto_proxy/proxy3.py b/moto/moto_proxy/proxy3.py
index 6cb77bbd6..0b34e7db1 100644
--- a/moto/moto_proxy/proxy3.py
+++ b/moto/moto_proxy/proxy3.py
@@ -11,7 +11,8 @@ from botocore.awsrequest import AWSPreparedRequest
 
 from moto.backend_index import backend_url_patterns
 from moto.backends import get_backend
-from moto.core import DEFAULT_ACCOUNT_ID, BackendDict
+from moto.core import DEFAULT_ACCOUNT_ID
+from moto.core.base_backend import BackendDict
 from moto.core.exceptions import RESTError
 
 from . import debug, error, info, with_color
diff --git a/moto/moto_server/werkzeug_app.py b/moto/moto_server/werkzeug_app.py
index 2b5b3275c..bb7fa35eb 100644
--- a/moto/moto_server/werkzeug_app.py
+++ b/moto/moto_server/werkzeug_app.py
@@ -17,7 +17,8 @@ except ImportError:
 
 import moto.backend_index as backend_index
 import moto.backends as backends
-from moto.core import DEFAULT_ACCOUNT_ID, BackendDict
+from moto.core import DEFAULT_ACCOUNT_ID
+from moto.core.base_backend import BackendDict
 from moto.core.utils import convert_to_flask_response
 
 from .utilities import AWSTestHelper, RegexConverter
@@ -56,15 +57,10 @@ class DomainDispatcherApplication:
     value. We'll match the host header value with the url_bases of each backend.
     """
 
-    def __init__(
-        self,
-        create_app: Callable[[backends.SERVICE_NAMES], Flask],
-        service: Optional[str] = None,
-    ):
+    def __init__(self, create_app: Callable[[backends.SERVICE_NAMES], Flask]):
         self.create_app = create_app
         self.lock = Lock()
         self.app_instances: Dict[str, Flask] = {}
-        self.service = service
         self.backend_url_patterns = backend_index.backend_url_patterns
 
     def get_backend_for_host(self, host: str) -> Any:
@@ -72,9 +68,6 @@ class DomainDispatcherApplication:
         if host == "moto_api":
             return host
 
-        if self.service:
-            return self.service
-
         if host in backends.list_of_moto_modules():
             return host
 
diff --git a/moto/mq/models.py b/moto/mq/models.py
index 1a2623f16..9f3afe195 100644
--- a/moto/mq/models.py
+++ b/moto/mq/models.py
@@ -3,7 +3,8 @@ from typing import Any, Dict, Iterable, List, Optional, Tuple
 
 import xmltodict
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/neptune/models.py b/moto/neptune/models.py
index ecb3d8d25..0023cf7bd 100644
--- a/moto/neptune/models.py
+++ b/moto/neptune/models.py
@@ -4,7 +4,8 @@ from typing import Any, Dict, List, Optional
 
 from jinja2 import Template
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.utils import load_resource
diff --git a/moto/opensearch/models.py b/moto/opensearch/models.py
index 60e5a845a..1b58b2183 100644
--- a/moto/opensearch/models.py
+++ b/moto/opensearch/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.utilities.tagging_service import TaggingService
 
 from .data import compatible_versions
diff --git a/moto/opsworks/models.py b/moto/opsworks/models.py
index a717ff261..497b91a58 100644
--- a/moto/opsworks/models.py
+++ b/moto/opsworks/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 from moto.ec2 import ec2_backends
 from moto.moto_api._internal import mock_random as random
@@ -89,7 +90,7 @@ class OpsworkInstance(BaseModel):
         attributes
         """
         if self.instance is None:
-            reservation = self.ec2_backend.add_instances(
+            reservation = self.ec2_backend.run_instances(
                 image_id=self.ami_id,
                 count=1,
                 user_data="",
diff --git a/moto/organizations/models.py b/moto/organizations/models.py
index 9ca8bb780..639c9a28f 100644
--- a/moto/organizations/models.py
+++ b/moto/organizations/models.py
@@ -2,7 +2,8 @@ import json
 import re
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.exceptions import RESTError
 from moto.core.utils import unix_time, utcnow
 from moto.organizations import utils
diff --git a/moto/panorama/models.py b/moto/panorama/models.py
index db81af483..4090fc241 100644
--- a/moto/panorama/models.py
+++ b/moto/panorama/models.py
@@ -5,7 +5,8 @@ from typing import Any, Dict, List, Optional, Union
 
 from dateutil.tz import tzutc
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal.managed_state_model import ManagedState
 from moto.panorama.utils import deep_convert_datetime_to_isoformat, hash_device_name
 from moto.utilities.paginator import paginate
diff --git a/moto/personalize/models.py b/moto/personalize/models.py
index 46f3de006..8936fb296 100644
--- a/moto/personalize/models.py
+++ b/moto/personalize/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, Iterable
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 
 from .exceptions import ResourceNotFoundException
diff --git a/moto/pinpoint/models.py b/moto/pinpoint/models.py
index c0817b3f8..c83189b60 100644
--- a/moto/pinpoint/models.py
+++ b/moto/pinpoint/models.py
@@ -1,7 +1,8 @@
 from datetime import datetime
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/polly/models.py b/moto/polly/models.py
index 063099743..35622b7b2 100644
--- a/moto/polly/models.py
+++ b/moto/polly/models.py
@@ -2,7 +2,8 @@ import datetime
 from typing import Any, Dict, List, Optional
 from xml.etree import ElementTree as ET
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .resources import VOICE_DATA
 from .utils import make_arn_for_lexicon
diff --git a/moto/quicksight/models.py b/moto/quicksight/models.py
index 2d1c15bf0..76fd74e62 100644
--- a/moto/quicksight/models.py
+++ b/moto/quicksight/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, Iterable
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random as random
 
 from .exceptions import ResourceNotFoundException
diff --git a/moto/ram/models.py b/moto/ram/models.py
index 150c8225d..7499dd43e 100644
--- a/moto/ram/models.py
+++ b/moto/ram/models.py
@@ -2,7 +2,8 @@ import re
 import string
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time, utcnow
 from moto.moto_api._internal import mock_random as random
 from moto.organizations.models import OrganizationsBackend, organizations_backends
diff --git a/moto/rds/models.py b/moto/rds/models.py
index 250330b5c..8a9100574 100644
--- a/moto/rds/models.py
+++ b/moto/rds/models.py
@@ -8,7 +8,8 @@ from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple, Un
 
 from jinja2 import Template
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.ec2.models import ec2_backends
 from moto.moto_api._internal import mock_random as random
diff --git a/moto/rdsdata/models.py b/moto/rdsdata/models.py
index c7cd01332..17ad7453f 100644
--- a/moto/rdsdata/models.py
+++ b/moto/rdsdata/models.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 
 class QueryResults:
diff --git a/moto/redshift/models.py b/moto/redshift/models.py
index 104fb783e..3383342c1 100644
--- a/moto/redshift/models.py
+++ b/moto/redshift/models.py
@@ -5,7 +5,8 @@ from typing import Any, Dict, Iterable, List, Optional
 
 from dateutil.tz import tzutc
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.ec2 import ec2_backends
 from moto.ec2.models.security_groups import SecurityGroup as EC2SecurityGroup
diff --git a/moto/redshiftdata/models.py b/moto/redshiftdata/models.py
index 75673f21f..61e689d0f 100644
--- a/moto/redshiftdata/models.py
+++ b/moto/redshiftdata/models.py
@@ -2,7 +2,7 @@ import re
 from datetime import datetime
 from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.utils import iso_8601_datetime_without_milliseconds
 from moto.moto_api._internal import mock_random as random
 from moto.redshiftdata.exceptions import ResourceNotFoundException, ValidationException
diff --git a/moto/rekognition/models.py b/moto/rekognition/models.py
index aff6e3687..d526738f4 100644
--- a/moto/rekognition/models.py
+++ b/moto/rekognition/models.py
@@ -3,7 +3,7 @@
 import string
 from typing import Any, Dict, List, Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.moto_api._internal import mock_random as random
 
 
diff --git a/moto/resourcegroups/models.py b/moto/resourcegroups/models.py
index 7760dac00..1e05ce80d 100644
--- a/moto/resourcegroups/models.py
+++ b/moto/resourcegroups/models.py
@@ -2,7 +2,8 @@ import json
 import re
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import BadRequestException
 
diff --git a/moto/resourcegroupstaggingapi/models.py b/moto/resourcegroupstaggingapi/models.py
index 74e6b81bc..d870d320b 100644
--- a/moto/resourcegroupstaggingapi/models.py
+++ b/moto/resourcegroupstaggingapi/models.py
@@ -2,7 +2,7 @@ from typing import Any, Dict, Iterator, List, Optional, Tuple
 
 from moto.acm.models import AWSCertificateManagerBackend, acm_backends
 from moto.awslambda.models import LambdaBackend, lambda_backends
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.core.exceptions import RESTError
 from moto.ec2 import ec2_backends
 from moto.ecs.models import EC2ContainerServiceBackend, ecs_backends
diff --git a/moto/robomaker/models.py b/moto/robomaker/models.py
index 7ceb1302b..f1feacc94 100644
--- a/moto/robomaker/models.py
+++ b/moto/robomaker/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, Iterable, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 
 
diff --git a/moto/route53/models.py b/moto/route53/models.py
index 409d992ff..408d9cfe2 100644
--- a/moto/route53/models.py
+++ b/moto/route53/models.py
@@ -9,7 +9,8 @@ from typing import Any, Dict, List, Optional, Tuple
 
 from jinja2 import Template
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.moto_api._internal import mock_random as random
 from moto.route53.exceptions import (
     DnsNameInvalidForZone,
diff --git a/moto/route53resolver/models.py b/moto/route53resolver/models.py
index bb78713a2..4513e2512 100644
--- a/moto/route53resolver/models.py
+++ b/moto/route53resolver/models.py
@@ -5,7 +5,8 @@ from datetime import datetime, timezone
 from ipaddress import IPv4Address, ip_address, ip_network
 from typing import Any, Dict, List, Optional, Set
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.ec2 import ec2_backends
 from moto.ec2.exceptions import InvalidSecurityGroupNotFoundError, InvalidSubnetIdError
 from moto.moto_api._internal import mock_random
diff --git a/moto/s3/models.py b/moto/s3/models.py
index 225118c7a..6531d6406 100644
--- a/moto/s3/models.py
+++ b/moto/s3/models.py
@@ -15,9 +15,8 @@ from importlib import reload
 from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, Union
 
 from moto.cloudwatch.models import MetricDatum
-from moto.core import (
-    BackendDict,
-    BaseBackend,
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import (
     BaseModel,
     CloudFormationModel,
     CloudWatchMetricProvider,
diff --git a/moto/s3control/models.py b/moto/s3control/models.py
index 53035f4e2..55954b8f5 100644
--- a/moto/s3control/models.py
+++ b/moto/s3control/models.py
@@ -2,7 +2,8 @@ from collections import defaultdict
 from datetime import datetime
 from typing import Any, Dict, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 from moto.s3.exceptions import (
     InvalidPublicAccessBlockConfiguration,
diff --git a/moto/sagemaker/models.py b/moto/sagemaker/models.py
index 06f5896cc..108ab5062 100644
--- a/moto/sagemaker/models.py
+++ b/moto/sagemaker/models.py
@@ -7,7 +7,8 @@ from typing import Any, Dict, Iterable, List, Optional, Union, cast
 
 from dateutil.tz import tzutc
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.sagemaker import validators
 from moto.utilities.paginator import paginate
 
diff --git a/moto/sagemakerruntime/models.py b/moto/sagemakerruntime/models.py
index 26928bcf8..33477dddb 100644
--- a/moto/sagemakerruntime/models.py
+++ b/moto/sagemakerruntime/models.py
@@ -1,6 +1,6 @@
 from typing import Dict, List, Tuple
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 
 class SageMakerRuntimeBackend(BaseBackend):
diff --git a/moto/scheduler/models.py b/moto/scheduler/models.py
index fbbd57f7c..b1ade5c0f 100644
--- a/moto/scheduler/models.py
+++ b/moto/scheduler/models.py
@@ -1,7 +1,8 @@
 """EventBridgeSchedulerBackend class with methods for supported APIs."""
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.utilities.tagging_service import TaggingService
 
diff --git a/moto/sdb/models.py b/moto/sdb/models.py
index 59e05e2c0..eb9829e29 100644
--- a/moto/sdb/models.py
+++ b/moto/sdb/models.py
@@ -4,7 +4,8 @@ from collections import defaultdict
 from threading import Lock
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 
 from .exceptions import InvalidDomainName, UnknownDomainName
 
diff --git a/moto/secretsmanager/models.py b/moto/secretsmanager/models.py
index 9452957f6..e18b3ef99 100644
--- a/moto/secretsmanager/models.py
+++ b/moto/secretsmanager/models.py
@@ -3,7 +3,8 @@ import json
 import time
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcfromtimestamp, utcnow
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/server.py b/moto/server.py
index e02f07312..c93ae11c3 100644
--- a/moto/server.py
+++ b/moto/server.py
@@ -2,7 +2,6 @@ import argparse
 import os
 import signal
 import sys
-import warnings
 from typing import Any, List, Optional
 
 from werkzeug.serving import run_simple
@@ -25,13 +24,6 @@ def main(argv: Optional[List[str]] = None) -> None:
     argv = argv or sys.argv[1:]
     parser = argparse.ArgumentParser()
 
-    # Keep this for backwards compat
-    parser.add_argument(
-        "service",
-        type=str,
-        nargs="?",  # http://stackoverflow.com/a/4480202/731592
-        default=os.environ.get("MOTO_SERVICE"),
-    )
     parser.add_argument(
         "-H", "--host", type=str, help="Which host to bind", default="127.0.0.1"
     )
@@ -74,13 +66,8 @@ def main(argv: Optional[List[str]] = None) -> None:
     except Exception:
         pass  # ignore "ValueError: signal only works in main thread"
 
-    if args.service:
-        warnings.warn(
-            f"The service-argument ({args.service}) is considered deprecated, and will be deprecated in a future release. Please let us know if you have any questions: https://github.com/getmoto/moto/issues"
-        )
-
     # Wrap the main application
-    main_app = DomainDispatcherApplication(create_backend_app, service=args.service)
+    main_app = DomainDispatcherApplication(create_backend_app)
     main_app.debug = True  # type: ignore
 
     ssl_context: Any = None
diff --git a/moto/servicediscovery/models.py b/moto/servicediscovery/models.py
index d4bbe603c..825a25bce 100644
--- a/moto/servicediscovery/models.py
+++ b/moto/servicediscovery/models.py
@@ -1,7 +1,8 @@
 import string
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.moto_api._internal import mock_random as random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/servicequotas/models.py b/moto/servicequotas/models.py
index 5bb5a7eaf..298334e9b 100644
--- a/moto/servicequotas/models.py
+++ b/moto/servicequotas/models.py
@@ -2,7 +2,7 @@
 
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 from .exceptions import NoSuchResource
 from .resources.default_quotas.vpc import VPC_DEFAULT_QUOTAS
diff --git a/moto/ses/models.py b/moto/ses/models.py
index f99452551..e8d26a945 100644
--- a/moto/ses/models.py
+++ b/moto/ses/models.py
@@ -7,7 +7,8 @@ from email.mime.multipart import MIMEMultipart
 from email.utils import formataddr, getaddresses, parseaddr
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import utcnow
 from moto.sns.models import sns_backends
 
diff --git a/moto/sesv2/models.py b/moto/sesv2/models.py
index 489f687f6..73c6f326a 100644
--- a/moto/sesv2/models.py
+++ b/moto/sesv2/models.py
@@ -2,7 +2,8 @@
 
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 
 from ..ses.models import Message, RawMessage, ses_backends
diff --git a/moto/settings.py b/moto/settings.py
index ed85efcfe..263839c81 100644
--- a/moto/settings.py
+++ b/moto/settings.py
@@ -4,13 +4,15 @@ import pathlib
 from functools import lru_cache
 from typing import List, Optional
 
+from moto.core.config import default_user_config
 
-def test_proxy_mode() -> bool:
+
+def is_test_proxy_mode() -> bool:
     return os.environ.get("TEST_PROXY_MODE", "0").lower() == "true"
 
 
 TEST_SERVER_MODE = os.environ.get("TEST_SERVER_MODE", "0").lower() == "true"
-TEST_DECORATOR_MODE = not TEST_SERVER_MODE and not test_proxy_mode()
+TEST_DECORATOR_MODE = not TEST_SERVER_MODE and not is_test_proxy_mode()
 
 INITIAL_NO_AUTH_ACTION_COUNT = float(
     os.environ.get("INITIAL_NO_AUTH_ACTION_COUNT", float("inf"))
@@ -177,3 +179,11 @@ def get_cognito_idp_user_pool_id_strategy() -> Optional[str]:
 
 def enable_iso_regions() -> bool:
     return os.environ.get("MOTO_ENABLE_ISO_REGIONS", "false").lower() == "true"
+
+
+def load_iam_aws_managed_policies() -> bool:
+    return (
+        default_user_config.get("iam", {}).get("load_aws_managed_policies", False)
+        is True
+        or os.environ.get("MOTO_IAM_LOAD_MANAGED_POLICIES", "").lower() == "true"
+    )
diff --git a/moto/signer/models.py b/moto/signer/models.py
index d426e20ae..4a85d0f53 100644
--- a/moto/signer/models.py
+++ b/moto/signer/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
 
diff --git a/moto/sns/models.py b/moto/sns/models.py
index 037ebb620..ce09a3303 100644
--- a/moto/sns/models.py
+++ b/moto/sns/models.py
@@ -6,7 +6,8 @@ from typing import Any, Dict, Iterable, List, Optional, Set, Tuple
 
 import requests
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.utils import (
     camelcase_to_underscores,
     iso_8601_datetime_with_milliseconds,
diff --git a/moto/sqs/models.py b/moto/sqs/models.py
index 481ca0cb2..ee77bc13e 100644
--- a/moto/sqs/models.py
+++ b/moto/sqs/models.py
@@ -10,7 +10,8 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Tuple
 from urllib.parse import ParseResult
 from xml.sax.saxutils import escape
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import RESTError
 from moto.core.utils import (
     camelcase_to_underscores,
diff --git a/moto/ssm/models.py b/moto/ssm/models.py
index de2c638b4..3e8cbbad6 100644
--- a/moto/ssm/models.py
+++ b/moto/ssm/models.py
@@ -9,7 +9,8 @@ from typing import Any, DefaultDict, Dict, Iterator, List, Optional, Tuple
 
 import yaml
 
-from moto.core import BackendDict, BaseBackend, BaseModel, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel, CloudFormationModel
 from moto.core.exceptions import RESTError
 from moto.core.utils import utcnow
 from moto.ec2 import ec2_backends
diff --git a/moto/ssoadmin/models.py b/moto/ssoadmin/models.py
index fee98d4c7..820a1bbb4 100644
--- a/moto/ssoadmin/models.py
+++ b/moto/ssoadmin/models.py
@@ -1,7 +1,8 @@
 import json
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.iam.aws_managed_policies import aws_managed_policies_data
 from moto.moto_api._internal import mock_random as random
diff --git a/moto/stepfunctions/models.py b/moto/stepfunctions/models.py
index 77e6bb154..7cfa03f18 100644
--- a/moto/stepfunctions/models.py
+++ b/moto/stepfunctions/models.py
@@ -6,7 +6,8 @@ from typing import Any, Dict, Iterable, List, Optional, Pattern
 from dateutil.tz import tzlocal
 
 from moto import settings
-from moto.core import BackendDict, BaseBackend, CloudFormationModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import CloudFormationModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.moto_api._internal import mock_random
 from moto.utilities.paginator import paginate
diff --git a/moto/sts/models.py b/moto/sts/models.py
index 5d17cdadc..d6a3351ea 100644
--- a/moto/sts/models.py
+++ b/moto/sts/models.py
@@ -5,7 +5,8 @@ from typing import Any, Dict, List, Optional, Tuple
 
 import xmltodict
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
 from moto.iam.models import AccessKey, iam_backends
 from moto.sts.utils import (
diff --git a/moto/support/models.py b/moto/support/models.py
index a6279fd7e..524f814c4 100644
--- a/moto/support/models.py
+++ b/moto/support/models.py
@@ -1,7 +1,7 @@
 import datetime
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 from moto.moto_api._internal import mock_random as random
 from moto.moto_api._internal.managed_state_model import ManagedState
 from moto.utilities.utils import load_resource
diff --git a/moto/swf/models/__init__.py b/moto/swf/models/__init__.py
index 694310f43..6e13dcc31 100644
--- a/moto/swf/models/__init__.py
+++ b/moto/swf/models/__init__.py
@@ -1,7 +1,7 @@
 from time import sleep
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend
+from moto.core.base_backend import BackendDict, BaseBackend
 
 from ..exceptions import (
     SWFDomainAlreadyExistsFault,
diff --git a/moto/swf/models/activity_task.py b/moto/swf/models/activity_task.py
index c24b92360..744f93bc7 100644
--- a/moto/swf/models/activity_task.py
+++ b/moto/swf/models/activity_task.py
@@ -1,6 +1,6 @@
 from typing import TYPE_CHECKING, Any, Dict, Optional
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time, utcnow
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/swf/models/decision_task.py b/moto/swf/models/decision_task.py
index bb7cb6ed9..f4f75fe3a 100644
--- a/moto/swf/models/decision_task.py
+++ b/moto/swf/models/decision_task.py
@@ -1,6 +1,6 @@
 from typing import TYPE_CHECKING, Any, Dict, Optional
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time, utcnow
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/swf/models/domain.py b/moto/swf/models/domain.py
index ae368069c..c188789ee 100644
--- a/moto/swf/models/domain.py
+++ b/moto/swf/models/domain.py
@@ -1,7 +1,7 @@
 from collections import defaultdict
 from typing import TYPE_CHECKING, Any, Dict, List, Optional
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 
 from ..exceptions import (
     SWFUnknownResourceFault,
diff --git a/moto/swf/models/generic_type.py b/moto/swf/models/generic_type.py
index 681956b4f..daf7888d9 100644
--- a/moto/swf/models/generic_type.py
+++ b/moto/swf/models/generic_type.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, List, TypeVar
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.core.utils import camelcase_to_underscores
 
 
diff --git a/moto/swf/models/history_event.py b/moto/swf/models/history_event.py
index 12122de7e..f79c0db00 100644
--- a/moto/swf/models/history_event.py
+++ b/moto/swf/models/history_event.py
@@ -1,6 +1,6 @@
 from typing import Any, Dict, Optional
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.core.utils import underscores_to_camelcase, unix_time
 
 from ..utils import decapitalize
diff --git a/moto/swf/models/timeout.py b/moto/swf/models/timeout.py
index de86fe38c..6e3645708 100644
--- a/moto/swf/models/timeout.py
+++ b/moto/swf/models/timeout.py
@@ -1,6 +1,6 @@
 from typing import Any
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 
 
diff --git a/moto/swf/models/timer.py b/moto/swf/models/timer.py
index 1634432ce..4d6694cbf 100644
--- a/moto/swf/models/timer.py
+++ b/moto/swf/models/timer.py
@@ -1,6 +1,6 @@
 from threading import Timer as ThreadingTimer
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 
 
 class Timer(BaseModel):
diff --git a/moto/swf/models/workflow_execution.py b/moto/swf/models/workflow_execution.py
index fb01a48bb..5918fb749 100644
--- a/moto/swf/models/workflow_execution.py
+++ b/moto/swf/models/workflow_execution.py
@@ -2,7 +2,7 @@ from threading import Lock
 from threading import Timer as ThreadingTimer
 from typing import Any, Dict, Iterable, List, Optional
 
-from moto.core import BaseModel
+from moto.core.common_models import BaseModel
 from moto.core.utils import camelcase_to_underscores, unix_time
 from moto.moto_api._internal import mock_random
 
diff --git a/moto/textract/models.py b/moto/textract/models.py
index 1cc2dd9f5..11078421d 100644
--- a/moto/textract/models.py
+++ b/moto/textract/models.py
@@ -1,7 +1,8 @@
 from collections import defaultdict
 from typing import Any, Dict, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 
 from .exceptions import InvalidJobIdException, InvalidParameterException
diff --git a/moto/timestreamwrite/models.py b/moto/timestreamwrite/models.py
index 6d6a7a665..695bf8c73 100644
--- a/moto/timestreamwrite/models.py
+++ b/moto/timestreamwrite/models.py
@@ -1,6 +1,7 @@
 from typing import Any, Dict, Iterable, List
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import unix_time
 from moto.utilities.tagging_service import TaggingService
 
diff --git a/moto/transcribe/models.py b/moto/transcribe/models.py
index d4c4141c4..6d40ace83 100644
--- a/moto/transcribe/models.py
+++ b/moto/transcribe/models.py
@@ -2,7 +2,8 @@ import re
 from datetime import datetime, timedelta
 from typing import Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.moto_api._internal import mock_random
 from moto.moto_api._internal.managed_state_model import ManagedState
 
diff --git a/moto/wafv2/models.py b/moto/wafv2/models.py
index 6e02e6639..f3b24076e 100644
--- a/moto/wafv2/models.py
+++ b/moto/wafv2/models.py
@@ -2,7 +2,8 @@ import re
 from collections import OrderedDict
 from typing import TYPE_CHECKING, Any, Dict, List, Optional
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.utils import iso_8601_datetime_with_milliseconds
 from moto.moto_api._internal import mock_random
 from moto.utilities.tagging_service import TaggingService
diff --git a/moto/xray/models.py b/moto/xray/models.py
index 8940e6855..194e3b001 100644
--- a/moto/xray/models.py
+++ b/moto/xray/models.py
@@ -4,7 +4,8 @@ import json
 from collections import defaultdict
 from typing import Any, Dict, List, Optional, Tuple
 
-from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.core.base_backend import BackendDict, BaseBackend
+from moto.core.common_models import BaseModel
 from moto.core.exceptions import AWSError
 
 from .exceptions import BadSegmentException
diff --git a/setup.cfg b/setup.cfg
index 6ffef474b..97ddf15fd 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -27,13 +27,13 @@ project_urls =
 python_requires = >=3.8
 install_requires =
     boto3>=1.9.201
-    botocore>=1.13.46
+    botocore>=1.14.0
     cryptography>=3.3.1
     requests>=2.5
     xmltodict
     werkzeug>=0.5,!=2.2.0,!=2.2.1
     python-dateutil<3.0.0,>=2.1
-    responses>=0.13.0
+    responses>=0.15.0
     Jinja2>=2.10.1
 package_dir =
     moto = moto


Test patch:
diff --git a/.github/workflows/test_outdated_versions.yml b/.github/workflows/test_outdated_versions.yml
index f6cf99322..155b275f9 100644
--- a/.github/workflows/test_outdated_versions.yml
+++ b/.github/workflows/test_outdated_versions.yml
@@ -13,8 +13,9 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
+        botocore: ["--upgrade boto3 botocore", "boto3==1.11.0 botocore==1.14.0"]
         python-version: [ "3.11" ]
-        responses-version: ["0.13.0", "0.15.0", "0.17.0", "0.19.0", "0.20.0" ]
+        responses-version: ["0.15.0", "0.17.0", "0.19.0", "0.20.0" ]
         werkzeug-version: ["2.0.1", "2.1.1", "2.2.2"]
         openapi-spec-validator-version: ["0.5.0"]
 
@@ -38,6 +39,7 @@ jobs:
         pip install flask==${{ matrix.werkzeug-version }}
         pip install werkzeug==${{ matrix.werkzeug-version }}
         pip install openapi-spec-validator==${{ matrix.openapi-spec-validator-version }}
+        pip install ${{ matrix.botocore }}
 
     - name: Run tests
       run: |
@@ -65,6 +67,6 @@ jobs:
       if: always()
       uses: actions/upload-artifact@v4
       with:
-        name: test-${{ matrix.responses-version }}-${{ matrix.werkzeug-version }}-${{ matrix.werkzeug-version }}-${{ matrix.openapi-spec-validator-version }}
+        name: test-${{ matrix.responses-version }}-${{ matrix.werkzeug-version }}-${{ matrix.werkzeug-version }}-${{ matrix.openapi-spec-validator-version }}-${{ matrix.botocore }}
         path: |
           serverlogs/*
diff --git a/tests/test_awslambda/test_lambda.py b/tests/test_awslambda/test_lambda.py
index 5476728fd..3bcffa387 100644
--- a/tests/test_awslambda/test_lambda.py
+++ b/tests/test_awslambda/test_lambda.py
@@ -2,6 +2,7 @@ import base64
 import hashlib
 import json
 import os
+import sys
 from unittest import SkipTest, mock
 from uuid import uuid4
 
@@ -12,6 +13,7 @@ from freezegun import freeze_time
 
 from moto import mock_aws, settings
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from moto.utilities.distutils_version import LooseVersion
 from tests.test_ecr.test_ecr_helpers import _create_image_manifest
 
 from . import lambda_aws_verified
@@ -28,6 +30,8 @@ PYTHON_VERSION = "python3.11"
 LAMBDA_FUNC_NAME = "test"
 _lambda_region = "us-west-2"
 
+boto3_version = sys.modules["botocore"].__version__
+
 
 @mock.patch.dict("os.environ", {"MOTO_ENABLE_ISO_REGIONS": "true"})
 @pytest.mark.parametrize("region", ["us-west-2", "cn-northwest-1", "us-isob-east-1"])
@@ -35,6 +39,8 @@ _lambda_region = "us-west-2"
 def test_lambda_regions(region):
     if not settings.TEST_DECORATOR_MODE:
         raise SkipTest("Can only set EnvironVars in DecoratorMode")
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("ISO-region not available in older versions")
     client = boto3.client("lambda", region_name=region)
     resp = client.list_functions()
     assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200
@@ -43,6 +49,8 @@ def test_lambda_regions(region):
 @pytest.mark.aws_verified
 @lambda_aws_verified
 def test_list_functions(iam_role_arn=None):
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     sts = boto3.client("sts", "eu-west-2")
     account_id = sts.get_caller_identity()["Account"]
 
@@ -70,7 +78,9 @@ def test_list_functions(iam_role_arn=None):
     func_list = conn.list_functions()["Functions"]
     our_functions = [f for f in func_list if f["FunctionName"] == function_name]
     assert len(our_functions) == 1
-    assert our_functions[0]["PackageType"] == "Zip"
+    if LooseVersion(boto3_version) > LooseVersion("1.29.0"):
+        # PackageType only available in new versions
+        assert our_functions[0]["PackageType"] == "Zip"
 
     # FunctionVersion=ALL means we should get a list of all versions
     full_list = conn.list_functions(FunctionVersion="ALL")["Functions"]
@@ -127,6 +137,8 @@ def test_create_based_on_s3_with_missing_bucket():
 @mock_aws
 @freeze_time("2015-01-01 00:00:00")
 def test_create_function_from_aws_bucket():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     bucket_name = str(uuid4())
     s3_conn = boto3.client("s3", _lambda_region)
     s3_conn.create_bucket(
@@ -169,6 +181,8 @@ def test_create_function_from_aws_bucket():
 @mock_aws
 @freeze_time("2015-01-01 00:00:00")
 def test_create_function_from_zipfile():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     zip_content = get_test_zip_file1()
     function_name = str(uuid4())[0:6]
@@ -218,6 +232,8 @@ def test_create_function_from_zipfile():
 
 @mock_aws
 def test_create_function_from_image():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     function_name = str(uuid4())[0:6]
     image_uri = f"{ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/testlambdaecr:prod"
@@ -237,9 +253,6 @@ def test_create_function_from_image():
         Description="test lambda function",
         ImageConfig=image_config,
         PackageType="Image",
-        Timeout=3,
-        MemorySize=128,
-        Publish=True,
     )
 
     result = conn.get_function(FunctionName=function_name)
@@ -250,6 +263,8 @@ def test_create_function_from_image():
 
 @mock_aws
 def test_create_function_from_image_default_working_directory():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     function_name = str(uuid4())[0:6]
     image_uri = f"{ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/testlambdaecr:prod"
@@ -268,9 +283,6 @@ def test_create_function_from_image_default_working_directory():
         Description="test lambda function",
         ImageConfig=image_config,
         PackageType="Image",
-        Timeout=3,
-        MemorySize=128,
-        Publish=True,
     )
 
     result = conn.get_function(FunctionName=function_name)
@@ -281,6 +293,8 @@ def test_create_function_from_image_default_working_directory():
 
 @mock_aws
 def test_create_function_error_bad_architecture():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     function_name = str(uuid4())[0:6]
     image_uri = f"{ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/testlambdaecr:prod"
@@ -291,10 +305,6 @@ def test_create_function_error_bad_architecture():
             FunctionName=function_name,
             Role=get_role_name(),
             Code={"ImageUri": image_uri},
-            Description="test lambda function",
-            Timeout=3,
-            MemorySize=128,
-            Publish=True,
         )
 
     err = exc.value.response
@@ -310,6 +320,8 @@ def test_create_function_error_bad_architecture():
 
 @mock_aws
 def test_create_function_error_ephemeral_too_big():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     function_name = str(uuid4())[0:6]
     image_uri = f"{ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/testlambdaecr:prod"
@@ -405,6 +417,8 @@ def ecr_repo_fixture():
 
 @mock_aws
 def test_create_function_from_stubbed_ecr():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     lambda_client = boto3.client("lambda", "us-east-1")
     fn_name = str(uuid4())[0:6]
     image_uri = "111122223333.dkr.ecr.us-east-1.amazonaws.com/testlambda:latest"
@@ -440,6 +454,8 @@ def test_create_function_from_stubbed_ecr():
 def test_create_function_from_mocked_ecr_image_tag(
     with_ecr_mock,
 ):  # pylint: disable=unused-argument
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     if not settings.TEST_DECORATOR_MODE:
         raise SkipTest(
             "Envars not easily set in server mode, feature off by default, skipping..."
@@ -482,6 +498,8 @@ def test_create_function_from_mocked_ecr_image_tag(
 def test_create_function_from_mocked_ecr_image_digest(
     with_ecr_mock,
 ):  # pylint: disable=unused-argument
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     if not settings.TEST_DECORATOR_MODE:
         raise SkipTest(
             "Envars not easily set in server mode, feature off by default, skipping..."
@@ -509,6 +527,8 @@ def test_create_function_from_mocked_ecr_image_digest(
 def test_create_function_from_mocked_ecr_missing_image(
     with_ecr_mock,
 ):  # pylint: disable=unused-argument
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     if not settings.TEST_DECORATOR_MODE:
         raise SkipTest(
             "Envars not easily set in server mode, feature off by default, skipping..."
@@ -696,6 +716,8 @@ def test_get_function_configuration(key):
 @pytest.mark.parametrize("key", ["FunctionName", "FunctionArn"])
 @mock_aws
 def test_get_function_code_signing_config(key):
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     bucket_name = str(uuid4())
     s3_conn = boto3.client("s3", _lambda_region)
     s3_conn.create_bucket(
@@ -929,6 +951,8 @@ def test_list_create_list_get_delete_list():
     test `list -> create -> list -> get -> delete -> list` integration
 
     """
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     bucket_name = str(uuid4())
     s3_conn = boto3.client("s3", _lambda_region)
     s3_conn.create_bucket(
@@ -1055,9 +1079,6 @@ def test_get_function_created_with_zipfile():
         Handler="lambda_function.handler",
         Code={"ZipFile": zip_content},
         Description="test lambda function",
-        Timeout=3,
-        MemorySize=128,
-        Publish=True,
     )
 
     response = conn.get_function(FunctionName=function_name)
@@ -1503,6 +1524,8 @@ def test_update_function_s3():
 
 @mock_aws
 def test_update_function_ecr():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     function_name = str(uuid4())[0:6]
     image_uri = f"{ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/testlambdaecr:prod"
diff --git a/tests/test_awslambda/test_lambda_function_urls.py b/tests/test_awslambda/test_lambda_function_urls.py
index f583332e4..37e875c17 100644
--- a/tests/test_awslambda/test_lambda_function_urls.py
+++ b/tests/test_awslambda/test_lambda_function_urls.py
@@ -1,3 +1,5 @@
+import sys
+from unittest import SkipTest
 from uuid import uuid4
 
 import boto3
@@ -5,15 +7,20 @@ import pytest
 from botocore.exceptions import ClientError
 
 from moto import mock_aws
+from moto.utilities.distutils_version import LooseVersion
 
 from .utilities import get_role_name, get_test_zip_file1
 
 PYTHON_VERSION = "python3.11"
 
+boto3_version = sys.modules["botocore"].__version__
+
 
 @mock_aws
 @pytest.mark.parametrize("key", ["FunctionName", "FunctionArn"])
 def test_create_function_url_config(key):
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     client = boto3.client("lambda", "us-east-2")
     function_name = str(uuid4())[0:6]
     fxn = client.create_function(
@@ -40,6 +47,8 @@ def test_create_function_url_config(key):
 
 @mock_aws
 def test_create_function_url_config_with_cors():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     client = boto3.client("lambda", "us-east-2")
     function_name = str(uuid4())[0:6]
     fxn = client.create_function(
@@ -75,6 +84,8 @@ def test_create_function_url_config_with_cors():
 
 @mock_aws
 def test_update_function_url_config_with_cors():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     client = boto3.client("lambda", "us-east-2")
     function_name = str(uuid4())[0:6]
     fxn = client.create_function(
@@ -108,6 +119,8 @@ def test_update_function_url_config_with_cors():
 @mock_aws
 @pytest.mark.parametrize("key", ["FunctionName", "FunctionArn"])
 def test_delete_function_url_config(key):
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     client = boto3.client("lambda", "us-east-2")
     function_name = str(uuid4())[0:6]
     fxn = client.create_function(
diff --git a/tests/test_awslambda/test_lambda_invoke.py b/tests/test_awslambda/test_lambda_invoke.py
index c1e2aadd4..0d6ed9a01 100644
--- a/tests/test_awslambda/test_lambda_invoke.py
+++ b/tests/test_awslambda/test_lambda_invoke.py
@@ -345,7 +345,7 @@ def test_invoke_function_large_response():
 
 @mock_aws
 def test_invoke_lambda_with_proxy():
-    if not settings.test_proxy_mode():
+    if not settings.is_test_proxy_mode():
         raise SkipTest("We only want to test this in ProxyMode")
 
     conn = boto3.resource("ec2", _lambda_region)
diff --git a/tests/test_awslambda/test_lambda_layers.py b/tests/test_awslambda/test_lambda_layers.py
index 701adb915..5e751997c 100644
--- a/tests/test_awslambda/test_lambda_layers.py
+++ b/tests/test_awslambda/test_lambda_layers.py
@@ -1,4 +1,5 @@
 import os
+import sys
 from unittest import SkipTest, mock
 from uuid import uuid4
 
@@ -9,12 +10,15 @@ from freezegun import freeze_time
 
 from moto import mock_aws, settings
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from moto.utilities.distutils_version import LooseVersion
 
 from .utilities import get_role_name, get_test_zip_file1
 
 PYTHON_VERSION = "python3.11"
 _lambda_region = "us-west-2"
 
+boto3_version = sys.modules["botocore"].__version__
+
 
 @mock_aws
 def test_publish_lambda_layers__without_content():
@@ -50,6 +54,8 @@ def test_publish_layer_with_unknown_s3_file():
 @mock_aws
 @freeze_time("2015-01-01 00:00:00")
 def test_get_lambda_layers():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     bucket_name = str(uuid4())
     s3_conn = boto3.client("s3", _lambda_region)
     s3_conn.create_bucket(
@@ -152,6 +158,8 @@ def test_get_lambda_layers():
 
 @mock_aws
 def test_get_layer_version():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     bucket_name = str(uuid4())
     s3_conn = boto3.client("s3", _lambda_region)
     s3_conn.create_bucket(
diff --git a/tests/test_awslambda/test_lambda_policy.py b/tests/test_awslambda/test_lambda_policy.py
index df038282d..524f28254 100644
--- a/tests/test_awslambda/test_lambda_policy.py
+++ b/tests/test_awslambda/test_lambda_policy.py
@@ -1,4 +1,6 @@
 import json
+import sys
+from unittest import SkipTest
 from uuid import uuid4
 
 import boto3
@@ -7,12 +9,15 @@ from botocore.exceptions import ClientError
 
 from moto import mock_aws
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from moto.utilities.distutils_version import LooseVersion
 
 from .utilities import get_role_name, get_test_zip_file1, get_test_zip_file2
 
 PYTHON_VERSION = "python3.11"
 _lambda_region = "us-west-2"
 
+boto3_version = sys.modules["botocore"].__version__
+
 
 @pytest.mark.parametrize("key", ["FunctionName", "FunctionArn"])
 @mock_aws
@@ -51,6 +56,8 @@ def test_add_function_permission(key):
 
 @mock_aws
 def test_add_permission_with_principalorgid():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     conn = boto3.client("lambda", _lambda_region)
     zip_content = get_test_zip_file1()
     function_name = str(uuid4())[0:6]
diff --git a/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py b/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py
index d6c37aa67..7706a0286 100644
--- a/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py
+++ b/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py
@@ -1,6 +1,7 @@
 import copy
 import json
 import os
+import sys
 from collections import OrderedDict
 from datetime import datetime, timedelta, timezone
 from unittest import SkipTest
@@ -12,11 +13,14 @@ from botocore.exceptions import ClientError
 from moto import mock_aws, settings
 from moto.cloudformation import cloudformation_backends
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from moto.utilities.distutils_version import LooseVersion
 from tests import EXAMPLE_AMI_ID
 
 TEST_STACK_NAME = "test_stack"
 REGION_NAME = "us-east-1"
 
+boto3_version = sys.modules["botocore"].__version__
+
 dummy_template = {
     "AWSTemplateFormatVersion": "2010-09-09",
     "Description": "Stack 1",
@@ -367,7 +371,9 @@ def test_describe_stack_instances():
     for instance in [use1_instance, usw2_instance]:
         assert instance["Account"] == ACCOUNT_ID
         assert instance["Status"] == "CURRENT"
-        assert instance["StackInstanceStatus"] == {"DetailedStatus": "SUCCEEDED"}
+        if LooseVersion(boto3_version) > LooseVersion("1.29.0"):
+            # "Parameters only available in newer versions"
+            assert instance["StackInstanceStatus"] == {"DetailedStatus": "SUCCEEDED"}
 
 
 @mock_aws
@@ -1615,6 +1621,8 @@ def test_delete_change_set():
 
 @mock_aws
 def test_create_change_set_twice__no_changes():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     cf_client = boto3.client("cloudformation", region_name=REGION_NAME)
 
     # Execute once
@@ -1646,6 +1654,8 @@ def test_create_change_set_twice__no_changes():
 
 @mock_aws
 def test_create_change_set_twice__using_s3__no_changes():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameters only available in newer versions")
     cf_client = boto3.client("cloudformation", region_name=REGION_NAME)
     s3 = boto3.client("s3", region_name=REGION_NAME)
     s3_conn = boto3.resource("s3", region_name=REGION_NAME)
diff --git a/tests/test_cloudformation/test_cloudformation_stack_integration.py b/tests/test_cloudformation/test_cloudformation_stack_integration.py
index 534ec31f7..3be5d3083 100644
--- a/tests/test_cloudformation/test_cloudformation_stack_integration.py
+++ b/tests/test_cloudformation/test_cloudformation_stack_integration.py
@@ -1,5 +1,6 @@
 import io
 import json
+import sys
 import zipfile
 from decimal import Decimal
 from string import Template
@@ -10,10 +11,13 @@ from botocore.exceptions import ClientError
 
 from moto import mock_aws
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from moto.utilities.distutils_version import LooseVersion
 from tests import EXAMPLE_AMI_ID, EXAMPLE_AMI_ID2
 from tests.markers import requires_docker
 from tests.test_cloudformation.fixtures import fn_join, single_instance_with_ebs_volume
 
+boto3_version = sys.modules["botocore"].__version__
+
 
 @mock_aws
 def test_create_template_without_required_param_boto3():
@@ -274,18 +278,19 @@ def lambda_handler(event, context):
     lambda_conn = boto3.client("lambda", region)
     result = lambda_conn.list_layers()
     layer_name = result["Layers"][0]["LayerName"]
-    result = lambda_conn.list_layer_versions(LayerName=layer_name)
-    result["LayerVersions"][0].pop("CreatedDate")
-    assert result["LayerVersions"] == [
-        {
-            "Version": 1,
-            "LayerVersionArn": f"arn:aws:lambda:{region}:{ACCOUNT_ID}:layer:{layer_name}:1",
-            "CompatibleRuntimes": ["python2.7", "python3.6"],
-            "Description": "Test Layer",
-            "LicenseInfo": "MIT",
-            "CompatibleArchitectures": [],
-        }
-    ]
+    lv = lambda_conn.list_layer_versions(LayerName=layer_name)["LayerVersions"][0]
+
+    assert lv["Version"] == 1
+    assert (
+        lv["LayerVersionArn"]
+        == f"arn:aws:lambda:{region}:{ACCOUNT_ID}:layer:{layer_name}:1"
+    )
+    assert lv["CompatibleRuntimes"] == ["python2.7", "python3.6"]
+    assert lv["Description"] == "Test Layer"
+    assert lv["LicenseInfo"] == "MIT"
+    if LooseVersion(boto3_version) > LooseVersion("1.29.0"):
+        # "Parameters only available in newer versions"
+        assert lv["CompatibleArchitectures"] == []
 
 
 @mock_aws
diff --git a/tests/test_core/test_auth.py b/tests/test_core/test_auth.py
index 4813fb420..9dedf9040 100644
--- a/tests/test_core/test_auth.py
+++ b/tests/test_core/test_auth.py
@@ -1,5 +1,7 @@
 import json
+import sys
 from typing import Any, Dict, Optional
+from unittest import SkipTest
 from uuid import uuid4
 
 import boto3
@@ -9,6 +11,9 @@ from botocore.exceptions import ClientError
 from moto import mock_aws
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
 from moto.core import set_initial_no_auth_action_count
+from moto.utilities.distutils_version import LooseVersion
+
+boto3_version = sys.modules["botocore"].__version__
 
 
 @mock_aws
@@ -191,6 +196,8 @@ def test_invalid_client_token_id() -> None:
 @set_initial_no_auth_action_count(0)
 @mock_aws
 def test_auth_failure() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     client = boto3.client(
         "ec2",
         region_name="us-east-1",
@@ -230,6 +237,8 @@ def test_signature_does_not_match() -> None:
 @set_initial_no_auth_action_count(2)
 @mock_aws
 def test_auth_failure_with_valid_access_key_id() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     access_key = create_user_with_access_key()
     client = boto3.client(
         "ec2",
@@ -250,6 +259,8 @@ def test_auth_failure_with_valid_access_key_id() -> None:
 @set_initial_no_auth_action_count(2)
 @mock_aws
 def test_access_denied_with_no_policy() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     user_name = "test-user"
     access_key = create_user_with_access_key(user_name)
     client = boto3.client(
@@ -271,6 +282,8 @@ def test_access_denied_with_no_policy() -> None:
 @set_initial_no_auth_action_count(3)
 @mock_aws
 def test_access_denied_with_not_allowing_policy() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     user_name = "test-user"
     inline_policy_document = {
         "Version": "2012-10-17",
@@ -339,6 +352,8 @@ def test_access_denied_explicitly_on_specific_resource() -> None:
 @set_initial_no_auth_action_count(3)
 @mock_aws
 def test_access_denied_for_run_instances() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     # https://github.com/getmoto/moto/issues/2774
     # The run-instances method was broken between botocore versions 1.15.8 and 1.15.12
     # This was due to the inclusion of '"idempotencyToken":true' in the response, somehow altering the signature and breaking the authentication
@@ -372,6 +387,8 @@ def test_access_denied_for_run_instances() -> None:
 @set_initial_no_auth_action_count(3)
 @mock_aws
 def test_access_denied_with_denying_policy() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     user_name = "test-user"
     inline_policy_document = {
         "Version": "2012-10-17",
@@ -533,6 +550,8 @@ def test_s3_access_denied_with_denying_inline_group_policy() -> None:
 @set_initial_no_auth_action_count(10)
 @mock_aws
 def test_access_denied_with_many_irrelevant_policies() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     user_name = "test-user"
     inline_policy_document = {
         "Version": "2012-10-17",
diff --git a/tests/test_core/test_backenddict.py b/tests/test_core/test_backenddict.py
index 0d1ed0984..1dffd15ac 100644
--- a/tests/test_core/test_backenddict.py
+++ b/tests/test_core/test_backenddict.py
@@ -6,8 +6,8 @@ from typing import Any, List, Optional
 import pytest
 
 from moto.autoscaling.models import AutoScalingBackend
-from moto.core import DEFAULT_ACCOUNT_ID, BackendDict, BaseBackend
-from moto.core.base_backend import AccountSpecificBackend
+from moto.core import DEFAULT_ACCOUNT_ID
+from moto.core.base_backend import AccountSpecificBackend, BackendDict, BaseBackend
 from moto.ec2.models import EC2Backend
 from moto.elbv2.models import ELBv2Backend
 
diff --git a/tests/test_core/test_ec2_vpc_endpoint_services.py b/tests/test_core/test_ec2_vpc_endpoint_services.py
index b804da1f1..9b0ce6515 100644
--- a/tests/test_core/test_ec2_vpc_endpoint_services.py
+++ b/tests/test_core/test_ec2_vpc_endpoint_services.py
@@ -3,11 +3,16 @@
 #
 # There are some issues with running these tests in parallel
 # Running them as part of 'moto/core' avoids that problem
+import sys
+
 import boto3
 import pytest
 from botocore.exceptions import ClientError
 
 from moto import mock_aws
+from moto.utilities.distutils_version import LooseVersion
+
+boto3_version = sys.modules["botocore"].__version__
 
 
 @mock_aws
@@ -103,9 +108,11 @@ def test_describe_vpc_default_endpoint_services() -> None:
     assert details["ManagesVpcEndpoints"] is False
     assert details["Owner"] == "amazon"
     assert details["PrivateDnsName"] == "config.us-west-1.amazonaws.com"
-    assert details["PrivateDnsNames"] == [
-        {"PrivateDnsName": "config.us-west-1.amazonaws.com"}
-    ]
+    if LooseVersion(boto3_version) > LooseVersion("1.29.0"):
+        # Attribute wasn't available in older botocore versions
+        assert details["PrivateDnsNames"] == [
+            {"PrivateDnsName": "config.us-west-1.amazonaws.com"}
+        ]
     assert details["PrivateDnsNameVerificationState"] == "verified"
     assert details["ServiceName"] == "com.amazonaws.us-west-1.config"
     assert details["ServiceType"] == [{"ServiceType": "Interface"}]
diff --git a/tests/test_core/test_importorder.py b/tests/test_core/test_importorder.py
index e235f553a..7c4569c1e 100644
--- a/tests/test_core/test_importorder.py
+++ b/tests/test_core/test_importorder.py
@@ -1,3 +1,4 @@
+import sys
 from typing import Any, List
 from unittest import SkipTest
 
@@ -5,6 +6,9 @@ import boto3
 import pytest
 
 from moto import mock_aws, settings
+from moto.utilities.distutils_version import LooseVersion
+
+boto3_version = sys.modules["botocore"].__version__
 
 
 @pytest.fixture(scope="function", name="aws_credentials")
@@ -70,6 +74,8 @@ def test_mock_works_with_resource_created_outside(
 
 
 def test_patch_can_be_called_on_a_mocked_client() -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     # start S3 after the mock, ensuring that the client contains our event-handler
     m = mock_aws()
     m.start()
@@ -118,6 +124,8 @@ class ImportantBusinessLogic:
 def test_mock_works_when_replacing_client(
     aws_credentials: Any,  # pylint: disable=unused-argument
 ) -> None:
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Error handling is different in newer versions")
     logic = ImportantBusinessLogic()
 
     m = mock_aws()
diff --git a/tests/test_core/test_request_passthrough.py b/tests/test_core/test_request_passthrough.py
index 16867d8cc..a563a9856 100644
--- a/tests/test_core/test_request_passthrough.py
+++ b/tests/test_core/test_request_passthrough.py
@@ -8,11 +8,16 @@ import requests
 from botocore.exceptions import ClientError
 
 from moto import mock_aws, settings
+from moto.core.versions import is_werkzeug_2_0_x_or_older
 
 
 def test_passthrough_calls_for_entire_service() -> None:
     if not settings.TEST_DECORATOR_MODE:
         raise SkipTest("Can only test config when using decorators")
+    if is_werkzeug_2_0_x_or_older():
+        raise SkipTest(
+            "Bug in old werkzeug versions where headers with byte-values throw errors"
+        )
     # Still mock the credentials ourselves, we don't want to reach out to AWS for real
     with patch.dict(
         os.environ, {"AWS_ACCESS_KEY_ID": "a", "AWS_SECRET_ACCESS_KEY": "b"}
@@ -50,6 +55,10 @@ def test_passthrough_calls_for_entire_service() -> None:
 def test_passthrough_calls_for_specific_url() -> None:
     if not settings.TEST_DECORATOR_MODE:
         raise SkipTest("Can only test config when using decorators")
+    if is_werkzeug_2_0_x_or_older():
+        raise SkipTest(
+            "Bug in old werkzeug versions where headers with byte-values throw errors"
+        )
     # Still mock the credentials ourselves, we don't want to reach out to AWS for real
     with patch.dict(
         os.environ, {"AWS_ACCESS_KEY_ID": "a", "AWS_SECRET_ACCESS_KEY": "b"}
@@ -135,9 +144,9 @@ def test_passthrough__using_unsupported_service() -> None:
                 }
             }
         ):
-            b2bi = boto3.client("b2bi", "us-east-1")
+            workdocs = boto3.client("workdocs", "us-east-1")
             with pytest.raises(ClientError) as exc:
-                b2bi.list_transformers()
+                workdocs.describe_users()
             assert "Not yet implemented" in str(exc.value)
 
 
diff --git a/tests/test_core/test_server.py b/tests/test_core/test_server.py
index eadc0f576..2388e8f6d 100644
--- a/tests/test_core/test_server.py
+++ b/tests/test_core/test_server.py
@@ -1,11 +1,11 @@
 from unittest.mock import Mock, patch
 
-from moto.server import DomainDispatcherApplication, create_backend_app, main
+from moto.server import main
 
 
 def test_wrong_arguments() -> None:
     try:
-        main(["name", "test1", "test2", "test3"])
+        main(["test1", "test2", "test3"])
         assert False, (
             "main() when called with the incorrect number of args"
             " should raise a system exit"
@@ -16,7 +16,7 @@ def test_wrong_arguments() -> None:
 
 @patch("moto.server.run_simple")
 def test_right_arguments(run_simple: Mock) -> None:  # type: ignore[misc]
-    main(["s3"])
+    main(["-r"])
     func_call = run_simple.call_args[0]
     assert func_call[0] == "127.0.0.1"
     assert func_call[1] == 5000
@@ -24,24 +24,7 @@ def test_right_arguments(run_simple: Mock) -> None:  # type: ignore[misc]
 
 @patch("moto.server.run_simple")
 def test_port_argument(run_simple: Mock) -> None:  # type: ignore[misc]
-    main(["s3", "--port", "8080"])
+    main(["--port", "8080"])
     func_call = run_simple.call_args[0]
     assert func_call[0] == "127.0.0.1"
     assert func_call[1] == 8080
-
-
-def test_domain_dispatched() -> None:
-    dispatcher = DomainDispatcherApplication(create_backend_app)
-    backend_app = dispatcher.get_application(
-        {"HTTP_HOST": "email.us-east1.amazonaws.com"}
-    )
-    keys = list(backend_app.view_functions.keys())
-    assert keys[0] == "EmailResponse.dispatch"
-
-
-def test_domain_dispatched_with_service() -> None:
-    # If we pass a particular service, always return that.
-    dispatcher = DomainDispatcherApplication(create_backend_app, service="s3")
-    backend_app = dispatcher.get_application({"HTTP_HOST": "s3.us-east1.amazonaws.com"})
-    keys = set(backend_app.view_functions.keys())
-    assert "moto.s3.responses.key_response" in keys
diff --git a/tests/test_ec2/test_instances.py b/tests/test_ec2/test_instances.py
index 6dbc12b69..161938d7b 100644
--- a/tests/test_ec2/test_instances.py
+++ b/tests/test_ec2/test_instances.py
@@ -2188,18 +2188,6 @@ def test_describe_instance_attribute():
         assert ex.value.response["Error"]["Message"] == message
 
 
-@mock_aws
-def test_warn_on_invalid_ami():
-    if settings.TEST_SERVER_MODE:
-        raise SkipTest("Can't capture warnings in server mode.")
-    ec2 = boto3.resource("ec2", "us-east-1")
-    with pytest.warns(
-        PendingDeprecationWarning,
-        match=r"Could not find AMI with image-id:invalid-ami.+",
-    ):
-        ec2.create_instances(ImageId="invalid-ami", MinCount=1, MaxCount=1)
-
-
 @mock_aws
 @mock.patch(
     "moto.ec2.models.instances.settings.ENABLE_AMI_VALIDATION",
diff --git a/tests/test_iam/test_iam.py b/tests/test_iam/test_iam.py
index e2eccced1..558441dc8 100644
--- a/tests/test_iam/test_iam.py
+++ b/tests/test_iam/test_iam.py
@@ -706,8 +706,10 @@ def test_get_policy():
     assert policy["Policy"]["Arn"] == f"arn:aws:iam::{ACCOUNT_ID}:policy/TestGetPolicy"
 
 
-@mock_aws
+@mock_aws(config={"iam": {"load_aws_managed_policies": True}})
 def test_get_aws_managed_policy():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
     conn = boto3.client("iam", region_name="us-east-1")
     managed_policy_arn = "arn:aws:iam::aws:policy/IAMUserChangePassword"
     managed_policy_create_date = datetime.strptime(
@@ -742,8 +744,10 @@ def test_get_policy_version():
     assert retrieved.get("PolicyVersion")["IsDefaultVersion"] is False
 
 
-@mock_aws
+@mock_aws(config={"iam": {"load_aws_managed_policies": True}})
 def test_get_aws_managed_policy_version():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
     conn = boto3.client("iam", region_name="us-east-1")
     managed_policy_arn = (
         "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
@@ -763,8 +767,10 @@ def test_get_aws_managed_policy_version():
     assert isinstance(retrieved["PolicyVersion"]["Document"], dict)
 
 
-@mock_aws
+@mock_aws(config={"iam": {"load_aws_managed_policies": True}})
 def test_get_aws_managed_policy_v6_version():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
     conn = boto3.client("iam", region_name="us-east-1")
     managed_policy_arn = "arn:aws:iam::aws:policy/job-function/SystemAdministrator"
     with pytest.raises(ClientError):
@@ -1953,8 +1959,10 @@ def test_get_access_key_last_used_when_used():
     assert resp["AccessKeyLastUsed"]["Region"] == "us-east-1"
 
 
-@mock_aws
+@mock_aws(config={"iam": {"load_aws_managed_policies": True}})
 def test_managed_policy():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
     conn = boto3.client("iam", region_name="us-west-1")
 
     conn.create_policy(
@@ -2364,8 +2372,10 @@ def test_delete_ssh_public_key():
     assert len(resp["SSHPublicKeys"]) == 0
 
 
-@mock_aws
+@mock_aws(config={"iam": {"load_aws_managed_policies": True}})
 def test_get_account_authorization_details():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
     test_policy = json.dumps(
         {
             "Version": "2012-10-17",
diff --git a/tests/test_iam/test_iam_groups.py b/tests/test_iam/test_iam_groups.py
index eedc4cccf..5510b9d7c 100644
--- a/tests/test_iam/test_iam_groups.py
+++ b/tests/test_iam/test_iam_groups.py
@@ -1,5 +1,6 @@
 import json
 from datetime import datetime
+from unittest import SkipTest
 
 import boto3
 import pytest
@@ -213,8 +214,10 @@ def test_put_group_policy():
     )
 
 
-@mock_aws
+@mock_aws(config={"iam": {"load_aws_managed_policies": True}})
 def test_attach_group_policies():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
     conn = boto3.client("iam", region_name="us-east-1")
     conn.create_group(GroupName="my-group")
     assert (
diff --git a/tests/test_iam/test_iam_resets.py b/tests/test_iam/test_iam_resets.py
index 91508f778..1280a09b7 100644
--- a/tests/test_iam/test_iam_resets.py
+++ b/tests/test_iam/test_iam_resets.py
@@ -1,13 +1,17 @@
 import json
+import os
+from unittest import SkipTest, mock
 
 import boto3
 
-from moto import mock_aws
+from moto import mock_aws, settings
 
 
 # Test IAM User Inline Policy
 def test_policies_are_not_kept_after_mock_ends():
-    with mock_aws():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Policies not loaded in ServerMode")
+    with mock_aws(config={"iam": {"load_aws_managed_policies": True}}):
         iam_client = boto3.client("iam", "us-east-1")
         role_name = "test"
         assume_role_policy_document = {
@@ -34,6 +38,17 @@ def test_policies_are_not_kept_after_mock_ends():
         assert iam_policies[0]["Arn"] == "arn:aws:iam::aws:policy/ReadOnlyAccess"
         assert iam_client.list_roles()["Roles"][0]["RoleName"] == "test"
 
-    with mock_aws():
+    with mock_aws(config={"iam": {"load_aws_managed_policies": True}}):
         resp = iam_client.list_policies(Scope="AWS", OnlyAttached=True)
         assert len(resp["Policies"]) == 0
+
+
+def test_policies_are_loaded_when_using_env_variable():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("EnvVar not loaded in ServerMode")
+    with mock.patch.dict(os.environ, {"MOTO_IAM_LOAD_MANAGED_POLICIES": "true"}):
+        with mock_aws():
+            iam_client = boto3.client("iam", "us-east-1")
+
+            iam_policies = iam_client.list_policies(Scope="AWS")["Policies"]
+            assert len(iam_policies) > 10
diff --git a/tests/test_iotdata/test_iotdata.py b/tests/test_iotdata/test_iotdata.py
index 73a5e4d1b..60e58c081 100644
--- a/tests/test_iotdata/test_iotdata.py
+++ b/tests/test_iotdata/test_iotdata.py
@@ -1,4 +1,6 @@
 import json
+import sys
+from unittest import SkipTest
 
 import boto3
 import pytest
@@ -7,6 +9,9 @@ from botocore.exceptions import ClientError
 import moto.iotdata.models
 from moto import mock_aws, settings
 from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from moto.utilities.distutils_version import LooseVersion
+
+boto3_version = sys.modules["botocore"].__version__
 
 
 @mock_aws
@@ -94,6 +99,8 @@ def test_update():
 
 @mock_aws
 def test_create_named_shadows():
+    if LooseVersion(boto3_version) < LooseVersion("1.29.0"):
+        raise SkipTest("Parameter only available in newer versions")
     iot_client = boto3.client("iot", region_name="ap-northeast-1")
     client = boto3.client("iot-data", region_name="ap-northeast-1")
     thing_name = "my-thing"
diff --git a/tests/test_moto_api/seeder/test_seeder.py b/tests/test_moto_api/seeder/test_seeder.py
index 3638cc451..970c30524 100644
--- a/tests/test_moto_api/seeder/test_seeder.py
+++ b/tests/test_moto_api/seeder/test_seeder.py
@@ -41,7 +41,7 @@ class TestDifferentAccountsDoesNotBreakSeeding:
         instances = self.ec2_client.run_instances(MaxCount=1, MinCount=1)["Instances"]
 
         instance_ids = [instance["InstanceId"] for instance in instances]
-        assert instance_ids == ["i-954ed79c032a70bf6"]
+        assert instance_ids == ["i-73bd4755d05ad7853"]
 
     def test_1(self) -> None:
         # Create some data in a different account (111111111111)
diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py
index 49f2dadb0..edc2b26f2 100644
--- a/tests/test_s3/test_s3.py
+++ b/tests/test_s3/test_s3.py
@@ -461,7 +461,7 @@ def test_bucket_name_with_special_chars(name):
 )
 @mock_aws
 def test_key_with_special_characters(key):
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         raise SkipTest("Keys starting with a / don't work well in ProxyMode")
     s3_resource = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
     client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
@@ -778,7 +778,7 @@ def test_streaming_upload_from_file_to_presigned_url():
     )
     with open(__file__, "rb") as fhandle:
         get_kwargs = {"data": fhandle}
-        if settings.test_proxy_mode():
+        if settings.is_test_proxy_mode():
             add_proxy_details(get_kwargs)
         response = requests.get(presigned_url, **get_kwargs)
     assert response.status_code == 200
@@ -800,7 +800,7 @@ def test_upload_from_file_to_presigned_url():
     files = {"upload_file": open("text.txt", "rb")}
 
     put_kwargs = {"files": files}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(put_kwargs)
     requests.put(presigned_url, **put_kwargs)
     resp = s3_client.get_object(Bucket="mybucket", Key="file_upload")
@@ -2638,7 +2638,7 @@ def test_root_dir_with_empty_name_works():
 @mock_aws
 def test_leading_slashes_not_removed(bucket_name):
     """Make sure that leading slashes are not removed internally."""
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         raise SkipTest("Doesn't quite work right with the Proxy")
     s3_client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
     s3_client.create_bucket(Bucket=bucket_name)
@@ -2827,7 +2827,7 @@ def test_creating_presigned_post():
         "files": {"file": fdata},
         "allow_redirects": False,
     }
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     resp = requests.post(data["url"], **kwargs)
     assert resp.status_code == 303
@@ -2859,7 +2859,7 @@ def test_presigned_put_url_with_approved_headers():
 
     # Verify S3 throws an error when the header is not provided
     kwargs = {"data": content}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     response = requests.put(url, **kwargs)
     assert response.status_code == 403
@@ -2871,7 +2871,7 @@ def test_presigned_put_url_with_approved_headers():
 
     # Verify S3 throws an error when the header has the wrong value
     kwargs = {"data": content, "headers": {"Content-Type": "application/unknown"}}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     response = requests.put(url, **kwargs)
     assert response.status_code == 403
@@ -2883,7 +2883,7 @@ def test_presigned_put_url_with_approved_headers():
 
     # Verify S3 uploads correctly when providing the meta data
     kwargs = {"data": content, "headers": {"Content-Type": expected_contenttype}}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     response = requests.put(url, **kwargs)
     assert response.status_code == 200
@@ -2916,7 +2916,7 @@ def test_presigned_put_url_with_custom_headers():
 
     # Verify S3 uploads correctly when providing the meta data
     kwargs = {"data": content}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     response = requests.put(url, **kwargs)
     assert response.status_code == 200
diff --git a/tests/test_s3/test_s3_acl.py b/tests/test_s3/test_s3_acl.py
index 1f6ecb180..9dd998c12 100644
--- a/tests/test_s3/test_s3_acl.py
+++ b/tests/test_s3/test_s3_acl.py
@@ -119,7 +119,7 @@ def test_s3_object_in_public_bucket_using_multiple_presigned_urls():
         "get_object", params, ExpiresIn=900
     )
     kwargs = {}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     for i in range(1, 10):
         response = requests.get(presigned_url, **kwargs)
@@ -269,7 +269,7 @@ def test_object_acl_with_presigned_post():
 
     with open(object_name, "rb") as fhandle:
         kwargs = {"files": {"file": (object_name, fhandle)}}
-        if settings.test_proxy_mode():
+        if settings.is_test_proxy_mode():
             add_proxy_details(kwargs)
         requests.post(response["url"], data=response["fields"], **kwargs)
 
diff --git a/tests/test_s3/test_s3_multipart.py b/tests/test_s3/test_s3_multipart.py
index 99025a41f..6c01506f0 100644
--- a/tests/test_s3/test_s3_multipart.py
+++ b/tests/test_s3/test_s3_multipart.py
@@ -15,7 +15,7 @@ from moto.s3.responses import DEFAULT_REGION_NAME
 from moto.settings import (
     S3_UPLOAD_PART_MIN_SIZE,
     get_s3_default_key_buffer_size,
-    test_proxy_mode,
+    is_test_proxy_mode,
 )
 from tests import DEFAULT_ACCOUNT_ID
 
@@ -986,7 +986,7 @@ def test_generate_presigned_url_on_multipart_upload_without_acl():
         "head_object", Params={"Bucket": bucket_name, "Key": object_key}
     )
     kwargs = {}
-    if test_proxy_mode():
+    if is_test_proxy_mode():
         add_proxy_details(kwargs)
     res = requests.get(url, **kwargs)
     assert res.status_code == 200
diff --git a/tests/test_s3/test_s3_tagging.py b/tests/test_s3/test_s3_tagging.py
index a94fe6c5d..b4eb5f82f 100644
--- a/tests/test_s3/test_s3_tagging.py
+++ b/tests/test_s3/test_s3_tagging.py
@@ -476,7 +476,7 @@ def test_generate_url_for_tagged_object():
         "get_object", Params={"Bucket": "my-bucket", "Key": "test.txt"}
     )
     kwargs = {}
-    if settings.test_proxy_mode():
+    if settings.is_test_proxy_mode():
         add_proxy_details(kwargs)
     response = requests.get(url, **kwargs)
     assert response.content == b"abc"