Repository: getmoto/moto
Pull request #8425 (2024-12-22 03:00:15)

DSQL: implement create_cluster()
This PR is part of #8413 

add DSQL `create_cluster()` implementation.

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/getmoto/moto/pull/8425?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) Report
Attention: Patch coverage is `98.27586%` with `1 line` in your changes missing coverage. Please review.
> Project coverage is 94.60%. Comparing base [(`db93058`)](https://app.codecov.io/gh/getmoto/moto/commit/db93058f89f600b89368f48babab6a347674b6c9?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) to head [(`264f7c1`)](https://app.codecov.io/gh/getmoto/moto/commit/264f7c19be6098d44afb00a2b2afbf0a0662fa6a?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto).
> Report is 3 commits behind head on master.

| [Files with missing lines](https://app.codecov.io/gh/getmoto/moto/pull/8425?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | Patch % | Lines |
|---|---|---|
| [moto/moto\_server/werkzeug\_app.py](https://app.codecov.io/gh/getmoto/moto/pull/8425?src=pr&el=tree&filepath=moto%2Fmoto_server%2Fwerkzeug_app.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto#diff-bW90by9tb3RvX3NlcnZlci93ZXJremV1Z19hcHAucHk=) | 50.00% | [1 Missing :warning: ](https://app.codecov.io/gh/getmoto/moto/pull/8425?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) |

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##           master    #8425   +/-   ##
=======================================
  Coverage   94.60%   94.60%           
=======================================
  Files        1163     1167    +4     
  Lines      101638   101697   +59     
=======================================
+ Hits        96152    96210   +58     
- Misses       5486     5487    +1     
```

| [Flag](https://app.codecov.io/gh/getmoto/moto/pull/8425/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | Coverage Δ | |
|---|---|---|
| [servertests](https://app.codecov.io/gh/getmoto/moto/pull/8425/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `28.82% <6.89%> (-0.02%)` | :arrow_down: |
| [unittests](https://app.codecov.io/gh/getmoto/moto/pull/8425/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `94.57% <98.27%> (+<0.01%)` | :arrow_up: |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto#carryforward-flags-in-the-pull-request-comment) to find out more.

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/getmoto/moto/pull/8425?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto).


Patch:
diff --git a/moto/backend_index.py b/moto/backend_index.py
index 8b4452cb7..609fe0dae 100644
--- a/moto/backend_index.py
+++ b/moto/backend_index.py
@@ -45,6 +45,7 @@ backend_url_patterns = [
     ("directconnect", re.compile("https?://directconnect\\.(.+)\\.amazonaws\\.com")),
     ("dms", re.compile("https?://dms\\.(.+)\\.amazonaws\\.com")),
     ("ds", re.compile("https?://ds\\.(.+)\\.amazonaws\\.com")),
+    ("dsql", re.compile("https?://dsql\\.(.+)\\.api\\.aws")),
     ("dynamodb", re.compile("https?://dynamodb\\.(.+)\\.amazonaws\\.com")),
     (
         "dynamodbstreams",
diff --git a/moto/backends.py b/moto/backends.py
index e81b7d53d..9b2454f77 100644
--- a/moto/backends.py
+++ b/moto/backends.py
@@ -44,6 +44,7 @@ if TYPE_CHECKING:
     from moto.directconnect.models import DirectConnectBackend
     from moto.dms.models import DatabaseMigrationServiceBackend
     from moto.ds.models import DirectoryServiceBackend
+    from moto.dsql.models import AuroraDSQLBackend
     from moto.dynamodb.models import DynamoDBBackend
     from moto.dynamodb_v20111205.models import (
         DynamoDBBackend as DynamoDBBackend_v20111205,
@@ -225,6 +226,7 @@ SERVICE_NAMES = Union[
     "Literal['directconnect']",
     "Literal['dms']",
     "Literal['ds']",
+    "Literal['dsql']",
     "Literal['dynamodb']",
     "Literal['dynamodb_v20111205']",
     "Literal['dynamodbstreams']",
@@ -440,6 +442,8 @@ def get_backend(
 @overload
 def get_backend(name: "Literal['ds']") -> "BackendDict[DirectoryServiceBackend]": ...
 @overload
+def get_backend(name: "Literal['dsql']") -> "BackendDict[AuroraDSQLBackend]": ...
+@overload
 def get_backend(name: "Literal['dynamodb']") -> "BackendDict[DynamoDBBackend]": ...
 @overload
 def get_backend(
diff --git a/moto/dsql/__init__.py b/moto/dsql/__init__.py
new file mode 100644
index 000000000..c6bc12a83
--- /dev/null
+++ b/moto/dsql/__init__.py
@@ -0,0 +1,1 @@
+from .models import dsql_backends  # noqa: F401
diff --git a/moto/dsql/exceptions.py b/moto/dsql/exceptions.py
new file mode 100644
index 000000000..69cbb6b2e
--- /dev/null
+++ b/moto/dsql/exceptions.py
@@ -0,0 +1,1 @@
+"""Exceptions raised by the dsql service."""
diff --git a/moto/dsql/models.py b/moto/dsql/models.py
new file mode 100644
index 000000000..64124fe4d
--- /dev/null
+++ b/moto/dsql/models.py
@@ -0,0 +1,81 @@
+"""AuroraDSQLBackend class with methods for supported APIs."""
+
+from collections import OrderedDict
+from typing import Any, Dict, Optional
+
+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
+from moto.moto_api._internal.managed_state_model import ManagedState
+from moto.utilities.utils import get_partition
+
+
+class Cluster(BaseModel, ManagedState):
+    """Model for an AuroraDSQL cluster."""
+
+    def to_dict(self) -> Dict[str, Any]:
+        dct = {
+            "identifier": self.identifier,
+            "arn": self.arn,
+            "status": self.status,
+            "creationTime": iso_8601_datetime_with_milliseconds(self.creation_time),
+            "deletionProtectionEnabled": self.deletion_protection_enabled,
+        }
+        return {k: v for k, v in dct.items() if v is not None}
+
+    def __init__(
+        self,
+        region_name: str,
+        account_id: str,
+        deletion_protection_enabled: Optional[bool],
+        tags: Optional[Dict[str, str]],
+        client_token: Optional[str],
+    ):
+        ManagedState.__init__(
+            self, "dsql::cluster", transitions=[("CREATING", "ACTIVE")]
+        )
+        self.region_name = region_name
+        self.account_id = account_id
+        self.identifier = mock_random.get_random_hex(26)
+        self.arn = f"arn:{get_partition(self.region_name)}:dsql:{self.region_name}:{self.account_id}:cluster/{self.identifier}"
+        self.creation_time = utcnow()
+        self.deletion_protection_enabled = deletion_protection_enabled
+        self.tags = tags
+        self.client_token = client_token
+
+
+class AuroraDSQLBackend(BaseBackend):
+    """Implementation of AuroraDSQL APIs."""
+
+    def __init__(self, region_name: str, account_id: str):
+        super().__init__(region_name, account_id)
+        self.region_name = region_name
+        self.account_id = account_id
+        self.partition = get_partition(region_name)
+        self.clusters: Dict[str, Cluster] = OrderedDict()
+
+    def create_cluster(
+        self,
+        deletion_protection_enabled: bool,
+        tags: Optional[Dict[str, str]],
+        client_token: Optional[str],
+    ) -> Cluster:
+        cluster = Cluster(
+            self.region_name,
+            self.account_id,
+            deletion_protection_enabled,
+            tags,
+            client_token,
+        )
+        return cluster
+
+
+dsql_backends = BackendDict(
+    AuroraDSQLBackend,
+    "dsql",
+    # currently botocore does not provide a dsql endpoint
+    # https://github.com/boto/botocore/blob/e07cddc333fe4fb90efcd5d04324dd83f9cc3a57/botocore/data/endpoints.json
+    use_boto3_regions=False,
+    additional_regions=["us-east-1", "us-east-2"],
+)
diff --git a/moto/dsql/responses.py b/moto/dsql/responses.py
new file mode 100644
index 000000000..3e3f23198
--- /dev/null
+++ b/moto/dsql/responses.py
@@ -0,0 +1,32 @@
+"""Handles incoming dsql requests, invokes methods, returns responses."""
+
+import json
+
+from moto.core.responses import BaseResponse
+
+from .models import AuroraDSQLBackend, dsql_backends
+
+
+class AuroraDSQLResponse(BaseResponse):
+    """Handler for AuroraDSQL requests and responses."""
+
+    def __init__(self) -> None:
+        super().__init__(service_name="dsql")
+
+    @property
+    def dsql_backend(self) -> AuroraDSQLBackend:
+        """Return backend instance specific for this region."""
+        return dsql_backends[self.current_account][self.region]
+
+    def create_cluster(self) -> str:
+        params = self._get_params()
+        deletion_protection_enabled = params.get("deletionProtectionEnabled", True)
+        tags = params.get("tags")
+        client_token = params.get("clientToken")
+        cluster = self.dsql_backend.create_cluster(
+            deletion_protection_enabled=deletion_protection_enabled,
+            tags=tags,
+            client_token=client_token,
+        )
+
+        return json.dumps(dict(cluster.to_dict()))
diff --git a/moto/dsql/urls.py b/moto/dsql/urls.py
new file mode 100644
index 000000000..8fbbf12ff
--- /dev/null
+++ b/moto/dsql/urls.py
@@ -0,0 +1,11 @@
+"""dsql base URL and path."""
+
+from .responses import AuroraDSQLResponse
+
+url_bases = [
+    r"https?://dsql\.(.+)\.api\.aws",
+]
+
+url_paths = {
+    "{0}/cluster$": AuroraDSQLResponse.dispatch,
+}
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json
index 43f9c2648..3e0f681d9 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/af-south-1.json
@@ -363,6 +363,10 @@
   "InstanceType": "inf1.24xlarge",
   "Location": "afs1-az1"
  },
+ {
+  "InstanceType": "inf1.xlarge",
+  "Location": "afs1-az1"
+ },
  {
   "InstanceType": "m5.12xlarge",
   "Location": "afs1-az1"
@@ -1343,6 +1347,10 @@
   "InstanceType": "inf1.24xlarge",
   "Location": "afs1-az2"
  },
+ {
+  "InstanceType": "inf1.xlarge",
+  "Location": "afs1-az2"
+ },
  {
   "InstanceType": "m5.12xlarge",
   "Location": "afs1-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-1.json
index e50518cc6..399907626 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-1.json
@@ -7391,6 +7391,10 @@
   "InstanceType": "p4d.24xlarge",
   "Location": "apne1-az4"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "apne1-az4"
+ },
  {
   "InstanceType": "p5en.48xlarge",
   "Location": "apne1-az4"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json
index d50dfe5dd..b053cdf76 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-2.json
@@ -555,6 +555,46 @@
   "InstanceType": "g5g.xlarge",
   "Location": "apne2-az1"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "apne2-az1"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "apne2-az1"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "apne2-az1"
@@ -5375,6 +5415,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "apne2-az4"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "apne2-az4"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "apne2-az4"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "apne2-az4"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-3.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-3.json
index 2ed6c184d..f211b6682 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-3.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-northeast-3.json
@@ -831,6 +831,14 @@
   "InstanceType": "t4g.xlarge",
   "Location": "apne3-az1"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "apne3-az1"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "apne3-az1"
+ },
  {
   "InstanceType": "x2idn.16xlarge",
   "Location": "apne3-az1"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json
index 8147d1e90..3b14abec5 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json
@@ -1407,6 +1407,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "aps1-az1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "aps1-az1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "aps1-az1"
@@ -3487,6 +3491,10 @@
   "InstanceType": "mac1.metal",
   "Location": "aps1-az2"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "aps1-az2"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "aps1-az2"
@@ -5543,6 +5551,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "aps1-az3"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "aps1-az3"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "aps1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json
index 2dbd04a69..0ec863d80 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-2.json
@@ -1687,6 +1687,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "apse2-az1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "apse2-az1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "apse2-az1"
@@ -4207,6 +4211,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "apse2-az2"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "apse2-az2"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "apse2-az2"
@@ -6647,6 +6655,10 @@
   "InstanceType": "mac2-m2pro.metal",
   "Location": "apse2-az3"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "apse2-az3"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "apse2-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json
index 423b99289..4624cb6d4 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json
@@ -5139,6 +5139,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "cac1-az4"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "cac1-az4"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "cac1-az4"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json
index 8ed091443..79c16552c 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json
@@ -1167,6 +1167,10 @@
   "InstanceType": "mac1.metal",
   "Location": "eun1-az1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eun1-az1"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "eun1-az1"
@@ -2955,6 +2959,10 @@
   "InstanceType": "mac1.metal",
   "Location": "eun1-az2"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eun1-az2"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "eun1-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json
index af4a7de70..37bc02797 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json
@@ -1199,6 +1199,10 @@
   "InstanceType": "mac1.metal",
   "Location": "euw2-az1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "euw2-az1"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "euw2-az1"
@@ -3211,6 +3215,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "euw2-az2"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "euw2-az2"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "euw2-az2"
@@ -5091,6 +5099,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "euw2-az3"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "euw2-az3"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "euw2-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json
index f84d21a42..4db64e6c4 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json
@@ -1995,6 +1995,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "euw3-az2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "euw3-az2"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "euw3-az2"
@@ -3535,6 +3575,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "euw3-az3"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "euw3-az3"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "euw3-az3"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "euw3-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json
index 8c9c039dd..d4524c37b 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json
@@ -4795,6 +4795,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "sae1-az3"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "sae1-az3"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "sae1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json
index 5a765541d..a00751c22 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json
@@ -1323,6 +1323,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "usw1-az1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "usw1-az1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "usw1-az1"
@@ -3327,6 +3331,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "usw1-az3"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "usw1-az3"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "usw1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json
index 8569b048f..3efa99bb4 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/af-south-1.json
@@ -363,6 +363,10 @@
   "InstanceType": "inf1.24xlarge",
   "Location": "af-south-1a"
  },
+ {
+  "InstanceType": "inf1.xlarge",
+  "Location": "af-south-1a"
+ },
  {
   "InstanceType": "m5.12xlarge",
   "Location": "af-south-1a"
@@ -1343,6 +1347,10 @@
   "InstanceType": "inf1.24xlarge",
   "Location": "af-south-1b"
  },
+ {
+  "InstanceType": "inf1.xlarge",
+  "Location": "af-south-1b"
+ },
  {
   "InstanceType": "m5.12xlarge",
   "Location": "af-south-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-1.json
index f911cd803..a500a4b3d 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-1.json
@@ -1907,6 +1907,10 @@
   "InstanceType": "p4d.24xlarge",
   "Location": "ap-northeast-1a"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-northeast-1a"
+ },
  {
   "InstanceType": "p5en.48xlarge",
   "Location": "ap-northeast-1a"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json
index 72ce0bab9..92ef19e28 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-2.json
@@ -555,6 +555,46 @@
   "InstanceType": "g5g.xlarge",
   "Location": "ap-northeast-2a"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-northeast-2a"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-northeast-2a"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "ap-northeast-2a"
@@ -5375,6 +5415,46 @@
   "InstanceType": "g5.xlarge",
   "Location": "ap-northeast-2d"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-northeast-2d"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-northeast-2d"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "ap-northeast-2d"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-3.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-3.json
index 774b8e078..17de5de34 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-3.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-northeast-3.json
@@ -1695,6 +1695,14 @@
   "InstanceType": "t4g.xlarge",
   "Location": "ap-northeast-3b"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "ap-northeast-3b"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "ap-northeast-3b"
+ },
  {
   "InstanceType": "x2idn.16xlarge",
   "Location": "ap-northeast-3b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json
index b77f5880b..1b5895ebb 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json
@@ -1407,6 +1407,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "ap-south-1a"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-south-1a"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-south-1a"
@@ -3619,6 +3623,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "ap-south-1b"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-south-1b"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-south-1b"
@@ -5703,6 +5711,10 @@
   "InstanceType": "mac1.metal",
   "Location": "ap-south-1c"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-south-1c"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "ap-south-1c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json
index b6dbddff3..bbf2355ed 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-2.json
@@ -1523,6 +1523,10 @@
   "InstanceType": "mac2-m2pro.metal",
   "Location": "ap-southeast-2a"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-southeast-2a"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-southeast-2a"
@@ -4103,6 +4107,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "ap-southeast-2b"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-southeast-2b"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-southeast-2b"
@@ -6623,6 +6631,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "ap-southeast-2c"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-southeast-2c"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-southeast-2c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json
index 381f2979c..61ef02795 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json
@@ -5139,6 +5139,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "ca-central-1d"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ca-central-1d"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "ca-central-1d"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json
index d80ccb344..1c32409a1 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json
@@ -1167,6 +1167,10 @@
   "InstanceType": "mac1.metal",
   "Location": "eu-north-1a"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eu-north-1a"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "eu-north-1a"
@@ -2955,6 +2959,10 @@
   "InstanceType": "mac1.metal",
   "Location": "eu-north-1b"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eu-north-1b"
+ },
  {
   "InstanceType": "r5.12xlarge",
   "Location": "eu-north-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json
index 899ca410e..20897daaf 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json
@@ -1339,6 +1339,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "eu-west-2a"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eu-west-2a"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "eu-west-2a"
@@ -3219,6 +3223,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "eu-west-2b"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eu-west-2b"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "eu-west-2b"
@@ -5055,6 +5063,10 @@
   "InstanceType": "mac1.metal",
   "Location": "eu-west-2c"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eu-west-2c"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "eu-west-2c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json
index 630cc9a88..2f18bb264 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json
@@ -1995,6 +1995,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "eu-west-3b"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-west-3b"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eu-west-3b"
@@ -3535,6 +3575,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "eu-west-3c"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-west-3c"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-west-3c"
+ },
  {
   "InstanceType": "i3.16xlarge",
   "Location": "eu-west-3c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json
index 59090f746..42f4bdca3 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json
@@ -4795,6 +4795,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "sa-east-1c"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "sa-east-1c"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "sa-east-1c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json
index 233bdbd81..af695ad01 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json
@@ -1323,6 +1323,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "us-west-1a"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "us-west-1a"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "us-west-1a"
@@ -3327,6 +3331,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "us-west-1b"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "us-west-1b"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "us-west-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/region/af-south-1.json b/moto/ec2/resources/instance_type_offerings/region/af-south-1.json
index d5e447e31..067fc1228 100644
--- a/moto/ec2/resources/instance_type_offerings/region/af-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/af-south-1.json
@@ -427,6 +427,10 @@
   "InstanceType": "inf1.24xlarge",
   "Location": "af-south-1"
  },
+ {
+  "InstanceType": "inf1.xlarge",
+  "Location": "af-south-1"
+ },
  {
   "InstanceType": "m5.12xlarge",
   "Location": "af-south-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json b/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json
index 8a9ca1b62..83213fa53 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-northeast-2.json
@@ -575,6 +575,46 @@
   "InstanceType": "g5g.xlarge",
   "Location": "ap-northeast-2"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "ap-northeast-2"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "ap-northeast-2"
+ },
  {
   "InstanceType": "i2.2xlarge",
   "Location": "ap-northeast-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-northeast-3.json b/moto/ec2/resources/instance_type_offerings/region/ap-northeast-3.json
index 2d9fccf33..ebc01903d 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-northeast-3.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-northeast-3.json
@@ -939,6 +939,14 @@
   "InstanceType": "t4g.xlarge",
   "Location": "ap-northeast-3"
  },
+ {
+  "InstanceType": "u-6tb1.112xlarge",
+  "Location": "ap-northeast-3"
+ },
+ {
+  "InstanceType": "u-6tb1.56xlarge",
+  "Location": "ap-northeast-3"
+ },
  {
   "InstanceType": "x1.16xlarge",
   "Location": "ap-northeast-3"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json
index a440c3627..49a2f0156 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json
@@ -1431,6 +1431,10 @@
   "InstanceType": "p2.xlarge",
   "Location": "ap-south-1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-south-1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-south-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json b/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json
index b9976c7f9..8d9fac078 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ap-southeast-2.json
@@ -1687,6 +1687,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "ap-southeast-2"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ap-southeast-2"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "ap-southeast-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json b/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json
index 7da0d1f9d..8c1737b8b 100644
--- a/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json
@@ -1411,6 +1411,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "ca-central-1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "ca-central-1"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "ca-central-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json b/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json
index 415759ff1..35018fce2 100644
--- a/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json
@@ -1339,6 +1339,10 @@
   "InstanceType": "p3.8xlarge",
   "Location": "eu-west-2"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "eu-west-2"
+ },
  {
   "InstanceType": "r4.16xlarge",
   "Location": "eu-west-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json b/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json
index d82d86326..958ec4f5e 100644
--- a/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json
+++ b/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json
@@ -463,6 +463,46 @@
   "InstanceType": "g4dn.xlarge",
   "Location": "eu-west-3"
  },
+ {
+  "InstanceType": "g6.12xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.16xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.24xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.2xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.48xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.4xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.8xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "g6.xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "gr6.4xlarge",
+  "Location": "eu-west-3"
+ },
+ {
+  "InstanceType": "gr6.8xlarge",
+  "Location": "eu-west-3"
+ },
  {
   "InstanceType": "hpc6id.32xlarge",
   "Location": "eu-west-3"
diff --git a/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json
index c6cfa9933..cc007a1c0 100644
--- a/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json
@@ -1375,6 +1375,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "sa-east-1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "sa-east-1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "sa-east-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/us-west-1.json b/moto/ec2/resources/instance_type_offerings/region/us-west-1.json
index 26708309d..264c10e39 100644
--- a/moto/ec2/resources/instance_type_offerings/region/us-west-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/us-west-1.json
@@ -1323,6 +1323,10 @@
   "InstanceType": "m7i.xlarge",
   "Location": "us-west-1"
  },
+ {
+  "InstanceType": "p5.48xlarge",
+  "Location": "us-west-1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "us-west-1"
diff --git a/moto/ec2/resources/instance_types.json b/moto/ec2/resources/instance_types.json
index 056fbf328..b34037966 100644
--- a/moto/ec2/resources/instance_types.json
+++ b/moto/ec2/resources/instance_types.json
@@ -56051,7 +56051,7 @@
    "NvmeSupport": "required"
   },
   "FreeTierEligible": false,
-  "HibernationSupported": false,
+  "HibernationSupported": true,
   "Hypervisor": "nitro",
   "InstanceStorageSupported": false,
   "InstanceType": "m7a.2xlarge",
@@ -56382,7 +56382,7 @@
    "NvmeSupport": "required"
   },
   "FreeTierEligible": false,
-  "HibernationSupported": false,
+  "HibernationSupported": true,
   "Hypervisor": "nitro",
   "InstanceStorageSupported": false,
   "InstanceType": "m7a.4xlarge",
@@ -56487,7 +56487,7 @@
    "NvmeSupport": "required"
   },
   "FreeTierEligible": false,
-  "HibernationSupported": false,
+  "HibernationSupported": true,
   "Hypervisor": "nitro",
   "InstanceStorageSupported": false,
   "InstanceType": "m7a.8xlarge",
@@ -56594,7 +56594,7 @@
    "NvmeSupport": "required"
   },
   "FreeTierEligible": false,
-  "HibernationSupported": false,
+  "HibernationSupported": true,
   "Hypervisor": "nitro",
   "InstanceStorageSupported": false,
   "InstanceType": "m7a.large",
@@ -56870,7 +56870,7 @@
    "NvmeSupport": "required"
   },
   "FreeTierEligible": false,
-  "HibernationSupported": false,
+  "HibernationSupported": true,
   "Hypervisor": "nitro",
   "InstanceStorageSupported": false,
   "InstanceType": "m7a.xlarge",
@@ -92413,7 +92413,7 @@
   },
   "NitroEnclavesSupport": "unsupported",
   "NitroTpmSupport": "unsupported",
-  "PhcSupport": "supported",
+  "PhcSupport": "unsupported",
   "PlacementGroupInfo": {
    "SupportedStrategies": [
     "cluster",
diff --git a/moto/moto_api/__init__.py b/moto/moto_api/__init__.py
index 6a2891331..406bf339d 100644
--- a/moto/moto_api/__init__.py
+++ b/moto/moto_api/__init__.py
@@ -18,6 +18,9 @@ state_manager.register_default_transition(
 state_manager.register_default_transition(
     model_name="dax::cluster", transition={"progression": "manual", "times": 4}
 )
+state_manager.register_default_transition(
+    "dsql::cluster", transition={"progression": "manual", "times": 1}
+)
 state_manager.register_default_transition(
     model_name="ecs::task", transition={"progression": "manual", "times": 1}
 )
diff --git a/moto/moto_server/werkzeug_app.py b/moto/moto_server/werkzeug_app.py
index 1daf65613..2202a7afc 100644
--- a/moto/moto_server/werkzeug_app.py
+++ b/moto/moto_server/werkzeug_app.py
@@ -136,6 +136,8 @@ class DomainDispatcherApplication:
             # All MediaStore API calls have a target header
             # If no target is set, assume we're trying to reach the mediastore-data service
             host = f"data.{service}.{region}.amazonaws.com"
+        elif service == "dsql":
+            host = f"{service}.{region}.api.aws"
         elif service == "dynamodb":
             if environ["HTTP_X_AMZ_TARGET"].startswith("DynamoDBStreams"):
                 host = "dynamodbstreams"


Test patch:
diff --git a/tests/test_dsql/__init__.py b/tests/test_dsql/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/test_dsql/test_dsql.py b/tests/test_dsql/test_dsql.py
new file mode 100644
index 000000000..7bfdd95f6
--- /dev/null
+++ b/tests/test_dsql/test_dsql.py
@@ -0,0 +1,24 @@
+"""Unit tests for dsql-supported APIs."""
+
+from datetime import datetime
+
+import boto3
+from dateutil.tz import tzutc
+from freezegun import freeze_time
+
+from moto import mock_aws, settings
+
+
+@mock_aws
+def test_create_cluster():
+    client = boto3.client("dsql", region_name="us-east-1")
+    with freeze_time("2024-12-22 12:34:00"):
+        resp = client.create_cluster()
+
+    identifier = resp["identifier"]
+    assert identifier is not None
+    assert resp["arn"] == f"arn:aws:dsql:us-east-1:123456789012:cluster/{identifier}"
+    assert resp["deletionProtectionEnabled"] is True
+    assert resp["status"] == "CREATING"
+    if not settings.TEST_SERVER_MODE:
+        assert resp["creationTime"] == datetime(2024, 12, 22, 12, 34, tzinfo=tzutc())