Repository: getmoto/moto
Pull request #6886 (2023-10-05 17:21:56)

ELBv2: target-group creation and modification
# Fixes
-  `modify-target-group-attributes` : fixed validation for `stickiness` and `deregistration_delay.timeout_seconds` and added exception handling
- added new exception `InvalidConfigurationRequest`
- added new tags in target-group `creation` and `describe` response
- added test cases

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/getmoto/moto/pull/6886?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) Report
> Merging [#6886](https://app.codecov.io/gh/getmoto/moto/pull/6886?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) (ec084e4) into [master](https://app.codecov.io/gh/getmoto/moto/commit/90fec47f5f9275200a0b659ea659234a3146a2db?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) (90fec47) will **decrease** coverage by `0.01%`.
> The diff coverage is `84.84%`.

```diff
@@            Coverage Diff             @@
##           master    #6886      +/-   ##
==========================================
- Coverage   95.82%   95.81%   -0.01%     
==========================================
  Files         821      821              
  Lines       80762    80795      +33     
==========================================
+ Hits        77388    77417      +29     
- Misses       3374     3378       +4     
```

| [Flag](https://app.codecov.io/gh/getmoto/moto/pull/6886/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/6886/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `36.76% <6.06%> (-0.02%)` | :arrow_down: |
| [unittests](https://app.codecov.io/gh/getmoto/moto/pull/6886/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `95.76% <84.84%> (-0.01%)` | :arrow_down: |

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.

| [Files](https://app.codecov.io/gh/getmoto/moto/pull/6886?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | Coverage Δ | |
|---|---|---|
| [moto/elbv2/exceptions.py](https://app.codecov.io/gh/getmoto/moto/pull/6886?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto#diff-bW90by9lbGJ2Mi9leGNlcHRpb25zLnB5) | `90.32% <100.00%> (+0.32%)` | :arrow_up: |
| [moto/elbv2/responses.py](https://app.codecov.io/gh/getmoto/moto/pull/6886?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto#diff-bW90by9lbGJ2Mi9yZXNwb25zZXMucHk=) | `99.44% <ø> (ø)` | |
| [moto/elbv2/models.py](https://app.codecov.io/gh/getmoto/moto/pull/6886?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto#diff-bW90by9lbGJ2Mi9tb2RlbHMucHk=) | `93.00% <83.33%> (-0.21%)` | :arrow_down: |



Patch:
diff --git a/IMPLEMENTATION_COVERAGE.md b/IMPLEMENTATION_COVERAGE.md
index 053a5dc86..c9302c490 100644
--- a/IMPLEMENTATION_COVERAGE.md
+++ b/IMPLEMENTATION_COVERAGE.md
@@ -4105,6 +4105,42 @@
 - [X] update_thing_shadow
 </details>
 
+## ivs
+<details>
+<summary>20% implemented</summary>
+
+- [X] batch_get_channel
+- [ ] batch_get_stream_key
+- [ ] batch_start_viewer_session_revocation
+- [X] create_channel
+- [ ] create_recording_configuration
+- [ ] create_stream_key
+- [X] delete_channel
+- [ ] delete_playback_key_pair
+- [ ] delete_recording_configuration
+- [ ] delete_stream_key
+- [X] get_channel
+- [ ] get_playback_key_pair
+- [ ] get_recording_configuration
+- [ ] get_stream
+- [ ] get_stream_key
+- [ ] get_stream_session
+- [ ] import_playback_key_pair
+- [X] list_channels
+- [ ] list_playback_key_pairs
+- [ ] list_recording_configurations
+- [ ] list_stream_keys
+- [ ] list_stream_sessions
+- [ ] list_streams
+- [ ] list_tags_for_resource
+- [ ] put_metadata
+- [ ] start_viewer_session_revocation
+- [ ] stop_stream
+- [ ] tag_resource
+- [ ] untag_resource
+- [X] update_channel
+</details>
+
 ## kinesis
 <details>
 <summary>93% implemented</summary>
@@ -6344,7 +6380,7 @@
 - [ ] describe_model_card_export_job
 - [ ] describe_model_explainability_job_definition
 - [X] describe_model_package
-- [ ] describe_model_package_group
+- [X] describe_model_package_group
 - [ ] describe_model_quality_job_definition
 - [ ] describe_monitoring_schedule
 - [ ] describe_notebook_instance
@@ -6491,7 +6527,7 @@
 - [ ] update_image_version
 - [ ] update_inference_experiment
 - [ ] update_model_card
-- [ ] update_model_package
+- [X] update_model_package
 - [ ] update_monitoring_alert
 - [ ] update_monitoring_schedule
 - [ ] update_notebook_instance
@@ -7481,7 +7517,6 @@
 - iotthingsgraph
 - iottwinmaker
 - iotwireless
-- ivs
 - ivs-realtime
 - ivschat
 - kafka
diff --git a/docs/docs/contributing/installation.rst b/docs/docs/contributing/installation.rst
index b1ed9e25a..d520cabcd 100644
--- a/docs/docs/contributing/installation.rst
+++ b/docs/docs/contributing/installation.rst
@@ -36,13 +36,20 @@ With all dependencies installed, run the following command to run all the tests
 
 Note that this may take awhile - there are many services, and each service will have a boatload of tests.
 
+You can also run the linting checks separately:
+
+.. code-block:: bash
+
+  make lint
+
 To verify all tests pass for a specific service, for example for `s3`, run these commands manually:
 
 .. code-block:: bash
 
-  ruff moto/s3
+  ruff moto/s3 tests/test_s3
   black --check moto/s3 tests/test_s3
-  pylint tests/test_s3
+  pylint moto/s3 tests/test_s3
+  mypy
   pytest -sv tests/test_s3
 
 If black fails, you can run the following command to automatically format the offending files:
@@ -76,7 +83,8 @@ Then standard development on Moto can proceed, for example:
 
 .. code-block:: bash
 
-  ruff moto/s3
+  ruff moto/s3 tests/test_s3
   black --check moto/s3 tests/test_s3
-  pylint tests/test_s3
+  pylint moto/s3 tests/test_s3
+  mypy
   pytest -sv tests/test_s3
\ No newline at end of file
diff --git a/docs/docs/services/ivs.rst b/docs/docs/services/ivs.rst
new file mode 100644
index 000000000..e3b0f66e3
--- /dev/null
+++ b/docs/docs/services/ivs.rst
@@ -0,0 +1,60 @@
+.. _implementedservice_ivs:
+
+.. |start-h3| raw:: html
+
+    <h3>
+
+.. |end-h3| raw:: html
+
+    </h3>
+
+===
+ivs
+===
+
+.. autoclass:: moto.ivs.models.IVSBackend
+
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+            @mock_ivs
+            def test_ivs_behaviour:
+                boto3.client("ivs")
+                ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
+- [X] batch_get_channel
+- [ ] batch_get_stream_key
+- [ ] batch_start_viewer_session_revocation
+- [X] create_channel
+- [ ] create_recording_configuration
+- [ ] create_stream_key
+- [X] delete_channel
+- [ ] delete_playback_key_pair
+- [ ] delete_recording_configuration
+- [ ] delete_stream_key
+- [X] get_channel
+- [ ] get_playback_key_pair
+- [ ] get_recording_configuration
+- [ ] get_stream
+- [ ] get_stream_key
+- [ ] get_stream_session
+- [ ] import_playback_key_pair
+- [X] list_channels
+- [ ] list_playback_key_pairs
+- [ ] list_recording_configurations
+- [ ] list_stream_keys
+- [ ] list_stream_sessions
+- [ ] list_streams
+- [ ] list_tags_for_resource
+- [ ] put_metadata
+- [ ] start_viewer_session_revocation
+- [ ] stop_stream
+- [ ] tag_resource
+- [ ] untag_resource
+- [X] update_channel
+
diff --git a/moto/__init__.py b/moto/__init__.py
index d6401ddb8..2c5e14720 100644
--- a/moto/__init__.py
+++ b/moto/__init__.py
@@ -106,6 +106,7 @@ mock_iam = lazy_load(".iam", "mock_iam")
 mock_identitystore = lazy_load(".identitystore", "mock_identitystore")
 mock_iot = lazy_load(".iot", "mock_iot")
 mock_iotdata = lazy_load(".iotdata", "mock_iotdata", boto3_name="iot-data")
+mock_ivs = lazy_load(".ivs", "mock_ivs", boto3_name="ivs")
 mock_kinesis = lazy_load(".kinesis", "mock_kinesis")
 mock_kinesisvideo = lazy_load(".kinesisvideo", "mock_kinesisvideo")
 mock_kinesisvideoarchivedmedia = lazy_load(
diff --git a/moto/backend_index.py b/moto/backend_index.py
index faf763d1d..a55cbdd3f 100644
--- a/moto/backend_index.py
+++ b/moto/backend_index.py
@@ -88,6 +88,7 @@ backend_url_patterns = [
     ("iot", re.compile("https?://iot\\.(.+)\\.amazonaws\\.com")),
     ("iot-data", re.compile("https?://data\\.iot\\.(.+)\\.amazonaws.com")),
     ("iot-data", re.compile("https?://data-ats\\.iot\\.(.+)\\.amazonaws.com")),
+    ("ivs", re.compile("https?://ivs\\.(.+)\\.amazonaws\\.com")),
     ("kinesis", re.compile("https?://kinesis\\.(.+)\\.amazonaws\\.com")),
     ("kinesis", re.compile("https?://(.+)\\.control-kinesis\\.(.+)\\.amazonaws\\.com")),
     ("kinesis", re.compile("https?://(.+)\\.data-kinesis\\.(.+)\\.amazonaws\\.com")),
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 d0a1327b8..cb5d75fc6 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
@@ -331,6 +331,46 @@
   "InstanceType": "c6i.xlarge",
   "Location": "aps1-az1"
  },
+ {
+  "InstanceType": "c6in.12xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.16xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.24xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.2xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.32xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.4xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.8xlarge",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.large",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.metal",
+  "Location": "aps1-az1"
+ },
+ {
+  "InstanceType": "c6in.xlarge",
+  "Location": "aps1-az1"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "aps1-az1"
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 8641a7fe7..cb3538b3c 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
@@ -583,14 +583,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "apse2-az1"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "apse2-az1"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "apse2-az1"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "apse2-az1"
@@ -1923,6 +1915,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "apse2-az1"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "apse2-az1"
+ },
  {
   "InstanceType": "u-3tb1.56xlarge",
   "Location": "apse2-az1"
@@ -3875,6 +3871,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "apse2-az2"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "apse2-az2"
+ },
  {
   "InstanceType": "u-6tb1.112xlarge",
   "Location": "apse2-az2"
@@ -4539,14 +4539,6 @@
   "InstanceType": "d3.xlarge",
   "Location": "apse2-az3"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "apse2-az3"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "apse2-az3"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "apse2-az3"
@@ -5795,6 +5787,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "apse2-az3"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "apse2-az3"
+ },
  {
   "InstanceType": "u-3tb1.56xlarge",
   "Location": "apse2-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json
index 45b06a4f7..29d7bc598 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-central-1.json
@@ -2675,6 +2675,46 @@
   "InstanceType": "c6id.xlarge",
   "Location": "euc1-az2"
  },
+ {
+  "InstanceType": "c6in.12xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.16xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.24xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.2xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.32xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.4xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.8xlarge",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.large",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.metal",
+  "Location": "euc1-az2"
+ },
+ {
+  "InstanceType": "c6in.xlarge",
+  "Location": "euc1-az2"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "euc1-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json
index a30c68df6..8476a5d4b 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json
@@ -503,6 +503,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "euw1-az1"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "euw1-az1"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "euw1-az1"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "euw1-az1"
@@ -2403,6 +2451,10 @@
   "InstanceType": "r7a.medium",
   "Location": "euw1-az1"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "euw1-az1"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "euw1-az1"
@@ -3299,6 +3351,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "euw1-az2"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "euw1-az2"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "euw1-az2"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "euw1-az2"
@@ -5203,6 +5303,10 @@
   "InstanceType": "r7a.medium",
   "Location": "euw1-az2"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "euw1-az2"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "euw1-az2"
@@ -6075,6 +6179,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "euw1-az3"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "euw1-az3"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "euw1-az3"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "euw1-az3"
@@ -7963,6 +8115,10 @@
   "InstanceType": "r7a.medium",
   "Location": "euw1-az3"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "euw1-az3"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "euw1-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 85f77420e..dcf55839f 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
@@ -1503,6 +1503,46 @@
   "InstanceType": "c6i.xlarge",
   "Location": "euw3-az2"
  },
+ {
+  "InstanceType": "c6in.12xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.16xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.24xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.2xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.32xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.4xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.8xlarge",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.large",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.metal",
+  "Location": "euw3-az2"
+ },
+ {
+  "InstanceType": "c6in.xlarge",
+  "Location": "euw3-az2"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "euw3-az2"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json
index 83c03d2e9..ba75765e8 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json
@@ -2659,6 +2659,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "use1-az2"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "use1-az2"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "use1-az2"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "use1-az2"
@@ -2835,14 +2883,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "use1-az2"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "use1-az2"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "use1-az2"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "use1-az2"
@@ -4579,6 +4619,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use1-az2"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use1-az2"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use1-az2"
@@ -5071,14 +5115,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "use1-az3"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "use1-az3"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "use1-az3"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "use1-az3"
@@ -5771,6 +5807,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "use1-az4"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "use1-az4"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "use1-az4"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "use1-az4"
@@ -5975,14 +6059,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "use1-az4"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "use1-az4"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "use1-az4"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "use1-az4"
@@ -7707,6 +7783,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use1-az4"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use1-az4"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use1-az4"
@@ -8567,6 +8647,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "use1-az5"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "use1-az5"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "use1-az5"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "use1-az5"
@@ -10215,6 +10343,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use1-az5"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use1-az5"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use1-az5"
@@ -11067,6 +11199,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "use1-az6"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "use1-az6"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "use1-az6"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "use1-az6"
@@ -11271,14 +11451,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "use1-az6"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "use1-az6"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "use1-az6"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "use1-az6"
@@ -13035,6 +13207,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use1-az6"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use1-az6"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use1-az6"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-2.json
index 80e9fa5ba..294c7e541 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-2.json
@@ -475,6 +475,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "use2-az1"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "use2-az1"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "use2-az1"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "use2-az1"
@@ -2307,6 +2355,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use2-az1"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use2-az1"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use2-az1"
@@ -4999,6 +5051,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use2-az2"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use2-az2"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use2-az2"
@@ -5763,6 +5819,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "use2-az3"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "use2-az3"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "use2-az3"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "use2-az3"
@@ -7591,6 +7695,10 @@
   "InstanceType": "r7a.medium",
   "Location": "use2-az3"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "use2-az3"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "use2-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 85dbe33df..bd4ef3201 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
@@ -367,6 +367,42 @@
   "InstanceType": "c6i.xlarge",
   "Location": "usw1-az1"
  },
+ {
+  "InstanceType": "c7g.12xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.16xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.2xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.4xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.8xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.large",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.medium",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.metal",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "c7g.xlarge",
+  "Location": "usw1-az1"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "usw1-az1"
@@ -935,6 +971,42 @@
   "InstanceType": "m6i.xlarge",
   "Location": "usw1-az1"
  },
+ {
+  "InstanceType": "m7g.12xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.16xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.2xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.4xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.8xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.large",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.medium",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.metal",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "m7g.xlarge",
+  "Location": "usw1-az1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "usw1-az1"
@@ -1263,6 +1335,42 @@
   "InstanceType": "r6i.xlarge",
   "Location": "usw1-az1"
  },
+ {
+  "InstanceType": "r7g.12xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.16xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.2xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.4xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.8xlarge",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.large",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.medium",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.metal",
+  "Location": "usw1-az1"
+ },
+ {
+  "InstanceType": "r7g.xlarge",
+  "Location": "usw1-az1"
+ },
  {
   "InstanceType": "t1.micro",
   "Location": "usw1-az1"
@@ -1823,6 +1931,42 @@
   "InstanceType": "c6i.xlarge",
   "Location": "usw1-az3"
  },
+ {
+  "InstanceType": "c7g.12xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.16xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.2xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.4xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.8xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.large",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.medium",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.metal",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "c7g.xlarge",
+  "Location": "usw1-az3"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "usw1-az3"
@@ -2391,6 +2535,42 @@
   "InstanceType": "m6i.xlarge",
   "Location": "usw1-az3"
  },
+ {
+  "InstanceType": "m7g.12xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.16xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.2xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.4xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.8xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.large",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.medium",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.metal",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "m7g.xlarge",
+  "Location": "usw1-az3"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "usw1-az3"
@@ -2719,6 +2899,42 @@
   "InstanceType": "r6i.xlarge",
   "Location": "usw1-az3"
  },
+ {
+  "InstanceType": "r7g.12xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.16xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.2xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.4xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.8xlarge",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.large",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.medium",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.metal",
+  "Location": "usw1-az3"
+ },
+ {
+  "InstanceType": "r7g.xlarge",
+  "Location": "usw1-az3"
+ },
  {
   "InstanceType": "t1.micro",
   "Location": "usw1-az3"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json
index e86e62234..ea926adc0 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json
@@ -479,6 +479,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "usw2-az1"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "usw2-az1"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "usw2-az1"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "usw2-az1"
@@ -687,14 +735,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "usw2-az1"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "usw2-az1"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "usw2-az1"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "usw2-az1"
@@ -2443,6 +2483,10 @@
   "InstanceType": "r7a.medium",
   "Location": "usw2-az1"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "usw2-az1"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "usw2-az1"
@@ -3587,14 +3631,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "usw2-az2"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "usw2-az2"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "usw2-az2"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "usw2-az2"
@@ -6167,6 +6203,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "usw2-az3"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "usw2-az3"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "usw2-az3"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "usw2-az3"
@@ -6371,14 +6455,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "usw2-az3"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "usw2-az3"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "usw2-az3"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "usw2-az3"
@@ -8127,6 +8203,10 @@
   "InstanceType": "r7a.medium",
   "Location": "usw2-az3"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "usw2-az3"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "usw2-az3"
@@ -8931,6 +9011,54 @@
   "InstanceType": "c6id.xlarge",
   "Location": "usw2-az4"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "usw2-az4"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "usw2-az4"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "usw2-az4"
@@ -9943,6 +10071,10 @@
   "InstanceType": "r7a.medium",
   "Location": "usw2-az4"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "usw2-az4"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "usw2-az4"
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 d1d5d89ab..f554979d8 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
@@ -331,6 +331,46 @@
   "InstanceType": "c6i.xlarge",
   "Location": "ap-south-1a"
  },
+ {
+  "InstanceType": "c6in.12xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.16xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.24xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.2xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.32xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.4xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.8xlarge",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.large",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.metal",
+  "Location": "ap-south-1a"
+ },
+ {
+  "InstanceType": "c6in.xlarge",
+  "Location": "ap-south-1a"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "ap-south-1a"
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 0dcd94932..40464a66f 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
@@ -547,14 +547,6 @@
   "InstanceType": "d3.xlarge",
   "Location": "ap-southeast-2a"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "ap-southeast-2a"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "ap-southeast-2a"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "ap-southeast-2a"
@@ -1803,6 +1795,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "ap-southeast-2a"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "ap-southeast-2a"
+ },
  {
   "InstanceType": "u-3tb1.56xlarge",
   "Location": "ap-southeast-2a"
@@ -2475,14 +2471,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "ap-southeast-2b"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "ap-southeast-2b"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "ap-southeast-2b"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "ap-southeast-2b"
@@ -3815,6 +3803,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "ap-southeast-2b"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "ap-southeast-2b"
+ },
  {
   "InstanceType": "u-3tb1.56xlarge",
   "Location": "ap-southeast-2b"
@@ -5767,6 +5759,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "ap-southeast-2c"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "ap-southeast-2c"
+ },
  {
   "InstanceType": "u-6tb1.112xlarge",
   "Location": "ap-southeast-2c"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json
index d33573bf0..0f5fc6fa8 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-central-1.json
@@ -455,6 +455,46 @@
   "InstanceType": "c6id.xlarge",
   "Location": "eu-central-1a"
  },
+ {
+  "InstanceType": "c6in.12xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.16xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.24xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.2xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.32xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.4xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.8xlarge",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.large",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.metal",
+  "Location": "eu-central-1a"
+ },
+ {
+  "InstanceType": "c6in.xlarge",
+  "Location": "eu-central-1a"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "eu-central-1a"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json
index ab9fddf75..8cf06573f 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json
@@ -503,6 +503,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "eu-west-1a"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "eu-west-1a"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "eu-west-1a"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "eu-west-1a"
@@ -2403,6 +2451,10 @@
   "InstanceType": "r7a.medium",
   "Location": "eu-west-1a"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "eu-west-1a"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "eu-west-1a"
@@ -3299,6 +3351,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "eu-west-1b"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "eu-west-1b"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "eu-west-1b"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "eu-west-1b"
@@ -5203,6 +5303,10 @@
   "InstanceType": "r7a.medium",
   "Location": "eu-west-1b"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "eu-west-1b"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "eu-west-1b"
@@ -6075,6 +6179,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "eu-west-1c"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "eu-west-1c"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "eu-west-1c"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "eu-west-1c"
@@ -7963,6 +8115,10 @@
   "InstanceType": "r7a.medium",
   "Location": "eu-west-1c"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "eu-west-1c"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "eu-west-1c"
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 f386aeabd..2ee189f67 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
@@ -1503,6 +1503,46 @@
   "InstanceType": "c6i.xlarge",
   "Location": "eu-west-3b"
  },
+ {
+  "InstanceType": "c6in.12xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.16xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.24xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.2xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.32xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.4xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.8xlarge",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.large",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.metal",
+  "Location": "eu-west-3b"
+ },
+ {
+  "InstanceType": "c6in.xlarge",
+  "Location": "eu-west-3b"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "eu-west-3b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json
index 9232b52a0..afb792a72 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json
@@ -2659,6 +2659,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-1b"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-1b"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-1b"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-1b"
@@ -2835,14 +2883,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-east-1b"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-east-1b"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-east-1b"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-east-1b"
@@ -4579,6 +4619,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-1b"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-1b"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-1b"
@@ -5507,6 +5551,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-1c"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-1c"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-1c"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-1c"
@@ -5711,14 +5803,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-east-1c"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-east-1c"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-east-1c"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-east-1c"
@@ -7443,6 +7527,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-1c"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-1c"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-1c"
@@ -8367,6 +8455,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-1d"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-1d"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-1d"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-1d"
@@ -8571,14 +8707,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-east-1d"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-east-1d"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-east-1d"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-east-1d"
@@ -10335,6 +10463,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-1d"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-1d"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-1d"
@@ -10831,14 +10963,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-east-1e"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-east-1e"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-east-1e"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-east-1e"
@@ -11467,6 +11591,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-1f"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-1f"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-1f"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-1f"
@@ -13115,6 +13287,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-1f"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-1f"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-1f"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-2.json
index 354a4c752..cd8beee8f 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-2.json
@@ -475,6 +475,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-2a"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-2a"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-2a"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-2a"
@@ -2307,6 +2355,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-2a"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-2a"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-2a"
@@ -4999,6 +5051,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-2b"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-2b"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-2b"
@@ -5763,6 +5819,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-2c"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-2c"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-2c"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-2c"
@@ -7591,6 +7695,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-2c"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-2c"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-2c"
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 67eeb0f14..3f77714a5 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
@@ -367,6 +367,42 @@
   "InstanceType": "c6i.xlarge",
   "Location": "us-west-1a"
  },
+ {
+  "InstanceType": "c7g.12xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.16xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.2xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.4xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.8xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.large",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.medium",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.metal",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "c7g.xlarge",
+  "Location": "us-west-1a"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "us-west-1a"
@@ -935,6 +971,42 @@
   "InstanceType": "m6i.xlarge",
   "Location": "us-west-1a"
  },
+ {
+  "InstanceType": "m7g.12xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.16xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.2xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.4xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.8xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.large",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.medium",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.metal",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "m7g.xlarge",
+  "Location": "us-west-1a"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "us-west-1a"
@@ -1263,6 +1335,42 @@
   "InstanceType": "r6i.xlarge",
   "Location": "us-west-1a"
  },
+ {
+  "InstanceType": "r7g.12xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.16xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.2xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.4xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.8xlarge",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.large",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.medium",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.metal",
+  "Location": "us-west-1a"
+ },
+ {
+  "InstanceType": "r7g.xlarge",
+  "Location": "us-west-1a"
+ },
  {
   "InstanceType": "t1.micro",
   "Location": "us-west-1a"
@@ -1823,6 +1931,42 @@
   "InstanceType": "c6i.xlarge",
   "Location": "us-west-1b"
  },
+ {
+  "InstanceType": "c7g.12xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.16xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.2xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.4xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.8xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.large",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.medium",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.metal",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "c7g.xlarge",
+  "Location": "us-west-1b"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "us-west-1b"
@@ -2391,6 +2535,42 @@
   "InstanceType": "m6i.xlarge",
   "Location": "us-west-1b"
  },
+ {
+  "InstanceType": "m7g.12xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.16xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.2xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.4xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.8xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.large",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.medium",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.metal",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "m7g.xlarge",
+  "Location": "us-west-1b"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "us-west-1b"
@@ -2719,6 +2899,42 @@
   "InstanceType": "r6i.xlarge",
   "Location": "us-west-1b"
  },
+ {
+  "InstanceType": "r7g.12xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.16xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.2xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.4xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.8xlarge",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.large",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.medium",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.metal",
+  "Location": "us-west-1b"
+ },
+ {
+  "InstanceType": "r7g.xlarge",
+  "Location": "us-west-1b"
+ },
  {
   "InstanceType": "t1.micro",
   "Location": "us-west-1b"
diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json
index a756b5ddd..e4e1d1fce 100644
--- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json
+++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json
@@ -479,6 +479,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-west-2a"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-west-2a"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-west-2a"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-west-2a"
@@ -687,14 +735,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-west-2a"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-west-2a"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-west-2a"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-west-2a"
@@ -2443,6 +2483,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-west-2a"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-west-2a"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-west-2a"
@@ -3587,14 +3631,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-west-2b"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-west-2b"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-west-2b"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-west-2b"
@@ -6167,6 +6203,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-west-2c"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-west-2c"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-west-2c"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-west-2c"
@@ -6371,14 +6455,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-west-2c"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-west-2c"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-west-2c"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-west-2c"
@@ -8127,6 +8203,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-west-2c"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-west-2c"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-west-2c"
@@ -8931,6 +9011,54 @@
   "InstanceType": "c6id.xlarge",
   "Location": "us-west-2d"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-west-2d"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-west-2d"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-west-2d"
@@ -9943,6 +10071,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-west-2d"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-west-2d"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-west-2d"
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 16315a7d7..2a8d6df2c 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
@@ -583,14 +583,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "ap-southeast-2"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "ap-southeast-2"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "ap-southeast-2"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "ap-southeast-2"
@@ -1923,6 +1915,10 @@
   "InstanceType": "t4g.xlarge",
   "Location": "ap-southeast-2"
  },
+ {
+  "InstanceType": "u-12tb1.112xlarge",
+  "Location": "ap-southeast-2"
+ },
  {
   "InstanceType": "u-3tb1.56xlarge",
   "Location": "ap-southeast-2"
diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json b/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json
index a654f2909..595bba45d 100644
--- a/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json
@@ -503,6 +503,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "eu-west-1"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "eu-west-1"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "eu-west-1"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "eu-west-1"
@@ -2435,6 +2483,10 @@
   "InstanceType": "r7a.medium",
   "Location": "eu-west-1"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "eu-west-1"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "eu-west-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/us-east-1.json b/moto/ec2/resources/instance_type_offerings/region/us-east-1.json
index 933fdc238..c281ed0c9 100644
--- a/moto/ec2/resources/instance_type_offerings/region/us-east-1.json
+++ b/moto/ec2/resources/instance_type_offerings/region/us-east-1.json
@@ -503,6 +503,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-1"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-1"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-1"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-1"
@@ -711,14 +759,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-east-1"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-east-1"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-east-1"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-east-1"
@@ -2479,6 +2519,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-1"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-1"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/us-east-2.json b/moto/ec2/resources/instance_type_offerings/region/us-east-2.json
index e8ac697a6..cebec84c6 100644
--- a/moto/ec2/resources/instance_type_offerings/region/us-east-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/us-east-2.json
@@ -475,6 +475,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-east-2"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-east-2"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-east-2"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-east-2"
@@ -2347,6 +2395,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-east-2"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-east-2"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-east-2"
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 aa4f6bc2d..fea11e000 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
@@ -367,6 +367,42 @@
   "InstanceType": "c6i.xlarge",
   "Location": "us-west-1"
  },
+ {
+  "InstanceType": "c7g.12xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.16xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.2xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.4xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.8xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.large",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.medium",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.metal",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "c7g.xlarge",
+  "Location": "us-west-1"
+ },
  {
   "InstanceType": "d2.2xlarge",
   "Location": "us-west-1"
@@ -935,6 +971,42 @@
   "InstanceType": "m6i.xlarge",
   "Location": "us-west-1"
  },
+ {
+  "InstanceType": "m7g.12xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.16xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.2xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.4xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.8xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.large",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.medium",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.metal",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "m7g.xlarge",
+  "Location": "us-west-1"
+ },
  {
   "InstanceType": "r3.2xlarge",
   "Location": "us-west-1"
@@ -1263,6 +1335,42 @@
   "InstanceType": "r6i.xlarge",
   "Location": "us-west-1"
  },
+ {
+  "InstanceType": "r7g.12xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.16xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.2xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.4xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.8xlarge",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.large",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.medium",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.metal",
+  "Location": "us-west-1"
+ },
+ {
+  "InstanceType": "r7g.xlarge",
+  "Location": "us-west-1"
+ },
  {
   "InstanceType": "t1.micro",
   "Location": "us-west-1"
diff --git a/moto/ec2/resources/instance_type_offerings/region/us-west-2.json b/moto/ec2/resources/instance_type_offerings/region/us-west-2.json
index 7e9f62423..ae108518d 100644
--- a/moto/ec2/resources/instance_type_offerings/region/us-west-2.json
+++ b/moto/ec2/resources/instance_type_offerings/region/us-west-2.json
@@ -503,6 +503,54 @@
   "InstanceType": "c6in.xlarge",
   "Location": "us-west-2"
  },
+ {
+  "InstanceType": "c7a.12xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.16xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.24xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.2xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.32xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.48xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.4xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.8xlarge",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.large",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.medium",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.metal-48xl",
+  "Location": "us-west-2"
+ },
+ {
+  "InstanceType": "c7a.xlarge",
+  "Location": "us-west-2"
+ },
  {
   "InstanceType": "c7g.12xlarge",
   "Location": "us-west-2"
@@ -711,14 +759,6 @@
   "InstanceType": "f1.4xlarge",
   "Location": "us-west-2"
  },
- {
-  "InstanceType": "g2.2xlarge",
-  "Location": "us-west-2"
- },
- {
-  "InstanceType": "g2.8xlarge",
-  "Location": "us-west-2"
- },
  {
   "InstanceType": "g3.16xlarge",
   "Location": "us-west-2"
@@ -2471,6 +2511,10 @@
   "InstanceType": "r7a.medium",
   "Location": "us-west-2"
  },
+ {
+  "InstanceType": "r7a.metal-48xl",
+  "Location": "us-west-2"
+ },
  {
   "InstanceType": "r7a.xlarge",
   "Location": "us-west-2"
diff --git a/moto/ec2/resources/instance_types.json b/moto/ec2/resources/instance_types.json
index ed3a788e7..48f28dbc6 100644
--- a/moto/ec2/resources/instance_types.json
+++ b/moto/ec2/resources/instance_types.json
@@ -13353,6 +13353,1181 @@
    ]
   }
  },
+ "c7a.12xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 15000,
+    "BaselineIops": 60000,
+    "BaselineThroughputInMBps": 1875.0,
+    "MaximumBandwidthInMbps": 15000,
+    "MaximumIops": 60000,
+    "MaximumThroughputInMBps": 1875.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.12xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 98304
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 30,
+   "Ipv6AddressesPerInterface": 30,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 8,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 18.75,
+     "MaximumNetworkInterfaces": 8,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "18.75 Gigabit",
+     "PeakBandwidthInGbps": 18.75
+    }
+   ],
+   "NetworkPerformance": "18.75 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 48,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 48,
+   "ValidCores": [
+    1,
+    2,
+    3,
+    4,
+    5,
+    6,
+    12,
+    18,
+    24,
+    30,
+    36,
+    42,
+    48
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.16xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 20000,
+    "BaselineIops": 80000,
+    "BaselineThroughputInMBps": 2500.0,
+    "MaximumBandwidthInMbps": 20000,
+    "MaximumIops": 80000,
+    "MaximumThroughputInMBps": 2500.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.16xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 131072
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 50,
+   "Ipv6AddressesPerInterface": 50,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 15,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 25.0,
+     "MaximumNetworkInterfaces": 15,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "25 Gigabit",
+     "PeakBandwidthInGbps": 25.0
+    }
+   ],
+   "NetworkPerformance": "25 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 64,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 64,
+   "ValidCores": [
+    1,
+    2,
+    3,
+    4,
+    5,
+    6,
+    7,
+    8,
+    16,
+    24,
+    32,
+    40,
+    48,
+    56,
+    64
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.24xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 30000,
+    "BaselineIops": 120000,
+    "BaselineThroughputInMBps": 3750.0,
+    "MaximumBandwidthInMbps": 30000,
+    "MaximumIops": 120000,
+    "MaximumThroughputInMBps": 3750.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.24xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 196608
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 50,
+   "Ipv6AddressesPerInterface": 50,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 15,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 37.5,
+     "MaximumNetworkInterfaces": 15,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "37.5 Gigabit",
+     "PeakBandwidthInGbps": 37.5
+    }
+   ],
+   "NetworkPerformance": "37.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 96,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 96,
+   "ValidCores": [
+    1,
+    2,
+    3,
+    4,
+    5,
+    6,
+    7,
+    8,
+    9,
+    10,
+    11,
+    12,
+    24,
+    36,
+    48,
+    60,
+    72,
+    84,
+    96
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.2xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 2500,
+    "BaselineIops": 12000,
+    "BaselineThroughputInMBps": 312.5,
+    "MaximumBandwidthInMbps": 10000,
+    "MaximumIops": 40000,
+    "MaximumThroughputInMBps": 1250.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.2xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 16384
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 15,
+   "Ipv6AddressesPerInterface": 15,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 4,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 3.125,
+     "MaximumNetworkInterfaces": 4,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "Up to 12.5 Gigabit",
+     "PeakBandwidthInGbps": 12.5
+    }
+   ],
+   "NetworkPerformance": "Up to 12.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 8,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 8,
+   "ValidCores": [
+    1,
+    2,
+    3,
+    4,
+    5,
+    6,
+    7,
+    8
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.32xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 40000,
+    "BaselineIops": 160000,
+    "BaselineThroughputInMBps": 5000.0,
+    "MaximumBandwidthInMbps": 40000,
+    "MaximumIops": 160000,
+    "MaximumThroughputInMBps": 5000.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.32xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 262144
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 50,
+   "Ipv6AddressesPerInterface": 50,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 15,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 50.0,
+     "MaximumNetworkInterfaces": 15,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "50 Gigabit",
+     "PeakBandwidthInGbps": 50.0
+    }
+   ],
+   "NetworkPerformance": "50 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 128,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 128,
+   "ValidCores": [
+    4,
+    6,
+    8,
+    10,
+    12,
+    14,
+    16,
+    32,
+    48,
+    64,
+    80,
+    96,
+    112,
+    128
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.48xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 40000,
+    "BaselineIops": 240000,
+    "BaselineThroughputInMBps": 5000.0,
+    "MaximumBandwidthInMbps": 40000,
+    "MaximumIops": 240000,
+    "MaximumThroughputInMBps": 5000.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.48xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 393216
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaInfo": {
+    "MaximumEfaInterfaces": 1
+   },
+   "EfaSupported": true,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 50,
+   "Ipv6AddressesPerInterface": 50,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 15,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 50.0,
+     "MaximumNetworkInterfaces": 15,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "50 Gigabit",
+     "PeakBandwidthInGbps": 50.0
+    }
+   ],
+   "NetworkPerformance": "50 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 192,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 192,
+   "ValidCores": [
+    4,
+    6,
+    8,
+    10,
+    12,
+    14,
+    16,
+    18,
+    20,
+    22,
+    24,
+    48,
+    72,
+    96,
+    120,
+    144,
+    168,
+    192
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.4xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 5000,
+    "BaselineIops": 20000,
+    "BaselineThroughputInMBps": 625.0,
+    "MaximumBandwidthInMbps": 10000,
+    "MaximumIops": 40000,
+    "MaximumThroughputInMBps": 1250.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.4xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 32768
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 30,
+   "Ipv6AddressesPerInterface": 30,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 8,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 6.25,
+     "MaximumNetworkInterfaces": 8,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "Up to 12.5 Gigabit",
+     "PeakBandwidthInGbps": 12.5
+    }
+   ],
+   "NetworkPerformance": "Up to 12.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 16,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 16,
+   "ValidCores": [
+    1,
+    2,
+    4,
+    6,
+    8,
+    10,
+    12,
+    14,
+    16
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.8xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 10000,
+    "BaselineIops": 40000,
+    "BaselineThroughputInMBps": 1250.0,
+    "MaximumBandwidthInMbps": 10000,
+    "MaximumIops": 40000,
+    "MaximumThroughputInMBps": 1250.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.8xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 65536
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 30,
+   "Ipv6AddressesPerInterface": 30,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 8,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 12.5,
+     "MaximumNetworkInterfaces": 8,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "12.5 Gigabit",
+     "PeakBandwidthInGbps": 12.5
+    }
+   ],
+   "NetworkPerformance": "12.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 32,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 32,
+   "ValidCores": [
+    1,
+    2,
+    3,
+    4,
+    8,
+    12,
+    16,
+    20,
+    24,
+    28,
+    32
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.large": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 650,
+    "BaselineIops": 3600,
+    "BaselineThroughputInMBps": 81.25,
+    "MaximumBandwidthInMbps": 10000,
+    "MaximumIops": 40000,
+    "MaximumThroughputInMBps": 1250.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.large",
+  "MemoryInfo": {
+   "SizeInMiB": 4096
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 10,
+   "Ipv6AddressesPerInterface": 10,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 3,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 0.781,
+     "MaximumNetworkInterfaces": 3,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "Up to 12.5 Gigabit",
+     "PeakBandwidthInGbps": 12.5
+    }
+   ],
+   "NetworkPerformance": "Up to 12.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 2,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 2,
+   "ValidCores": [
+    1,
+    2
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
+ "c7a.medium": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 325,
+    "BaselineIops": 2500,
+    "BaselineThroughputInMBps": 40.625,
+    "MaximumBandwidthInMbps": 10000,
+    "MaximumIops": 40000,
+    "MaximumThroughputInMBps": 1250.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.medium",
+  "MemoryInfo": {
+   "SizeInMiB": 2048
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 4,
+   "Ipv6AddressesPerInterface": 4,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 2,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 0.39,
+     "MaximumNetworkInterfaces": 2,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "Up to 12.5 Gigabit",
+     "PeakBandwidthInGbps": 12.5
+    }
+   ],
+   "NetworkPerformance": "Up to 12.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 1,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 1
+  }
+ },
+ "c7a.metal-48xl": {
+  "AutoRecoverySupported": true,
+  "BareMetal": true,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 40000,
+    "BaselineIops": 240000,
+    "BaselineThroughputInMBps": 5000.0,
+    "MaximumBandwidthInMbps": 40000,
+    "MaximumIops": 240000,
+    "MaximumThroughputInMBps": 5000.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.metal-48xl",
+  "MemoryInfo": {
+   "SizeInMiB": 393216
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaInfo": {
+    "MaximumEfaInterfaces": 1
+   },
+   "EfaSupported": true,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 50,
+   "Ipv6AddressesPerInterface": 50,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 15,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 50.0,
+     "MaximumNetworkInterfaces": 15,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "50 Gigabit",
+     "PeakBandwidthInGbps": 50.0
+    }
+   ],
+   "NetworkPerformance": "50 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 192,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 192
+  }
+ },
+ "c7a.xlarge": {
+  "AutoRecoverySupported": true,
+  "BareMetal": false,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 1250,
+    "BaselineIops": 6000,
+    "BaselineThroughputInMBps": 156.25,
+    "MaximumBandwidthInMbps": 10000,
+    "MaximumIops": 40000,
+    "MaximumThroughputInMBps": 1250.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "Hypervisor": "nitro",
+  "InstanceStorageSupported": false,
+  "InstanceType": "c7a.xlarge",
+  "MemoryInfo": {
+   "SizeInMiB": 8192
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaSupported": false,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 15,
+   "Ipv6AddressesPerInterface": 15,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 4,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 1.562,
+     "MaximumNetworkInterfaces": 4,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "Up to 12.5 Gigabit",
+     "PeakBandwidthInGbps": 12.5
+    }
+   ],
+   "NetworkPerformance": "Up to 12.5 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios",
+   "uefi"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 4,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 4,
+   "ValidCores": [
+    1,
+    2,
+    3,
+    4
+   ],
+   "ValidThreadsPerCore": [
+    1
+   ]
+  }
+ },
  "c7g.12xlarge": {
   "AutoRecoverySupported": true,
   "BareMetal": false,
@@ -19118,290 +20293,57 @@
    ]
   }
  },
- "f1.4xlarge": {
-  "AutoRecoverySupported": false,
-  "BareMetal": false,
-  "BurstablePerformanceSupported": false,
-  "CurrentGeneration": true,
-  "DedicatedHostsSupported": true,
-  "EbsInfo": {
-   "EbsOptimizedInfo": {
-    "BaselineBandwidthInMbps": 3500,
-    "BaselineIops": 44000,
-    "BaselineThroughputInMBps": 437.5,
-    "MaximumBandwidthInMbps": 3500,
-    "MaximumIops": 44000,
-    "MaximumThroughputInMBps": 437.5
-   },
-   "EbsOptimizedSupport": "default",
-   "EncryptionSupport": "supported",
-   "NvmeSupport": "supported"
-  },
-  "FpgaInfo": {
-   "Fpgas": [
-    {
-     "Count": 2,
-     "Manufacturer": "Xilinx",
-     "MemoryInfo": {
-      "SizeInMiB": 65536
-     },
-     "Name": "Virtex UltraScale (VU9P)"
-    }
-   ],
-   "TotalFpgaMemoryInMiB": 131072
-  },
-  "FreeTierEligible": false,
-  "HibernationSupported": false,
-  "Hypervisor": "xen",
-  "InstanceStorageInfo": {
-   "Disks": [
-    {
-     "Count": 1,
-     "SizeInGB": 940,
-     "Type": "ssd"
-    }
-   ],
-   "EncryptionSupport": "required",
-   "NvmeSupport": "required",
-   "TotalSizeInGB": 940
-  },
-  "InstanceStorageSupported": true,
-  "InstanceType": "f1.4xlarge",
-  "MemoryInfo": {
-   "SizeInMiB": 249856
-  },
-  "NetworkInfo": {
-   "DefaultNetworkCardIndex": 0,
-   "EfaSupported": false,
-   "EnaSrdSupported": false,
-   "EnaSupport": "unsupported",
-   "EncryptionInTransitSupported": false,
-   "Ipv4AddressesPerInterface": 30,
-   "Ipv6AddressesPerInterface": 30,
-   "Ipv6Supported": true,
-   "MaximumNetworkCards": 1,
-   "MaximumNetworkInterfaces": 8,
-   "NetworkCards": [
-    {
-     "BaselineBandwidthInGbps": 5.0,
-     "MaximumNetworkInterfaces": 8,
-     "NetworkCardIndex": 0,
-     "NetworkPerformance": "Up to 10 Gigabit",
-     "PeakBandwidthInGbps": 10.0
-    }
-   ],
-   "NetworkPerformance": "Up to 10 Gigabit"
-  },
-  "NitroEnclavesSupport": "unsupported",
-  "NitroTpmSupport": "unsupported",
-  "PlacementGroupInfo": {
-   "SupportedStrategies": [
-    "cluster",
-    "partition",
-    "spread"
-   ]
-  },
-  "ProcessorInfo": {
-   "SupportedArchitectures": [
-    "x86_64"
-   ],
-   "SustainedClockSpeedInGhz": 2.3
-  },
-  "SupportedBootModes": [
-   "legacy-bios"
-  ],
-  "SupportedRootDeviceTypes": [
-   "ebs"
-  ],
-  "SupportedUsageClasses": [
-   "on-demand",
-   "spot"
-  ],
-  "SupportedVirtualizationTypes": [
-   "hvm"
-  ],
-  "VCpuInfo": {
-   "DefaultCores": 8,
-   "DefaultThreadsPerCore": 2,
-   "DefaultVCpus": 16,
-   "ValidCores": [
-    1,
-    2,
-    3,
-    4,
-    5,
-    6,
-    7,
-    8
-   ],
-   "ValidThreadsPerCore": [
-    1,
-    2
-   ]
-  }
- },
- "g2.2xlarge": {
-  "AutoRecoverySupported": false,
-  "BareMetal": false,
-  "BurstablePerformanceSupported": false,
-  "CurrentGeneration": false,
-  "DedicatedHostsSupported": true,
-  "EbsInfo": {
-   "EbsOptimizedInfo": {
-    "BaselineBandwidthInMbps": 1000,
-    "BaselineIops": 8000,
-    "BaselineThroughputInMBps": 125.0,
-    "MaximumBandwidthInMbps": 1000,
-    "MaximumIops": 8000,
-    "MaximumThroughputInMBps": 125.0
-   },
-   "EbsOptimizedSupport": "supported",
-   "EncryptionSupport": "supported",
-   "NvmeSupport": "unsupported"
-  },
-  "FreeTierEligible": false,
-  "GpuInfo": {
-   "Gpus": [
-    {
-     "Count": 1,
-     "Manufacturer": "NVIDIA",
-     "MemoryInfo": {
-      "SizeInMiB": 4096
-     },
-     "Name": "K520"
-    }
-   ],
-   "TotalGpuMemoryInMiB": 4096
-  },
-  "HibernationSupported": false,
-  "Hypervisor": "xen",
-  "InstanceStorageInfo": {
-   "Disks": [
-    {
-     "Count": 1,
-     "SizeInGB": 60,
-     "Type": "ssd"
-    }
-   ],
-   "EncryptionSupport": "unsupported",
-   "NvmeSupport": "unsupported",
-   "TotalSizeInGB": 60
-  },
-  "InstanceStorageSupported": true,
-  "InstanceType": "g2.2xlarge",
-  "MemoryInfo": {
-   "SizeInMiB": 15360
-  },
-  "NetworkInfo": {
-   "DefaultNetworkCardIndex": 0,
-   "EfaSupported": false,
-   "EnaSrdSupported": false,
-   "EnaSupport": "unsupported",
-   "EncryptionInTransitSupported": false,
-   "Ipv4AddressesPerInterface": 15,
-   "Ipv6AddressesPerInterface": 0,
-   "Ipv6Supported": false,
-   "MaximumNetworkCards": 1,
-   "MaximumNetworkInterfaces": 4,
-   "NetworkCards": [
-    {
-     "BaselineBandwidthInGbps": 1.0,
-     "MaximumNetworkInterfaces": 4,
-     "NetworkCardIndex": 0,
-     "NetworkPerformance": "Moderate",
-     "PeakBandwidthInGbps": 10.0
-    }
-   ],
-   "NetworkPerformance": "Moderate"
-  },
-  "NitroEnclavesSupport": "unsupported",
-  "NitroTpmSupport": "unsupported",
-  "PlacementGroupInfo": {
-   "SupportedStrategies": [
-    "cluster",
-    "partition",
-    "spread"
-   ]
-  },
-  "ProcessorInfo": {
-   "SupportedArchitectures": [
-    "x86_64"
-   ],
-   "SustainedClockSpeedInGhz": 2.6
-  },
-  "SupportedBootModes": [
-   "legacy-bios"
-  ],
-  "SupportedRootDeviceTypes": [
-   "ebs",
-   "instance-store"
-  ],
-  "SupportedUsageClasses": [
-   "on-demand",
-   "spot"
-  ],
-  "SupportedVirtualizationTypes": [
-   "hvm"
-  ],
-  "VCpuInfo": {
-   "DefaultCores": 4,
-   "DefaultThreadsPerCore": 2,
-   "DefaultVCpus": 8,
-   "ValidCores": [
-    1,
-    2,
-    3,
-    4
-   ],
-   "ValidThreadsPerCore": [
-    1,
-    2
-   ]
-  }
- },
- "g2.8xlarge": {
+ "f1.4xlarge": {
   "AutoRecoverySupported": false,
   "BareMetal": false,
   "BurstablePerformanceSupported": false,
-  "CurrentGeneration": false,
+  "CurrentGeneration": true,
   "DedicatedHostsSupported": true,
   "EbsInfo": {
-   "EbsOptimizedSupport": "unsupported",
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 3500,
+    "BaselineIops": 44000,
+    "BaselineThroughputInMBps": 437.5,
+    "MaximumBandwidthInMbps": 3500,
+    "MaximumIops": 44000,
+    "MaximumThroughputInMBps": 437.5
+   },
+   "EbsOptimizedSupport": "default",
    "EncryptionSupport": "supported",
-   "NvmeSupport": "unsupported"
+   "NvmeSupport": "supported"
   },
-  "FreeTierEligible": false,
-  "GpuInfo": {
-   "Gpus": [
+  "FpgaInfo": {
+   "Fpgas": [
     {
-     "Count": 4,
-     "Manufacturer": "NVIDIA",
+     "Count": 2,
+     "Manufacturer": "Xilinx",
      "MemoryInfo": {
-      "SizeInMiB": 4096
+      "SizeInMiB": 65536
      },
-     "Name": "K520"
+     "Name": "Virtex UltraScale (VU9P)"
     }
    ],
-   "TotalGpuMemoryInMiB": 16384
+   "TotalFpgaMemoryInMiB": 131072
   },
+  "FreeTierEligible": false,
   "HibernationSupported": false,
   "Hypervisor": "xen",
   "InstanceStorageInfo": {
    "Disks": [
     {
-     "Count": 2,
-     "SizeInGB": 120,
+     "Count": 1,
+     "SizeInGB": 940,
      "Type": "ssd"
     }
    ],
-   "EncryptionSupport": "unsupported",
-   "NvmeSupport": "unsupported",
-   "TotalSizeInGB": 240
+   "EncryptionSupport": "required",
+   "NvmeSupport": "required",
+   "TotalSizeInGB": 940
   },
   "InstanceStorageSupported": true,
-  "InstanceType": "g2.8xlarge",
+  "InstanceType": "f1.4xlarge",
   "MemoryInfo": {
-   "SizeInMiB": 61440
+   "SizeInMiB": 249856
   },
   "NetworkInfo": {
    "DefaultNetworkCardIndex": 0,
@@ -19410,20 +20352,20 @@
    "EnaSupport": "unsupported",
    "EncryptionInTransitSupported": false,
    "Ipv4AddressesPerInterface": 30,
-   "Ipv6AddressesPerInterface": 0,
-   "Ipv6Supported": false,
+   "Ipv6AddressesPerInterface": 30,
+   "Ipv6Supported": true,
    "MaximumNetworkCards": 1,
    "MaximumNetworkInterfaces": 8,
    "NetworkCards": [
     {
-     "BaselineBandwidthInGbps": 2.0,
+     "BaselineBandwidthInGbps": 5.0,
      "MaximumNetworkInterfaces": 8,
      "NetworkCardIndex": 0,
-     "NetworkPerformance": "High",
+     "NetworkPerformance": "Up to 10 Gigabit",
      "PeakBandwidthInGbps": 10.0
     }
    ],
-   "NetworkPerformance": "High"
+   "NetworkPerformance": "Up to 10 Gigabit"
   },
   "NitroEnclavesSupport": "unsupported",
   "NitroTpmSupport": "unsupported",
@@ -19438,14 +20380,13 @@
    "SupportedArchitectures": [
     "x86_64"
    ],
-   "SustainedClockSpeedInGhz": 2.6
+   "SustainedClockSpeedInGhz": 2.3
   },
   "SupportedBootModes": [
    "legacy-bios"
   ],
   "SupportedRootDeviceTypes": [
-   "ebs",
-   "instance-store"
+   "ebs"
   ],
   "SupportedUsageClasses": [
    "on-demand",
@@ -19455,18 +20396,18 @@
    "hvm"
   ],
   "VCpuInfo": {
-   "DefaultCores": 16,
+   "DefaultCores": 8,
    "DefaultThreadsPerCore": 2,
-   "DefaultVCpus": 32,
+   "DefaultVCpus": 16,
    "ValidCores": [
+    1,
     2,
+    3,
     4,
+    5,
     6,
-    8,
-    10,
-    12,
-    14,
-    16
+    7,
+    8
    ],
    "ValidThreadsPerCore": [
     1,
@@ -68313,6 +69254,91 @@
    "DefaultVCpus": 1
   }
  },
+ "r7a.metal-48xl": {
+  "AutoRecoverySupported": true,
+  "BareMetal": true,
+  "BurstablePerformanceSupported": false,
+  "CurrentGeneration": true,
+  "DedicatedHostsSupported": true,
+  "EbsInfo": {
+   "EbsOptimizedInfo": {
+    "BaselineBandwidthInMbps": 40000,
+    "BaselineIops": 240000,
+    "BaselineThroughputInMBps": 5000.0,
+    "MaximumBandwidthInMbps": 40000,
+    "MaximumIops": 240000,
+    "MaximumThroughputInMBps": 5000.0
+   },
+   "EbsOptimizedSupport": "default",
+   "EncryptionSupport": "supported",
+   "NvmeSupport": "required"
+  },
+  "FreeTierEligible": false,
+  "HibernationSupported": false,
+  "InstanceStorageSupported": false,
+  "InstanceType": "r7a.metal-48xl",
+  "MemoryInfo": {
+   "SizeInMiB": 1572864
+  },
+  "NetworkInfo": {
+   "DefaultNetworkCardIndex": 0,
+   "EfaInfo": {
+    "MaximumEfaInterfaces": 1
+   },
+   "EfaSupported": true,
+   "EnaSrdSupported": false,
+   "EnaSupport": "required",
+   "EncryptionInTransitSupported": true,
+   "Ipv4AddressesPerInterface": 50,
+   "Ipv6AddressesPerInterface": 50,
+   "Ipv6Supported": true,
+   "MaximumNetworkCards": 1,
+   "MaximumNetworkInterfaces": 15,
+   "NetworkCards": [
+    {
+     "BaselineBandwidthInGbps": 50.0,
+     "MaximumNetworkInterfaces": 15,
+     "NetworkCardIndex": 0,
+     "NetworkPerformance": "50 Gigabit",
+     "PeakBandwidthInGbps": 50.0
+    }
+   ],
+   "NetworkPerformance": "50 Gigabit"
+  },
+  "NitroEnclavesSupport": "unsupported",
+  "NitroTpmSupport": "unsupported",
+  "PlacementGroupInfo": {
+   "SupportedStrategies": [
+    "cluster",
+    "partition",
+    "spread"
+   ]
+  },
+  "ProcessorInfo": {
+   "SupportedArchitectures": [
+    "x86_64"
+   ],
+   "SustainedClockSpeedInGhz": 3.7
+  },
+  "SupportedBootModes": [
+   "legacy-bios"
+  ],
+  "SupportedRootDeviceTypes": [
+   "ebs"
+  ],
+  "SupportedUsageClasses": [
+   "on-demand",
+   "spot"
+  ],
+  "SupportedVirtualizationTypes": [
+   "hvm"
+  ],
+  "VCpuInfo": {
+   "DefaultCores": 192,
+   "DefaultThreadsPerCore": 1,
+   "DefaultVCpus": 192
+  }
+ },
  "r7a.xlarge": {
   "AutoRecoverySupported": true,
   "BareMetal": false,
diff --git a/moto/elbv2/exceptions.py b/moto/elbv2/exceptions.py
index dd2fa6ee9..469758e7b 100644
--- a/moto/elbv2/exceptions.py
+++ b/moto/elbv2/exceptions.py
@@ -187,3 +187,8 @@ class InvalidLoadBalancerActionException(ELBClientError):
 class ValidationError(ELBClientError):
     def __init__(self, msg: str):
         super().__init__("ValidationError", msg)
+
+
+class InvalidConfigurationRequest(ELBClientError):
+    def __init__(self, msg: str):
+        super().__init__("InvalidConfigurationRequest", msg)
diff --git a/moto/elbv2/models.py b/moto/elbv2/models.py
index 70c83fd7f..11c31ce39 100644
--- a/moto/elbv2/models.py
+++ b/moto/elbv2/models.py
@@ -36,6 +36,7 @@ from .exceptions import (
     InvalidStatusCodeActionTypeError,
     InvalidLoadBalancerActionException,
     ValidationError,
+    InvalidConfigurationRequest,
 )
 
 ALLOWED_ACTIONS = [
@@ -1257,6 +1258,72 @@ Member must satisfy regular expression pattern: {expression}"
         if not target_group:
             raise TargetGroupNotFoundError()
 
+        deregistration_delay_timeout_seconds = attributes.get(
+            "deregistration_delay.timeout_seconds"
+        )
+        if deregistration_delay_timeout_seconds:
+            if int(deregistration_delay_timeout_seconds) not in range(0, 3600):
+                raise ValidationError(
+                    f"'deregistration_delay.timeout_seconds' value '{deregistration_delay_timeout_seconds}' must be between '0-3600' inclusive"
+                )
+            if target_group.target_type == "lambda":
+                raise InvalidConfigurationRequest(
+                    "A target group with target type 'lambda' does not support the attribute deregistration_delay.timeout_seconds"
+                )
+
+        stickiness_type = attributes.get("stickiness.type")
+        # TODO: strict type checking for app_cookie
+        stickiness_cookie_name = attributes.get("stickiness.app_cookie.cookie_name")
+        if stickiness_type:
+            if target_group.protocol == "GENEVE":
+                if stickiness_cookie_name:
+                    # TODO: generalise error message
+                    raise ValidationError(
+                        "Target group attribute key 'stickiness.app_cookie.cookie_name' is not recognized"
+                    )
+                elif stickiness_type not in [
+                    "source_ip_dest_ip_proto",
+                    "source_ip_dest_ip",
+                ]:
+                    raise ValidationError(
+                        f"'{stickiness_type}' must be one of [source_ip_dest_ip_proto, source_ip_dest_ip]"
+                    )
+            if stickiness_type == "source_ip":
+                if target_group.protocol in ["HTTP", "HTTPS"]:
+                    raise InvalidConfigurationRequest(
+                        f"Stickiness type 'source_ip' is not supported for target groups with the {target_group.protocol} protocol"
+                    )
+                elif target_group.protocol == "TLS":
+                    raise InvalidConfigurationRequest(
+                        "You cannot enable stickiness on target groups with the TLS protocol"
+                    )
+            elif stickiness_type == "lb_cookie":
+                if target_group.protocol in ["TCP", "TLS", "UDP", "TCP_UDP"]:
+                    raise InvalidConfigurationRequest(
+                        f"Stickiness type 'lb_cookie' is not supported for target groups with the {target_group.protocol} protocol"
+                    )
+            elif stickiness_type == "app_cookie":
+                if not stickiness_cookie_name:
+                    raise InvalidConfigurationRequest(
+                        "You must set an application cookie name to enable stickiness of type 'app_cookie'"
+                    )
+                if target_group.protocol in ["TCP", "TLS", "UDP", "TCP_UDP", "GENEVE"]:
+                    raise InvalidConfigurationRequest(
+                        f"Stickiness type 'app_cookie' is not supported for target groups with the {target_group.protocol} protocol"
+                    )
+            elif stickiness_type in ["source_ip_dest_ip", "source_ip_dest_ip_proto"]:
+                if target_group.protocol in [
+                    "HTTP",
+                    "HTTPS",
+                    "TCP",
+                    "TLS",
+                    "UDP",
+                    "TCP_UDP",
+                ]:
+                    raise ValidationError(
+                        "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]"
+                    )
+
         target_group.attributes.update(attributes)
 
     def convert_and_validate_certificates(
diff --git a/moto/elbv2/responses.py b/moto/elbv2/responses.py
index c65754e0c..2cfc49c7b 100644
--- a/moto/elbv2/responses.py
+++ b/moto/elbv2/responses.py
@@ -844,7 +844,8 @@ CREATE_TARGET_GROUP_TEMPLATE = """<CreateTargetGroupResponse xmlns="http://elast
         <HealthCheckEnabled>{{ target_group.healthcheck_enabled and 'true' or 'false' }}</HealthCheckEnabled>
         {% if target_group.matcher %}
         <Matcher>
-          <HttpCode>{{ target_group.matcher['HttpCode'] }}</HttpCode>
+          {% if target_group.matcher.get("HttpCode") %}<HttpCode>{{ target_group.matcher['HttpCode'] }}</HttpCode>{% endif %}
+          {% if target_group.matcher.get("GrpcCode") %}<GrpcCode>{{ target_group.matcher['GrpcCode'] }}</GrpcCode>{% endif %}
         </Matcher>
         {% endif %}
         {% if target_group.target_type %}
@@ -1098,7 +1099,8 @@ DESCRIBE_TARGET_GROUPS_TEMPLATE = """<DescribeTargetGroupsResponse xmlns="http:/
         <UnhealthyThresholdCount>{{ target_group.unhealthy_threshold_count }}</UnhealthyThresholdCount>
         {% if target_group.matcher %}
         <Matcher>
-          <HttpCode>{{ target_group.matcher['HttpCode'] }}</HttpCode>
+            {% if target_group.matcher.get("HttpCode") %}<HttpCode>{{ target_group.matcher['HttpCode'] }}</HttpCode>{% endif %}
+            {% if target_group.matcher.get("GrpcCode") %}<GrpcCode>{{ target_group.matcher['GrpcCode'] }}</GrpcCode>{% endif %}
         </Matcher>
         {% endif %}
         {% if target_group.target_type %}
diff --git a/moto/events/models.py b/moto/events/models.py
index d8d0cc229..7e33ef189 100644
--- a/moto/events/models.py
+++ b/moto/events/models.py
@@ -878,7 +878,7 @@ class EventPattern:
         event = json.loads(json.dumps(event))
         return self._does_event_match(event, self._pattern)
 
-    def _does_event_match(self, event: Dict[str, Any], pattern: Dict[str, str]) -> bool:
+    def _does_event_match(self, event: Dict[str, Any], pattern: Dict[str, Any]) -> bool:
         items_and_filters = [(event.get(k, UNDEFINED), v) for k, v in pattern.items()]
         nested_filter_matches = [
             self._does_event_match(item, nested_filter)
diff --git a/moto/ivs/__init__.py b/moto/ivs/__init__.py
new file mode 100644
index 000000000..e68e33550
--- /dev/null
+++ b/moto/ivs/__init__.py
@@ -0,0 +1,5 @@
+"""ivs module initialization; sets value for base decorator."""
+from .models import ivs_backends
+from ..core.models import base_decorator
+
+mock_ivs = base_decorator(ivs_backends)
diff --git a/moto/ivs/exceptions.py b/moto/ivs/exceptions.py
new file mode 100644
index 000000000..73771dd07
--- /dev/null
+++ b/moto/ivs/exceptions.py
@@ -0,0 +1,9 @@
+"""Exceptions raised by the ivs service."""
+from moto.core.exceptions import JsonRESTError
+
+
+class ResourceNotFoundException(JsonRESTError):
+    code = 404
+
+    def __init__(self, message: str):
+        super().__init__("ResourceNotFoundException", message)
diff --git a/moto/ivs/models.py b/moto/ivs/models.py
new file mode 100644
index 000000000..ea762d44c
--- /dev/null
+++ b/moto/ivs/models.py
@@ -0,0 +1,134 @@
+"""IVSBackend class with methods for supported APIs."""
+from typing import Optional, Any, List, Dict, Tuple
+from moto.core import BaseBackend, BackendDict
+from moto.ivs.exceptions import ResourceNotFoundException
+from moto.utilities.paginator import paginate
+from moto.moto_api._internal import mock_random
+
+
+class IVSBackend(BaseBackend):
+    """Implementation of IVS APIs."""
+
+    PAGINATION_MODEL = {
+        "list_channels": {
+            "input_token": "next_token",
+            "limit_key": "max_results",
+            "limit_default": 100,
+            "unique_attribute": "arn",
+        },
+    }
+
+    def __init__(self, region_name: str, account_id: str):
+        super().__init__(region_name, account_id)
+        self.channels: List[Dict[str, Any]] = []
+
+    def create_channel(
+        self,
+        authorized: bool,
+        insecure_ingest: bool,
+        latency_mode: str,
+        name: str,
+        preset: str,
+        recording_configuration_arn: str,
+        tags: Dict[str, str],
+        channel_type: str,
+    ) -> Tuple[Dict[str, Any], Dict[str, Any]]:
+        channel_id = mock_random.get_random_string(12)
+        channel_arn = (
+            f"arn:aws:ivs:{self.region_name}:{self.account_id}:channel/{channel_id}"
+        )
+        channel = {
+            "arn": channel_arn,
+            "authorized": authorized,
+            "ingestEndpoint": "ingest.example.com",
+            "insecureIngest": insecure_ingest,
+            "latencyMode": latency_mode,
+            "name": name,
+            "playbackUrl": f"https://playback.example.com/{self.region_name}.{self.account_id}.{channel_id}.m3u8",
+            "preset": preset,
+            "recordingConfigurationArn": recording_configuration_arn,
+            "tags": tags,
+            "type": channel_type,
+        }
+        self.channels.append(channel)
+        stream_key_id = mock_random.get_random_string(12)
+        stream_key_arn = f"arn:aws:ivs:{self.region_name}:{self.account_id}:stream-key/{stream_key_id}"
+        stream_key = {
+            "arn": stream_key_arn,
+            "channelArn": channel_arn,
+            "tags": tags,
+            "value": f"sk_{self.region_name}_{mock_random.token_urlsafe(32)}",
+        }
+        return channel, stream_key
+
+    @paginate(pagination_model=PAGINATION_MODEL)  # type: ignore[misc]
+    def list_channels(
+        self,
+        filter_by_name: Optional[str],
+        filter_by_recording_configuration_arn: Optional[str],
+    ) -> List[Dict[str, Any]]:
+        if filter_by_name is not None:
+            channels = [
+                channel
+                for channel in self.channels
+                if channel["name"] == filter_by_name
+            ]
+        elif filter_by_recording_configuration_arn is not None:
+            channels = [
+                channel
+                for channel in self.channels
+                if channel["recordingConfigurationArn"]
+                == filter_by_recording_configuration_arn
+            ]
+        else:
+            channels = self.channels
+        return channels
+
+    def _find_channel(self, arn: str) -> Dict[str, Any]:
+        try:
+            return next(channel for channel in self.channels if channel["arn"] == arn)
+        except StopIteration:
+            raise ResourceNotFoundException(f"Resource: {arn} not found")
+
+    def get_channel(self, arn: str) -> Dict[str, Any]:
+        return self._find_channel(arn)
+
+    def batch_get_channel(
+        self, arns: List[str]
+    ) -> Tuple[List[Dict[str, Any]], List[Dict[str, str]]]:
+        return [channel for channel in self.channels if channel["arn"] in arns], []
+
+    def update_channel(
+        self,
+        arn: str,
+        authorized: Optional[bool],
+        insecure_ingest: Optional[bool],
+        latency_mode: Optional[str],
+        name: Optional[str],
+        preset: Optional[str],
+        recording_configuration_arn: Optional[str],
+        channel_type: Optional[str],
+    ) -> Dict[str, Any]:
+        channel = self._find_channel(arn)
+        if authorized is not None:
+            channel["authorized"] = authorized
+        if insecure_ingest is not None:
+            channel["insecureIngest"] = insecure_ingest
+        if latency_mode is not None:
+            channel["latencyMode"] = latency_mode
+        if name is not None:
+            channel["name"] = name
+        if preset is not None:
+            channel["preset"] = preset
+        if recording_configuration_arn is not None:
+            channel["recordingConfigurationArn"] = recording_configuration_arn
+        if channel_type is not None:
+            channel["type"] = channel_type
+        return channel
+
+    def delete_channel(self, arn: str) -> None:
+        self._find_channel(arn)
+        self.channels = [channel for channel in self.channels if channel["arn"] != arn]
+
+
+ivs_backends = BackendDict(IVSBackend, "ivs")
diff --git a/moto/ivs/responses.py b/moto/ivs/responses.py
new file mode 100644
index 000000000..a15a7f1c8
--- /dev/null
+++ b/moto/ivs/responses.py
@@ -0,0 +1,93 @@
+"""Handles incoming ivs requests, invokes methods, returns responses."""
+import json
+from moto.core.responses import BaseResponse
+from .models import IVSBackend, ivs_backends
+
+
+class IVSResponse(BaseResponse):
+    """Handler for IVS requests and responses."""
+
+    def __init__(self) -> None:
+        super().__init__(service_name="ivs")
+
+    @property
+    def ivs_backend(self) -> IVSBackend:
+        """Return backend instance specific for this region."""
+        return ivs_backends[self.current_account][self.region]
+
+    def create_channel(self) -> str:
+        authorized = self._get_param("authorized", False)
+        insecure_ingest = self._get_param("insecureIngest", False)
+        latency_mode = self._get_param("latencyMode", "LOW")
+        name = self._get_param("name")
+        preset = self._get_param("preset", "")
+        recording_configuration_arn = self._get_param("recordingConfigurationArn", "")
+        tags = self._get_param("tags", {})
+        channel_type = self._get_param("type", "STANDARD")
+        channel, stream_key = self.ivs_backend.create_channel(
+            authorized=authorized,
+            insecure_ingest=insecure_ingest,
+            latency_mode=latency_mode,
+            name=name,
+            preset=preset,
+            recording_configuration_arn=recording_configuration_arn,
+            tags=tags,
+            channel_type=channel_type,
+        )
+        return json.dumps(dict(channel=channel, streamKey=stream_key))
+
+    def list_channels(self) -> str:
+        filter_by_name = self._get_param("filterByName")
+        filter_by_recording_configuration_arn = self._get_param(
+            "filterByRecordingConfigurationArn"
+        )
+        max_results = self._get_param("maxResults")
+        next_token = self._get_param("nextToken")
+        channels, next_token = self.ivs_backend.list_channels(
+            filter_by_name=filter_by_name,
+            filter_by_recording_configuration_arn=filter_by_recording_configuration_arn,
+            max_results=max_results,
+            next_token=next_token,
+        )
+        return json.dumps(dict(channels=channels, nextToken=next_token))
+
+    def get_channel(self) -> str:
+        arn = self._get_param("arn")
+        channel = self.ivs_backend.get_channel(
+            arn=arn,
+        )
+        return json.dumps(dict(channel=channel))
+
+    def batch_get_channel(self) -> str:
+        arns = self._get_param("arns")
+        channels, errors = self.ivs_backend.batch_get_channel(
+            arns=arns,
+        )
+        return json.dumps(dict(channels=channels, errors=errors))
+
+    def update_channel(self) -> str:
+        arn = self._get_param("arn")
+        authorized = self._get_param("authorized")
+        insecure_ingest = self._get_param("insecureIngest")
+        latency_mode = self._get_param("latencyMode")
+        name = self._get_param("name")
+        preset = self._get_param("preset")
+        recording_configuration_arn = self._get_param("recordingConfigurationArn")
+        channel_type = self._get_param("type")
+        channel = self.ivs_backend.update_channel(
+            arn=arn,
+            authorized=authorized,
+            insecure_ingest=insecure_ingest,
+            latency_mode=latency_mode,
+            name=name,
+            preset=preset,
+            recording_configuration_arn=recording_configuration_arn,
+            channel_type=channel_type,
+        )
+        return json.dumps(dict(channel=channel))
+
+    def delete_channel(self) -> None:
+        arn = self._get_param("arn")
+        self.ivs_backend.delete_channel(
+            arn=arn,
+        )
diff --git a/moto/ivs/urls.py b/moto/ivs/urls.py
new file mode 100644
index 000000000..7c4a85267
--- /dev/null
+++ b/moto/ivs/urls.py
@@ -0,0 +1,20 @@
+"""ivs base URL and path."""
+from .responses import IVSResponse
+
+
+url_bases = [
+    r"https?://ivs\.(.+)\.amazonaws\.com",
+]
+
+
+response = IVSResponse()
+
+
+url_paths = {
+    "{0}/CreateChannel": response.dispatch,
+    "{0}/ListChannels": response.dispatch,
+    "{0}/GetChannel": response.dispatch,
+    "{0}/BatchGetChannel": response.dispatch,
+    "{0}/UpdateChannel": response.dispatch,
+    "{0}/DeleteChannel": response.dispatch,
+}
diff --git a/moto/moto_api/_internal/moto_random.py b/moto/moto_api/_internal/moto_random.py
index 93f7f9c8d..0bd405b67 100644
--- a/moto/moto_api/_internal/moto_random.py
+++ b/moto/moto_api/_internal/moto_random.py
@@ -1,6 +1,7 @@
 from random import Random
 import string
 from uuid import UUID
+from base64 import urlsafe_b64encode
 
 
 HEX_CHARS = list(range(10)) + ["a", "b", "c", "d", "e", "f"]
@@ -30,3 +31,8 @@ class MotoRandom(Random):
             pool += string.digits
         random_str = "".join([self.choice(pool) for i in range(length)])
         return random_str.lower() if lower_case else random_str
+
+    # Based on https://github.com/python/cpython/blob/main/Lib/secrets.py
+    def token_urlsafe(self, nbytes: int) -> str:
+        randbytes = self.getrandbits(nbytes * 8).to_bytes(nbytes, "little")
+        return urlsafe_b64encode(randbytes).rstrip(b"=").decode("ascii")
diff --git a/moto/route53/responses.py b/moto/route53/responses.py
index f13cecb2a..514b75793 100644
--- a/moto/route53/responses.py
+++ b/moto/route53/responses.py
@@ -250,8 +250,8 @@ class Route53(BaseResponse):
                 is_truncated,
             ) = self.backend.list_resource_record_sets(
                 zoneid,
-                start_type=start_type,
-                start_name=start_name,
+                start_type=start_type,  # type: ignore
+                start_name=start_name,  # type: ignore
                 max_items=max_items,
             )
             r_template = template.render(
diff --git a/moto/s3/exceptions.py b/moto/s3/exceptions.py
index e6571f7c7..12f5eaa1f 100644
--- a/moto/s3/exceptions.py
+++ b/moto/s3/exceptions.py
@@ -559,3 +559,10 @@ class ObjectLockConfigurationNotFoundError(S3ClientError):
             "ObjectLockConfigurationNotFoundError",
             "Object Lock configuration does not exist for this bucket",
         )
+
+
+class MethodNotAllowed(S3ClientError):
+    code = 405
+
+    def __init__(self) -> None:
+        super().__init__("MethodNotAllowed", "Method Not Allowed")
diff --git a/moto/s3/models.py b/moto/s3/models.py
index ac73475f0..c74afadea 100644
--- a/moto/s3/models.py
+++ b/moto/s3/models.py
@@ -42,6 +42,7 @@ from moto.s3.exceptions import (
     MissingKey,
     InvalidNotificationDestination,
     MalformedXML,
+    MethodNotAllowed,
     InvalidStorageClass,
     InvalidTargetBucketForLogging,
     CrossLocationLoggingProhibitted,
@@ -2068,6 +2069,7 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
         key_name: str,
         version_id: Optional[str] = None,
         part_number: Optional[str] = None,
+        return_delete_marker: bool = False,
     ) -> Optional[FakeKey]:
         bucket = self.get_bucket(bucket_name)
 
@@ -2090,6 +2092,8 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
             key.advance()
             return key
         else:
+            if return_delete_marker and isinstance(key, FakeDeleteMarker):
+                return key  # type: ignore
             return None
 
     def head_object(
@@ -2099,7 +2103,12 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
         version_id: Optional[str] = None,
         part_number: Optional[str] = None,
     ) -> Optional[FakeKey]:
-        return self.get_object(bucket_name, key_name, version_id, part_number)
+        obj = self.get_object(
+            bucket_name, key_name, version_id, part_number, return_delete_marker=True
+        )
+        if isinstance(obj, FakeDeleteMarker):
+            raise MethodNotAllowed
+        return obj
 
     def get_object_acl(self, key: FakeKey) -> Optional[FakeAcl]:
         return key.acl
@@ -2319,7 +2328,7 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
         part_id: int,
         src_bucket_name: str,
         src_key_name: str,
-        src_version_id: str,
+        src_version_id: Optional[str],
         start_byte: int,
         end_byte: int,
     ) -> FakeKey:
diff --git a/moto/s3/responses.py b/moto/s3/responses.py
index 89be2257e..719b26010 100644
--- a/moto/s3/responses.py
+++ b/moto/s3/responses.py
@@ -34,6 +34,7 @@ from .exceptions import (
     InvalidContentMD5,
     InvalidContinuationToken,
     S3ClientError,
+    MethodNotAllowed,
     MissingBucket,
     MissingKey,
     MissingVersion,
@@ -1499,11 +1500,11 @@ class S3Response(BaseResponse):
                         bucket_name,
                         upload_id,
                         part_number,
-                        src_bucket,
-                        src_key,
-                        src_version_id,
-                        start_byte,
-                        end_byte,
+                        src_bucket_name=src_bucket,
+                        src_key_name=src_key,
+                        src_version_id=src_version_id,
+                        start_byte=start_byte,
+                        end_byte=end_byte,
                     )
                 else:
                     return 404, response_headers, ""
@@ -1761,9 +1762,18 @@ class S3Response(BaseResponse):
         if_none_match = headers.get("If-None-Match", None)
         if_unmodified_since = headers.get("If-Unmodified-Since", None)
 
-        key = self.backend.head_object(
-            bucket_name, key_name, version_id=version_id, part_number=part_number
-        )
+        try:
+            key = self.backend.head_object(
+                bucket_name, key_name, version_id=version_id, part_number=part_number
+            )
+        except MethodNotAllowed:
+            headers = {
+                "x-amz-delete-marker": "true",
+                "x-amz-version-id": version_id,
+                "allow": "DELETE",
+                "content-type": "application/xml",
+            }
+            return 405, headers, "Method Not Allowed"
         if key:
             response_headers.update(key.metadata)
             response_headers.update(key.response_dict)
diff --git a/moto/sagemaker/models.py b/moto/sagemaker/models.py
index c1e94056e..208c0f09c 100644
--- a/moto/sagemaker/models.py
+++ b/moto/sagemaker/models.py
@@ -19,10 +19,10 @@ from .utils import (
     get_pipeline_from_name,
     get_pipeline_execution_from_arn,
     get_pipeline_name_from_execution_arn,
+    validate_model_approval_status,
 )
 from .utils import load_pipeline_definition_from_s3, arn_formatter
 
-
 PAGINATION_MODEL = {
     "list_experiments": {
         "input_token": "NextToken",
@@ -988,10 +988,10 @@ class ModelPackage(BaseObject):
         source_algorithm_specification: Any,
         validation_specification: Any,
         certify_for_marketplace: bool,
-        model_approval_status: str,
+        model_approval_status: Optional[str],
         metadata_properties: Any,
         model_metrics: Any,
-        approval_description: str,
+        approval_description: Optional[str],
         customer_metadata_properties: Any,
         drift_check_baselines: Any,
         domain: str,
@@ -1029,24 +1029,23 @@ class ModelPackage(BaseObject):
         self.inference_specification = inference_specification
         self.source_algorithm_specification = source_algorithm_specification
         self.validation_specification = validation_specification
-        self.model_package_status_details = (
-            {
-                "ValidationStatuses": [
-                    {
-                        "Name": model_package_arn,
-                        "Status": "Completed",
-                    }
-                ],
-                "ImageScanStatuses": [
-                    {
-                        "Name": model_package_arn,
-                        "Status": "Completed",
-                    }
-                ],
-            },
-        )
+        self.model_package_status_details = {
+            "ValidationStatuses": [
+                {
+                    "Name": model_package_arn,
+                    "Status": "Completed",
+                }
+            ],
+            "ImageScanStatuses": [
+                {
+                    "Name": model_package_arn,
+                    "Status": "Completed",
+                }
+            ],
+        }
         self.certify_for_marketplace = certify_for_marketplace
-        self.model_approval_status = model_approval_status
+        self.model_approval_status: Optional[str] = None
+        self.set_model_approval_status(model_approval_status)
         self.created_by = {
             "UserProfileArn": fake_user_profile_arn,
             "UserProfileName": fake_user_profile_name,
@@ -1054,21 +1053,20 @@ class ModelPackage(BaseObject):
         }
         self.metadata_properties = metadata_properties
         self.model_metrics = model_metrics
-        self.last_modified_time = datetime_now
+        self.last_modified_time: Optional[datetime] = None
         self.approval_description = approval_description
         self.customer_metadata_properties = customer_metadata_properties
         self.drift_check_baselines = drift_check_baselines
         self.domain = domain
         self.task = task
         self.sample_payload_url = sample_payload_url
-        self.additional_inference_specifications = additional_inference_specifications
+        self.additional_inference_specifications: Optional[List[Any]] = None
+        self.add_additional_inference_specifications(
+            additional_inference_specifications
+        )
         self.tags = tags
         self.model_package_status = "Completed"
-        self.last_modified_by = {
-            "UserProfileArn": fake_user_profile_arn,
-            "UserProfileName": fake_user_profile_name,
-            "DomainId": fake_domain_id,
-        }
+        self.last_modified_by: Optional[Dict[str, str]] = None
         self.client_token = client_token
 
     def gen_response_object(self) -> Dict[str, Any]:
@@ -1083,10 +1081,290 @@ class ModelPackage(BaseObject):
             "ModelPackageArn",
             "ModelPackageDescription",
             "CreationTime",
+            "InferenceSpecification",
+            "SourceAlgorithmSpecification",
+            "ValidationSpecification",
             "ModelPackageStatus",
+            "ModelPackageStatusDetails",
+            "CertifyForMarketplace",
             "ModelApprovalStatus",
+            "CreatedBy",
+            "MetadataProperties",
+            "ModelMetrics",
+            "LastModifiedTime",
+            "LastModifiedBy",
+            "ApprovalDescription",
+            "CustomerMetadataProperties",
+            "DriftCheckBaselines",
+            "Domain",
+            "Task",
+            "SamplePayloadUrl",
+            "AdditionalInferenceSpecifications",
+            "SkipModelValidation",
         ]
-        return {k: v for k, v in response_object.items() if k in response_values}
+        return {
+            k: v
+            for k, v in response_object.items()
+            if k in response_values
+            if v is not None
+        }
+
+    def modifications_done(self) -> None:
+        self.last_modified_time = datetime.now(tzutc())
+        self.last_modified_by = self.created_by
+
+    def set_model_approval_status(self, model_approval_status: Optional[str]) -> None:
+        if model_approval_status is not None:
+            validate_model_approval_status(model_approval_status)
+        self.model_approval_status = model_approval_status
+
+    def remove_customer_metadata_property(
+        self, customer_metadata_properties_to_remove: List[str]
+    ) -> None:
+        if customer_metadata_properties_to_remove is not None:
+            for customer_metadata_property in customer_metadata_properties_to_remove:
+                self.customer_metadata_properties.pop(customer_metadata_property, None)
+
+    def add_additional_inference_specifications(
+        self, additional_inference_specifications_to_add: Optional[List[Any]]
+    ) -> None:
+        self.validate_additional_inference_specifications(
+            additional_inference_specifications_to_add
+        )
+        if (
+            self.additional_inference_specifications is not None
+            and additional_inference_specifications_to_add is not None
+        ):
+            self.additional_inference_specifications.extend(
+                additional_inference_specifications_to_add
+            )
+        else:
+            self.additional_inference_specifications = (
+                additional_inference_specifications_to_add
+            )
+
+    def validate_additional_inference_specifications(
+        self, additional_inference_specifications: Optional[List[Dict[str, Any]]]
+    ) -> None:
+        specifications_to_validate = additional_inference_specifications or []
+        for additional_inference_specification in specifications_to_validate:
+            if "SupportedTransformInstanceTypes" in additional_inference_specification:
+                self.validate_supported_transform_instance_types(
+                    additional_inference_specification[
+                        "SupportedTransformInstanceTypes"
+                    ]
+                )
+            if (
+                "SupportedRealtimeInferenceInstanceTypes"
+                in additional_inference_specification
+            ):
+                self.validate_supported_realtime_inference_instance_types(
+                    additional_inference_specification[
+                        "SupportedRealtimeInferenceInstanceTypes"
+                    ]
+                )
+
+    @staticmethod
+    def validate_supported_transform_instance_types(instance_types: List[str]) -> None:
+        VALID_TRANSFORM_INSTANCE_TYPES = [
+            "ml.m4.xlarge",
+            "ml.m4.2xlarge",
+            "ml.m4.4xlarge",
+            "ml.m4.10xlarge",
+            "ml.m4.16xlarge",
+            "ml.c4.xlarge",
+            "ml.c4.2xlarge",
+            "ml.c4.4xlarge",
+            "ml.c4.8xlarge",
+            "ml.p2.xlarge",
+            "ml.p2.8xlarge",
+            "ml.p2.16xlarge",
+            "ml.p3.2xlarge",
+            "ml.p3.8xlarge",
+            "ml.p3.16xlarge",
+            "ml.c5.xlarge",
+            "ml.c5.2xlarge",
+            "ml.c5.4xlarge",
+            "ml.c5.9xlarge",
+            "ml.c5.18xlarge",
+            "ml.m5.large",
+            "ml.m5.xlarge",
+            "ml.m5.2xlarge",
+            "ml.m5.4xlarge",
+            "ml.m5.12xlarge",
+            "ml.m5.24xlarge",
+            "ml.g4dn.xlarge",
+            "ml.g4dn.2xlarge",
+            "ml.g4dn.4xlarge",
+            "ml.g4dn.8xlarge",
+            "ml.g4dn.12xlarge",
+            "ml.g4dn.16xlarge",
+        ]
+        for instance_type in instance_types:
+            if not validators.is_one_of(instance_type, VALID_TRANSFORM_INSTANCE_TYPES):
+                message = f"Value '{instance_type}' at 'SupportedTransformInstanceTypes' failed to satisfy constraint: Member must satisfy enum value set: {VALID_TRANSFORM_INSTANCE_TYPES}"
+                raise ValidationError(message=message)
+
+    @staticmethod
+    def validate_supported_realtime_inference_instance_types(
+        instance_types: List[str],
+    ) -> None:
+        VALID_REALTIME_INFERENCE_INSTANCE_TYPES = [
+            "ml.t2.medium",
+            "ml.t2.large",
+            "ml.t2.xlarge",
+            "ml.t2.2xlarge",
+            "ml.m4.xlarge",
+            "ml.m4.2xlarge",
+            "ml.m4.4xlarge",
+            "ml.m4.10xlarge",
+            "ml.m4.16xlarge",
+            "ml.m5.large",
+            "ml.m5.xlarge",
+            "ml.m5.2xlarge",
+            "ml.m5.4xlarge",
+            "ml.m5.12xlarge",
+            "ml.m5.24xlarge",
+            "ml.m5d.large",
+            "ml.m5d.xlarge",
+            "ml.m5d.2xlarge",
+            "ml.m5d.4xlarge",
+            "ml.m5d.12xlarge",
+            "ml.m5d.24xlarge",
+            "ml.c4.large",
+            "ml.c4.xlarge",
+            "ml.c4.2xlarge",
+            "ml.c4.4xlarge",
+            "ml.c4.8xlarge",
+            "ml.p2.xlarge",
+            "ml.p2.8xlarge",
+            "ml.p2.16xlarge",
+            "ml.p3.2xlarge",
+            "ml.p3.8xlarge",
+            "ml.p3.16xlarge",
+            "ml.c5.large",
+            "ml.c5.xlarge",
+            "ml.c5.2xlarge",
+            "ml.c5.4xlarge",
+            "ml.c5.9xlarge",
+            "ml.c5.18xlarge",
+            "ml.c5d.large",
+            "ml.c5d.xlarge",
+            "ml.c5d.2xlarge",
+            "ml.c5d.4xlarge",
+            "ml.c5d.9xlarge",
+            "ml.c5d.18xlarge",
+            "ml.g4dn.xlarge",
+            "ml.g4dn.2xlarge",
+            "ml.g4dn.4xlarge",
+            "ml.g4dn.8xlarge",
+            "ml.g4dn.12xlarge",
+            "ml.g4dn.16xlarge",
+            "ml.r5.large",
+            "ml.r5.xlarge",
+            "ml.r5.2xlarge",
+            "ml.r5.4xlarge",
+            "ml.r5.12xlarge",
+            "ml.r5.24xlarge",
+            "ml.r5d.large",
+            "ml.r5d.xlarge",
+            "ml.r5d.2xlarge",
+            "ml.r5d.4xlarge",
+            "ml.r5d.12xlarge",
+            "ml.r5d.24xlarge",
+            "ml.inf1.xlarge",
+            "ml.inf1.2xlarge",
+            "ml.inf1.6xlarge",
+            "ml.inf1.24xlarge",
+            "ml.c6i.large",
+            "ml.c6i.xlarge",
+            "ml.c6i.2xlarge",
+            "ml.c6i.4xlarge",
+            "ml.c6i.8xlarge",
+            "ml.c6i.12xlarge",
+            "ml.c6i.16xlarge",
+            "ml.c6i.24xlarge",
+            "ml.c6i.32xlarge",
+            "ml.g5.xlarge",
+            "ml.g5.2xlarge",
+            "ml.g5.4xlarge",
+            "ml.g5.8xlarge",
+            "ml.g5.12xlarge",
+            "ml.g5.16xlarge",
+            "ml.g5.24xlarge",
+            "ml.g5.48xlarge",
+            "ml.p4d.24xlarge",
+            "ml.c7g.large",
+            "ml.c7g.xlarge",
+            "ml.c7g.2xlarge",
+            "ml.c7g.4xlarge",
+            "ml.c7g.8xlarge",
+            "ml.c7g.12xlarge",
+            "ml.c7g.16xlarge",
+            "ml.m6g.large",
+            "ml.m6g.xlarge",
+            "ml.m6g.2xlarge",
+            "ml.m6g.4xlarge",
+            "ml.m6g.8xlarge",
+            "ml.m6g.12xlarge",
+            "ml.m6g.16xlarge",
+            "ml.m6gd.large",
+            "ml.m6gd.xlarge",
+            "ml.m6gd.2xlarge",
+            "ml.m6gd.4xlarge",
+            "ml.m6gd.8xlarge",
+            "ml.m6gd.12xlarge",
+            "ml.m6gd.16xlarge",
+            "ml.c6g.large",
+            "ml.c6g.xlarge",
+            "ml.c6g.2xlarge",
+            "ml.c6g.4xlarge",
+            "ml.c6g.8xlarge",
+            "ml.c6g.12xlarge",
+            "ml.c6g.16xlarge",
+            "ml.c6gd.large",
+            "ml.c6gd.xlarge",
+            "ml.c6gd.2xlarge",
+            "ml.c6gd.4xlarge",
+            "ml.c6gd.8xlarge",
+            "ml.c6gd.12xlarge",
+            "ml.c6gd.16xlarge",
+            "ml.c6gn.large",
+            "ml.c6gn.xlarge",
+            "ml.c6gn.2xlarge",
+            "ml.c6gn.4xlarge",
+            "ml.c6gn.8xlarge",
+            "ml.c6gn.12xlarge",
+            "ml.c6gn.16xlarge",
+            "ml.r6g.large",
+            "ml.r6g.xlarge",
+            "ml.r6g.2xlarge",
+            "ml.r6g.4xlarge",
+            "ml.r6g.8xlarge",
+            "ml.r6g.12xlarge",
+            "ml.r6g.16xlarge",
+            "ml.r6gd.large",
+            "ml.r6gd.xlarge",
+            "ml.r6gd.2xlarge",
+            "ml.r6gd.4xlarge",
+            "ml.r6gd.8xlarge",
+            "ml.r6gd.12xlarge",
+            "ml.r6gd.16xlarge",
+            "ml.p4de.24xlarge",
+            "ml.trn1.2xlarge",
+            "ml.trn1.32xlarge",
+            "ml.inf2.xlarge",
+            "ml.inf2.8xlarge",
+            "ml.inf2.24xlarge",
+            "ml.inf2.48xlarge",
+            "ml.p5.48xlarge",
+        ]
+        for instance_type in instance_types:
+            if not validators.is_one_of(
+                instance_type, VALID_REALTIME_INFERENCE_INSTANCE_TYPES
+            ):
+                message = f"Value '{instance_type}' at 'SupportedRealtimeInferenceInstanceTypes' failed to satisfy constraint: Member must satisfy enum value set: {VALID_REALTIME_INFERENCE_INSTANCE_TYPES}"
+                raise ValidationError(message=message)
 
 
 class VpcConfig(BaseObject):
@@ -2982,6 +3260,16 @@ class SageMakerModelBackend(BaseBackend):
         )
         return model_package_group_summary_list
 
+    def describe_model_package_group(
+        self, model_package_group_name: str
+    ) -> ModelPackageGroup:
+        model_package_group = self.model_package_groups.get(model_package_group_name)
+        if model_package_group is None:
+            raise ValidationError(
+                f"Model package group {model_package_group_name} not found"
+            )
+        return model_package_group
+
     @paginate(pagination_model=PAGINATION_MODEL)  # type: ignore[misc]
     def list_model_packages(  # type: ignore[misc]
         self,
@@ -3054,6 +3342,36 @@ class SageMakerModelBackend(BaseBackend):
             raise ValidationError(f"Model package {model_package_name} not found")
         return model_package
 
+    def update_model_package(
+        self,
+        model_package_arn: str,
+        model_approval_status: Optional[str],
+        approval_description: Optional[str],
+        customer_metadata_properties: Optional[Dict[str, str]],
+        customer_metadata_properties_to_remove: List[str],
+        additional_inference_specifications_to_add: Optional[List[Any]],
+    ) -> str:
+        model_package_name_mapped = self.model_package_name_mapping.get(
+            model_package_arn, model_package_arn
+        )
+        model_package = self.model_packages.get(model_package_name_mapped)
+
+        if model_package is None:
+            raise ValidationError(f"Model package {model_package_arn} not found")
+
+        model_package.set_model_approval_status(model_approval_status)
+        model_package.approval_description = approval_description
+        model_package.customer_metadata_properties = customer_metadata_properties
+        model_package.remove_customer_metadata_property(
+            customer_metadata_properties_to_remove
+        )
+        model_package.add_additional_inference_specifications(
+            additional_inference_specifications_to_add
+        )
+        model_package.modifications_done()
+
+        return model_package.model_package_arn
+
     def create_model_package(
         self,
         model_package_name: str,
@@ -3062,9 +3380,9 @@ class SageMakerModelBackend(BaseBackend):
         inference_specification: Any,
         validation_specification: Any,
         source_algorithm_specification: Any,
-        certify_for_marketplace: Any,
+        certify_for_marketplace: bool,
         tags: Any,
-        model_approval_status: str,
+        model_approval_status: Optional[str],
         metadata_properties: Any,
         model_metrics: Any,
         client_token: Any,
@@ -3102,7 +3420,7 @@ class SageMakerModelBackend(BaseBackend):
             sample_payload_url=sample_payload_url,
             additional_inference_specifications=additional_inference_specifications,
             model_package_version=model_package_version,
-            approval_description=model_approval_status,
+            approval_description=None,
             region_name=self.region_name,
             account_id=self.account_id,
             client_token=client_token,
diff --git a/moto/sagemaker/responses.py b/moto/sagemaker/responses.py
index ec83c10e2..f490296d7 100644
--- a/moto/sagemaker/responses.py
+++ b/moto/sagemaker/responses.py
@@ -874,6 +874,36 @@ class SageMakerResponse(BaseResponse):
             model_package.gen_response_object(),
         )
 
+    def describe_model_package_group(self) -> str:
+        model_package_group_name = self._get_param("ModelPackageGroupName")
+        model_package_group = self.sagemaker_backend.describe_model_package_group(
+            model_package_group_name=model_package_group_name,
+        )
+        return json.dumps(
+            model_package_group.gen_response_object(),
+        )
+
+    def update_model_package(self) -> str:
+        model_package_arn = self._get_param("ModelPackageArn")
+        model_approval_status = self._get_param("ModelApprovalStatus")
+        approval_dexcription = self._get_param("ApprovalDescription")
+        customer_metadata_properties = self._get_param("CustomerMetadataProperties")
+        customer_metadata_properties_to_remove = self._get_param(
+            "CustomerMetadataPropertiesToRemove", []
+        )
+        additional_inference_specification_to_add = self._get_param(
+            "AdditionalInferenceSpecificationsToAdd"
+        )
+        updated_model_package_arn = self.sagemaker_backend.update_model_package(
+            model_package_arn=model_package_arn,
+            model_approval_status=model_approval_status,
+            approval_description=approval_dexcription,
+            customer_metadata_properties=customer_metadata_properties,
+            customer_metadata_properties_to_remove=customer_metadata_properties_to_remove,
+            additional_inference_specifications_to_add=additional_inference_specification_to_add,
+        )
+        return json.dumps(dict(ModelPackageArn=updated_model_package_arn))
+
     def create_model_package(self) -> str:
         model_package_name = self._get_param("ModelPackageName")
         model_package_group_name = self._get_param("ModelPackageGroupName")
@@ -881,7 +911,7 @@ class SageMakerResponse(BaseResponse):
         inference_specification = self._get_param("InferenceSpecification")
         validation_specification = self._get_param("ValidationSpecification")
         source_algorithm_specification = self._get_param("SourceAlgorithmSpecification")
-        certify_for_marketplace = self._get_param("CertifyForMarketplace")
+        certify_for_marketplace = self._get_param("CertifyForMarketplace", False)
         tags = self._get_param("Tags")
         model_approval_status = self._get_param("ModelApprovalStatus")
         metadata_properties = self._get_param("MetadataProperties")
@@ -893,7 +923,7 @@ class SageMakerResponse(BaseResponse):
         task = self._get_param("Task")
         sample_payload_url = self._get_param("SamplePayloadUrl")
         additional_inference_specifications = self._get_param(
-            "AdditionalInferenceSpecifications"
+            "AdditionalInferenceSpecifications", None
         )
         model_package_arn = self.sagemaker_backend.create_model_package(
             model_package_name=model_package_name,
diff --git a/moto/sagemaker/utils.py b/moto/sagemaker/utils.py
index 6b6b9175e..f10f85108 100644
--- a/moto/sagemaker/utils.py
+++ b/moto/sagemaker/utils.py
@@ -5,7 +5,6 @@ import json
 from typing import Any, Dict
 from .exceptions import ValidationError
 
-
 if typing.TYPE_CHECKING:
     from .models import FakePipeline, FakePipelineExecution
 
@@ -51,3 +50,15 @@ def load_pipeline_definition_from_s3(
 
 def arn_formatter(_type: str, _id: str, account_id: str, region_name: str) -> str:
     return f"arn:aws:sagemaker:{region_name}:{account_id}:{_type}/{_id}"
+
+
+def validate_model_approval_status(model_approval_status: typing.Optional[str]) -> None:
+    if model_approval_status is not None and model_approval_status not in [
+        "Approved",
+        "Rejected",
+        "PendingManualApproval",
+    ]:
+        raise ValidationError(
+            f"Value '{model_approval_status}' at 'modelApprovalStatus' failed to satisfy constraint: "
+            "Member must satisfy enum value set: [PendingManualApproval, Approved, Rejected]"
+        )
diff --git a/moto/ssm/resources/regions.json b/moto/ssm/resources/regions.json
index c7c980c59..3469a99da 100644
--- a/moto/ssm/resources/regions.json
+++ b/moto/ssm/resources/regions.json
@@ -70,7 +70,7 @@
                   "Value": "acm-pca.af-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -1619,7 +1619,7 @@
                   "Value": "acm-pca.ap-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -3234,7 +3234,7 @@
                   "Value": "acm-pca.ap-northeast-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -3495,6 +3495,9 @@
                   "Value": "HTTPS"
                 }
               },
+              "bedrock": {
+                "Value": "bedrock"
+              },
               "budgets": {
                 "Value": "budgets",
                 "endpoint": {
@@ -3852,6 +3855,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.ap-northeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -5853,7 +5865,7 @@
                   "Value": "acm-pca.ap-northeast-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -8100,7 +8112,7 @@
                   "Value": "acm-pca.ap-northeast-3.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -9516,7 +9528,7 @@
                   "Value": "acm-pca.ap-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ahl": {
@@ -11722,7 +11734,7 @@
                   "Value": "acm-pca.ap-south-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -12295,6 +12307,15 @@
               "launchwizard": {
                 "Value": "launchwizard"
               },
+              "license-manager": {
+                "Value": "license-manager",
+                "endpoint": {
+                  "Value": "license-manager.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "license-manager-linux-subscriptions": {
                 "Value": "license-manager-linux-subscriptions",
                 "endpoint": {
@@ -12823,7 +12844,7 @@
                   "Value": "acm-pca.ap-southeast-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -13453,6 +13474,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.ap-southeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -15337,7 +15367,7 @@
                   "Value": "acm-pca.ap-southeast-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -15973,6 +16003,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.ap-southeast-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -17774,7 +17813,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -17957,7 +18002,7 @@
                   "Value": "acm-pca.ap-southeast-3.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -18770,6 +18815,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "resource-explorer-2": {
+                "Value": "resource-explorer-2",
+                "endpoint": {
+                  "Value": "resource-explorer-2.ap-southeast-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "resource-groups": {
                 "Value": "resource-groups",
                 "endpoint": {
@@ -19209,7 +19263,7 @@
                   "Value": "acm-pca.ap-southeast-4.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -19734,6 +19788,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "license-manager": {
+                "Value": "license-manager",
+                "endpoint": {
+                  "Value": "license-manager.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "license-manager-linux-subscriptions": {
                 "Value": "license-manager-linux-subscriptions",
                 "endpoint": {
@@ -20260,7 +20323,7 @@
                   "Value": "acm-pca.ca-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -20815,6 +20878,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.ca-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "detective": {
                 "Value": "detective",
                 "endpoint": {
@@ -22334,7 +22406,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -25187,7 +25265,7 @@
                   "Value": "acm-pca.eu-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -25841,6 +25919,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.eu-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -27681,7 +27768,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -27863,7 +27956,7 @@
                   "Value": "acm-pca.eu-central-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -28460,6 +28553,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "license-manager": {
+                "Value": "license-manager",
+                "endpoint": {
+                  "Value": "license-manager.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "license-manager-linux-subscriptions": {
                 "Value": "license-manager-linux-subscriptions",
                 "endpoint": {
@@ -29001,7 +29103,7 @@
                   "Value": "acm-pca.eu-north-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -29454,6 +29556,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.eu-north-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "detective": {
                 "Value": "detective",
                 "endpoint": {
@@ -30928,7 +31039,7 @@
                   "Value": "acm-pca.eu-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -32414,7 +32525,7 @@
                   "Value": "acm-pca.eu-south-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -33489,7 +33600,7 @@
                   "Value": "acm-pca.eu-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -34071,6 +34182,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.eu-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -36010,7 +36130,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -36193,7 +36319,7 @@
                   "Value": "acm-pca.eu-west-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -38390,7 +38516,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -38581,7 +38713,7 @@
                   "Value": "acm-pca.eu-west-3.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -40460,7 +40592,7 @@
                   "Value": "acm-pca.il-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -41601,7 +41733,7 @@
                   "Value": "acm-pca.me-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -42228,6 +42360,15 @@
               "launchwizard": {
                 "Value": "launchwizard"
               },
+              "license-manager": {
+                "Value": "license-manager",
+                "endpoint": {
+                  "Value": "license-manager.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "license-manager-linux-subscriptions": {
                 "Value": "license-manager-linux-subscriptions",
                 "endpoint": {
@@ -42769,7 +42910,7 @@
                   "Value": "acm-pca.me-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -43873,6 +44014,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "resource-explorer-2": {
+                "Value": "resource-explorer-2",
+                "endpoint": {
+                  "Value": "resource-explorer-2.me-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "resource-groups": {
                 "Value": "resource-groups",
                 "endpoint": {
@@ -44357,7 +44507,7 @@
                   "Value": "acm-pca.sa-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -44801,6 +44951,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.sa-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -46113,7 +46272,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -46298,7 +46463,7 @@
                   "Value": "acm-pca.us-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ahl": {
@@ -47033,6 +47198,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.us-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -49137,7 +49311,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -49379,7 +49559,7 @@
                   "Value": "acm-pca.us-east-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ahl": {
@@ -49934,6 +50114,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.us-east-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -51666,7 +51855,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -51792,7 +51987,7 @@
                   "Value": "acm-pca.us-gov-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "apigateway": {
@@ -52041,6 +52236,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "codestar-connections": {
+                "Value": "codestar-connections",
+                "endpoint": {
+                  "Value": "codestar-connections.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "compute-optimizer": {
                 "Value": "compute-optimizer",
                 "endpoint": {
@@ -52554,6 +52758,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "m2": {
+                "Value": "m2",
+                "endpoint": {
+                  "Value": "m2.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "managedservices": {
                 "Value": "managedservices",
                 "endpoint": {
@@ -53116,7 +53329,7 @@
                   "Value": "acm-pca.us-gov-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "amazonlocationservice": {
@@ -54019,6 +54232,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "m2": {
+                "Value": "m2",
+                "endpoint": {
+                  "Value": "m2.us-gov-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "managedblockchain": {
                 "Value": "managedblockchain",
                 "endpoint": {
@@ -54710,7 +54932,7 @@
                   "Value": "acm-pca.us-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "aiq": {
@@ -56550,7 +56772,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
@@ -56702,7 +56930,7 @@
                   "Value": "acm-pca.us-west-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ahl": {
@@ -57386,6 +57614,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "datazone": {
+                "Value": "datazone",
+                "endpoint": {
+                  "Value": "datazone.us-west-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "dax": {
                 "Value": "dax",
                 "endpoint": {
@@ -59403,7 +59640,13 @@
                 "Value": "trustedadvisor"
               },
               "verified-access": {
-                "Value": "verified-access"
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
diff --git a/moto/ssm/resources/services.json b/moto/ssm/resources/services.json
index 482ea8509..631c52bed 100644
--- a/moto/ssm/resources/services.json
+++ b/moto/ssm/resources/services.json
@@ -882,7 +882,7 @@
                   "Value": "acm-pca.af-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-east-1": {
@@ -891,7 +891,7 @@
                   "Value": "acm-pca.ap-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-northeast-1": {
@@ -900,7 +900,7 @@
                   "Value": "acm-pca.ap-northeast-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-northeast-2": {
@@ -909,7 +909,7 @@
                   "Value": "acm-pca.ap-northeast-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-northeast-3": {
@@ -918,7 +918,7 @@
                   "Value": "acm-pca.ap-northeast-3.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-south-1": {
@@ -927,7 +927,7 @@
                   "Value": "acm-pca.ap-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-south-2": {
@@ -936,7 +936,7 @@
                   "Value": "acm-pca.ap-south-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-southeast-1": {
@@ -945,7 +945,7 @@
                   "Value": "acm-pca.ap-southeast-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-southeast-2": {
@@ -954,7 +954,7 @@
                   "Value": "acm-pca.ap-southeast-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-southeast-3": {
@@ -963,7 +963,7 @@
                   "Value": "acm-pca.ap-southeast-3.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ap-southeast-4": {
@@ -972,7 +972,7 @@
                   "Value": "acm-pca.ap-southeast-4.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "ca-central-1": {
@@ -981,7 +981,7 @@
                   "Value": "acm-pca.ca-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-central-1": {
@@ -990,7 +990,7 @@
                   "Value": "acm-pca.eu-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-central-2": {
@@ -999,7 +999,7 @@
                   "Value": "acm-pca.eu-central-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-north-1": {
@@ -1008,7 +1008,7 @@
                   "Value": "acm-pca.eu-north-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-south-1": {
@@ -1017,7 +1017,7 @@
                   "Value": "acm-pca.eu-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-south-2": {
@@ -1026,7 +1026,7 @@
                   "Value": "acm-pca.eu-south-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-west-1": {
@@ -1035,7 +1035,7 @@
                   "Value": "acm-pca.eu-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-west-2": {
@@ -1044,7 +1044,7 @@
                   "Value": "acm-pca.eu-west-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "eu-west-3": {
@@ -1053,7 +1053,7 @@
                   "Value": "acm-pca.eu-west-3.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "il-central-1": {
@@ -1062,7 +1062,7 @@
                   "Value": "acm-pca.il-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "me-central-1": {
@@ -1071,7 +1071,7 @@
                   "Value": "acm-pca.me-central-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "me-south-1": {
@@ -1080,7 +1080,7 @@
                   "Value": "acm-pca.me-south-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "sa-east-1": {
@@ -1089,7 +1089,7 @@
                   "Value": "acm-pca.sa-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "us-east-1": {
@@ -1098,7 +1098,7 @@
                   "Value": "acm-pca.us-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "us-east-2": {
@@ -1107,7 +1107,7 @@
                   "Value": "acm-pca.us-east-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "us-gov-east-1": {
@@ -1116,7 +1116,7 @@
                   "Value": "acm-pca.us-gov-east-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "us-gov-west-1": {
@@ -1125,7 +1125,7 @@
                   "Value": "acm-pca.us-gov-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "us-west-1": {
@@ -1134,7 +1134,7 @@
                   "Value": "acm-pca.us-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               },
               "us-west-2": {
@@ -1143,7 +1143,7 @@
                   "Value": "acm-pca.us-west-2.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "https"
                 }
               }
             }
@@ -7582,6 +7582,9 @@
               "Value": "https://aws.amazon.com/bedrock/"
             },
             "regions": {
+              "ap-northeast-1": {
+                "Value": "ap-northeast-1"
+              },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1"
               },
@@ -12723,6 +12726,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "us-gov-east-1": {
+                "Value": "us-gov-east-1",
+                "endpoint": {
+                  "Value": "codestar-connections.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "us-west-1": {
                 "Value": "us-west-1",
                 "endpoint": {
@@ -15698,6 +15710,116 @@
               }
             }
           },
+          "datazone": {
+            "Value": "datazone",
+            "longName": {
+              "Value": "Amazon DataZone"
+            },
+            "marketingHomeURL": {
+              "Value": "https://aws.amazon.com/datazone/"
+            },
+            "regions": {
+              "ap-northeast-1": {
+                "Value": "ap-northeast-1",
+                "endpoint": {
+                  "Value": "datazone.ap-northeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-1": {
+                "Value": "ap-southeast-1",
+                "endpoint": {
+                  "Value": "datazone.ap-southeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-2": {
+                "Value": "ap-southeast-2",
+                "endpoint": {
+                  "Value": "datazone.ap-southeast-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ca-central-1": {
+                "Value": "ca-central-1",
+                "endpoint": {
+                  "Value": "datazone.ca-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-central-1": {
+                "Value": "eu-central-1",
+                "endpoint": {
+                  "Value": "datazone.eu-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-north-1": {
+                "Value": "eu-north-1",
+                "endpoint": {
+                  "Value": "datazone.eu-north-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-west-1": {
+                "Value": "eu-west-1",
+                "endpoint": {
+                  "Value": "datazone.eu-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "sa-east-1": {
+                "Value": "sa-east-1",
+                "endpoint": {
+                  "Value": "datazone.sa-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-1": {
+                "Value": "us-east-1",
+                "endpoint": {
+                  "Value": "datazone.us-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-2": {
+                "Value": "us-east-2",
+                "endpoint": {
+                  "Value": "datazone.us-east-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-west-2": {
+                "Value": "us-west-2",
+                "endpoint": {
+                  "Value": "datazone.us-west-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              }
+            }
+          },
           "dax": {
             "Value": "dax",
             "longName": {
@@ -34767,6 +34889,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-south-2": {
+                "Value": "ap-south-2",
+                "endpoint": {
+                  "Value": "license-manager.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1",
                 "endpoint": {
@@ -34794,6 +34925,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-4": {
+                "Value": "ap-southeast-4",
+                "endpoint": {
+                  "Value": "license-manager.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -34830,6 +34970,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "eu-central-2": {
+                "Value": "eu-central-2",
+                "endpoint": {
+                  "Value": "license-manager.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-north-1": {
                 "Value": "eu-north-1",
                 "endpoint": {
@@ -34884,6 +35033,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "me-central-1": {
+                "Value": "me-central-1",
+                "endpoint": {
+                  "Value": "license-manager.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "me-south-1": {
                 "Value": "me-south-1",
                 "endpoint": {
@@ -36324,6 +36482,24 @@
                   "Value": "HTTPS"
                 }
               },
+              "us-gov-east-1": {
+                "Value": "us-gov-east-1",
+                "endpoint": {
+                  "Value": "m2.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-gov-west-1": {
+                "Value": "us-gov-west-1",
+                "endpoint": {
+                  "Value": "m2.us-gov-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "us-west-1": {
                 "Value": "us-west-1",
                 "endpoint": {
@@ -46428,6 +46604,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-3": {
+                "Value": "ap-southeast-3",
+                "endpoint": {
+                  "Value": "resource-explorer-2.ap-southeast-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -46482,6 +46667,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "me-south-1": {
+                "Value": "me-south-1",
+                "endpoint": {
+                  "Value": "resource-explorer-2.me-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "sa-east-1": {
                 "Value": "sa-east-1",
                 "endpoint": {
@@ -59470,34 +59664,94 @@
             },
             "regions": {
               "ap-southeast-2": {
-                "Value": "ap-southeast-2"
+                "Value": "ap-southeast-2",
+                "endpoint": {
+                  "Value": "ec2.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "ca-central-1": {
-                "Value": "ca-central-1"
+                "Value": "ca-central-1",
+                "endpoint": {
+                  "Value": "ec2.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "eu-central-1": {
-                "Value": "eu-central-1"
+                "Value": "eu-central-1",
+                "endpoint": {
+                  "Value": "ec2.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "eu-west-1": {
-                "Value": "eu-west-1"
+                "Value": "eu-west-1",
+                "endpoint": {
+                  "Value": "ec2.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "eu-west-2": {
-                "Value": "eu-west-2"
+                "Value": "eu-west-2",
+                "endpoint": {
+                  "Value": "ec2.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "sa-east-1": {
-                "Value": "sa-east-1"
+                "Value": "sa-east-1",
+                "endpoint": {
+                  "Value": "ec2.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "us-east-1": {
-                "Value": "us-east-1"
+                "Value": "us-east-1",
+                "endpoint": {
+                  "Value": "ec2.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "us-east-2": {
-                "Value": "us-east-2"
+                "Value": "us-east-2",
+                "endpoint": {
+                  "Value": "ec2.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "us-west-1": {
-                "Value": "us-west-1"
+                "Value": "us-west-1",
+                "endpoint": {
+                  "Value": "ec2.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               },
               "us-west-2": {
-                "Value": "us-west-2"
+                "Value": "us-west-2",
+                "endpoint": {
+                  "Value": "ec2.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
               }
             }
           },
diff --git a/setup.cfg b/setup.cfg
index ed8590084..6a79236dc 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -52,7 +52,7 @@ all =
     openapi-spec-validator>=0.2.8
     pyparsing>=3.0.7
     jsondiff>=1.1.2
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
     aws-xray-sdk!=0.96,>=0.93
     setuptools
     multipart
@@ -67,7 +67,7 @@ proxy =
     openapi-spec-validator>=0.2.8
     pyparsing>=3.0.7
     jsondiff>=1.1.2
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
     aws-xray-sdk!=0.96,>=0.93
     setuptools
     multipart
@@ -82,7 +82,7 @@ server =
     openapi-spec-validator>=0.2.8
     pyparsing>=3.0.7
     jsondiff>=1.1.2
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
     aws-xray-sdk!=0.96,>=0.93
     setuptools
     flask!=2.2.0,!=2.2.1
@@ -116,7 +116,7 @@ cloudformation =
     openapi-spec-validator>=0.2.8
     pyparsing>=3.0.7
     jsondiff>=1.1.2
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
     aws-xray-sdk!=0.96,>=0.93
     setuptools
 cloudfront =
@@ -139,10 +139,10 @@ dms =
 ds = sshpubkeys>=3.1.0
 dynamodb =
     docker>=3.0.0
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
 dynamodbstreams =
     docker>=3.0.0
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
 ebs = sshpubkeys>=3.1.0
 ec2 = sshpubkeys>=3.1.0
 ec2instanceconnect =
@@ -205,15 +205,15 @@ resourcegroupstaggingapi =
     openapi-spec-validator>=0.2.8
     pyparsing>=3.0.7
     jsondiff>=1.1.2
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
 route53 =
 route53resolver = sshpubkeys>=3.1.0
 s3 =
     PyYAML>=5.1
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
 s3crc32c =
     PyYAML>=5.1
-    py-partiql-parser==0.3.7
+    py-partiql-parser==0.3.8
     crc32c
 s3control =
 sagemaker =


Test patch:
diff --git a/.github/workflows/tests_real_aws.yml b/.github/workflows/tests_real_aws.yml
index 1c726cfdc..4ff82f327 100644
--- a/.github/workflows/tests_real_aws.yml
+++ b/.github/workflows/tests_real_aws.yml
@@ -42,4 +42,4 @@ jobs:
       env:
         MOTO_TEST_ALLOW_AWS_REQUEST: ${{ true }}
       run: |
-        pytest -sv tests/test_ec2/ tests/test_lakeformation/ tests/test_ses/ tests/test_s3 -m aws_verified
+        pytest -sv tests/test_dynamodb/ tests/test_ec2/ tests/test_lakeformation/ tests/test_ses/ tests/test_s3 -m aws_verified
diff --git a/docs/docs/contributing/development_tips/tests.rst b/docs/docs/contributing/development_tips/tests.rst
index b41488821..6939c5372 100644
--- a/docs/docs/contributing/development_tips/tests.rst
+++ b/docs/docs/contributing/development_tips/tests.rst
@@ -33,7 +33,7 @@ To verify whether your tests pass in ServerMode, you can run the following comma
 
 .. sourcecode:: bash
 
-  moto_server
+  python moto/server.py
   TEST_SERVER_MODE=true pytest -sv tests/test_service/..
 
 
diff --git a/tests/terraformtests/bin/run_go_test b/tests/terraformtests/bin/run_go_test
index 19727426b..6593ecb21 100755
--- a/tests/terraformtests/bin/run_go_test
+++ b/tests/terraformtests/bin/run_go_test
@@ -19,5 +19,9 @@ PATCH="etc/0001-Patch-Hardcode-endpoints-to-local-server.patch"
 (
 cd terraform-provider-aws || exit
 echo "Running tests $2 for service $1..."
-AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test TF_ACC=true go test ./internal/service/$1/ -v -timeout 60m -run $2
+TF_ACC=1 \
+  AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test \
+  AWS_ALTERNATE_ACCESS_KEY_ID=test AWS_ALTERNATE_SECRET_ACCESS_KEY=test \
+  AWS_THIRD_SECRET_ACCESS_KEY=test AWS_THIRD_ACCESS_KEY_ID=test \
+  go test ./internal/service/$1/ -v -timeout 60m -run $2
 )
diff --git a/tests/terraformtests/terraform-tests.failures.txt b/tests/terraformtests/terraform-tests.failures.txt
index accba96d1..9bd6b2873 100644
--- a/tests/terraformtests/terraform-tests.failures.txt
+++ b/tests/terraformtests/terraform-tests.failures.txt
@@ -57,5 +57,8 @@ TestAccLambdaFunctionURL_Cors
 TestAccVPCNATGateway_privateIP
 TestAccVPCSecurityGroupRule_multiDescription
 
+TestAccELBV2TargetGroup_ProtocolVersion_basic
+TestAccELBV2TargetGroup_ForceNew_port
+TestAccELBV2TargetGroup_ForceNew_protocol
 # TF expects a wrong error message, which is not in-line with what AWS returns
 TestAccEFSFileSystemDataSource_nonExistent_fileSystemID
diff --git a/tests/terraformtests/terraform-tests.success.txt b/tests/terraformtests/terraform-tests.success.txt
index 6a2020df2..23229dfca 100644
--- a/tests/terraformtests/terraform-tests.success.txt
+++ b/tests/terraformtests/terraform-tests.success.txt
@@ -267,14 +267,58 @@ elb:
   - TestAccELBSSLNegotiationPolicy
 elbv2:
   - TestAccELBV2ListenerCertificate
-  - TestAccELBV2TargetGroupAttachment
-  - TestAccELBV2TargetGroupDataSource
-  - TestAccELBV2TargetGroup_ALBAlias
-  - TestAccELBV2TargetGroup_networkLB
-  - TestAccELBV2TargetGroup_NetworkLB
+  - TestAccELBV2TargetGroup_backwardsCompatibility
+  - TestAccELBV2TargetGroup_ProtocolVersion_grpcHealthCheck
+  - TestAccELBV2TargetGroup_ProtocolVersion_grpcUpdate
+  - TestAccELBV2TargetGroup_ipAddressType
+  - TestAccELBV2TargetGroup_tls
+  - TestAccELBV2TargetGroup_HealthCheck_tcpHTTPS
+  - TestAccELBV2TargetGroup_attrsOnCreate
+  - TestAccELBV2TargetGroup_basic
+  - TestAccELBV2TargetGroup_udp
+  - TestAccELBV2TargetGroup_ForceNew_name
+  - TestAccELBV2TargetGroup_ForceNew_vpc
+  - TestAccELBV2TargetGroup_Defaults_application
+  - TestAccELBV2TargetGroup_Defaults_network
+  - TestAccELBV2TargetGroup_HealthCheck_enable
+  - TestAccELBV2TargetGroup_Name_generated
+  - TestAccELBV2TargetGroup_Name_prefix
+  - TestAccELBV2TargetGroup_NetworkLB_tcpHealthCheckUpdated
+  - TestAccELBV2TargetGroup_networkLB_TargetGroupWithConnectionTermination
+  - TestAccELBV2TargetGroup_NetworkLB_targetGroupWithProxy
+  - TestAccELBV2TargetGroup_preserveClientIPValid
+  - TestAccELBV2TargetGroup_Geneve_basic
+  - TestAccELBV2TargetGroup_Geneve_notSticky
+  - TestAccELBV2TargetGroup_Geneve_Sticky
+  - TestAccELBV2TargetGroup_Geneve_targetFailover
   - TestAccELBV2TargetGroup_Stickiness_defaultALB
-  - TestAccELBV2TargetGroup_Stickiness_valid
-  - TestAccELBV2TargetGroup_Stickiness_update
+  - TestAccELBV2TargetGroup_Stickiness_defaultNLB
+  - TestAccELBV2TargetGroup_Stickiness_invalidALB
+  - TestAccELBV2TargetGroup_Stickiness_invalidNLB
+  - TestAccELBV2TargetGroup_Stickiness_validALB
+  - TestAccELBV2TargetGroup_Stickiness_validNLB
+  - TestAccELBV2TargetGroup_tags
+  - TestAccELBV2TargetGroup_Stickiness_updateAppEnabled
+  - TestAccELBV2TargetGroup_HealthCheck_update
+  - TestAccELBV2TargetGroup_Stickiness_updateEnabled
+  - TestAccELBV2TargetGroup_HealthCheck_without
+  - TestAccELBV2TargetGroup_ALBAlias_basic
+  - TestAccELBV2TargetGroup_ALBAlias_changeNameForceNew
+  - TestAccELBV2TargetGroup_ALBAlias_changePortForceNew
+  - TestAccELBV2TargetGroup_ALBAlias_changeProtocolForceNew
+  - TestAccELBV2TargetGroup_ALBAlias_changeVPCForceNew
+  - TestAccELBV2TargetGroup_ALBAlias_generatedName
+  - TestAccELBV2TargetGroup_ALBAlias_lambda
+  - TestAccELBV2TargetGroup_ALBAlias_lambdaMultiValueHeadersEnabled
+  - TestAccELBV2TargetGroup_ALBAlias_missingPortProtocolVPC
+  - TestAccELBV2TargetGroup_ALBAlias_namePrefix
+  - TestAccELBV2TargetGroup_ALBAlias_setAndUpdateSlowStart
+  - TestAccELBV2TargetGroup_ALBAlias_tags
+  - TestAccELBV2TargetGroup_ALBAlias_updateHealthCheck
+  - TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingAlgorithmType
+  - TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingCrossZoneEnabled
+  - TestAccELBV2TargetGroup_ALBAlias_updateStickinessEnabled
+  - TestAccELBV2TargetGroup_Name_noDuplicates
 events:
   - TestAccEventsAPIDestination
   - TestAccEventsArchive
diff --git a/tests/test_dynamodb/__init__.py b/tests/test_dynamodb/__init__.py
index 08a1c1568..311c0bbd6 100644
--- a/tests/test_dynamodb/__init__.py
+++ b/tests/test_dynamodb/__init__.py
@@ -1,1 +1,57 @@
-# This file is intentionally left blank.
+import boto3
+import os
+from functools import wraps
+from moto import mock_dynamodb
+from uuid import uuid4
+
+
+def dynamodb_aws_verified(func):
+    """
+    Function that is verified to work against AWS.
+    Can be run against AWS at any time by setting:
+      MOTO_TEST_ALLOW_AWS_REQUEST=true
+
+    If this environment variable is not set, the function runs in a `mock_dynamodb` context.
+
+    This decorator will:
+      - Create a table
+      - Run the test and pass the table_name as an argument
+      - Delete the table
+    """
+
+    @wraps(func)
+    def pagination_wrapper():
+        client = boto3.client("dynamodb", region_name="us-east-1")
+        table_name = "t" + str(uuid4())[0:6]
+
+        allow_aws_request = (
+            os.environ.get("MOTO_TEST_ALLOW_AWS_REQUEST", "false").lower() == "true"
+        )
+
+        if allow_aws_request:
+            print(f"Test {func} will create DynamoDB Table {table_name}")
+            resp = create_table_and_test(table_name, client)
+        else:
+            with mock_dynamodb():
+                resp = create_table_and_test(table_name, client)
+        return resp
+
+    def create_table_and_test(table_name, client):
+        client.create_table(
+            TableName=table_name,
+            KeySchema=[{"AttributeName": "pk", "KeyType": "HASH"}],
+            AttributeDefinitions=[{"AttributeName": "pk", "AttributeType": "S"}],
+            ProvisionedThroughput={"ReadCapacityUnits": 1, "WriteCapacityUnits": 5},
+            Tags=[{"Key": "environment", "Value": "moto_tests"}],
+        )
+        waiter = client.get_waiter("table_exists")
+        waiter.wait(TableName=table_name)
+        try:
+            resp = func(table_name)
+        finally:
+            ### CLEANUP ###
+            client.delete_table(TableName=table_name)
+
+        return resp
+
+    return pagination_wrapper
diff --git a/tests/test_dynamodb/test_dynamodb_statements.py b/tests/test_dynamodb/test_dynamodb_statements.py
index 48879ec34..952487321 100644
--- a/tests/test_dynamodb/test_dynamodb_statements.py
+++ b/tests/test_dynamodb/test_dynamodb_statements.py
@@ -1,69 +1,80 @@
 import boto3
+import pytest
 
 from moto import mock_dynamodb
 from unittest import TestCase
 
-
-class TestSelectStatements:
-    mock = mock_dynamodb()
-
-    @classmethod
-    def setup_class(cls):
-        cls.mock.start()
-        cls.client = boto3.client("dynamodb", "us-east-1")
-        cls.client.create_table(
-            TableName="messages",
-            KeySchema=[{"AttributeName": "id", "KeyType": "HASH"}],
-            AttributeDefinitions=[{"AttributeName": "id", "AttributeType": "S"}],
-            ProvisionedThroughput={"ReadCapacityUnits": 1, "WriteCapacityUnits": 5},
-        )
-        cls.item1 = {"id": {"S": "msg1"}, "body": {"S": "some text"}}
-        cls.item2 = {"id": {"S": "msg2"}, "body": {"S": "n/a"}, "unique": {"S": "key"}}
-        cls.client.put_item(TableName="messages", Item=cls.item1)
-        cls.client.put_item(TableName="messages", Item=cls.item2)
-
-    @classmethod
-    def teardown_class(cls):
-        try:
-            cls.mock.stop()
-        except RuntimeError:
-            pass
-
-    def test_execute_statement_select_star(self):
-        items = TestSelectStatements.client.execute_statement(
-            Statement="select * from messages"
-        )["Items"]
-        assert TestSelectStatements.item1 in items
-        assert TestSelectStatements.item2 in items
-
-    def test_execute_statement_select_unique(self):
-        items = TestSelectStatements.client.execute_statement(
-            Statement="select unique from messages"
-        )["Items"]
-        assert {} in items
-        assert {"unique": {"S": "key"}} in items
-
-    def test_execute_statement_with_parameter(self):
-        stmt = "select * from messages where id = ?"
-        items = TestSelectStatements.client.execute_statement(
-            Statement=stmt, Parameters=[{"S": "msg1"}]
-        )["Items"]
-        assert len(items) == 1
-        assert TestSelectStatements.item1 in items
-
-        stmt = "select id from messages where id = ?"
-        items = TestSelectStatements.client.execute_statement(
-            Statement=stmt, Parameters=[{"S": "msg1"}]
-        )["Items"]
-        assert len(items) == 1
-        assert {"id": {"S": "msg1"}} in items
-
-    def test_execute_statement_with_no_results(self):
-        stmt = "select * from messages where id = ?"
-        items = TestSelectStatements.client.execute_statement(
-            Statement=stmt, Parameters=[{"S": "msg3"}]
-        )["Items"]
-        assert items == []
+from . import dynamodb_aws_verified
+
+
+item1 = {
+    "pk": {"S": "msg1"},
+    "body": {"S": "some text"},
+    "nested_attrs": {"M": {"some": {"S": "key"}}},
+    "list_attrs": {"L": [{"BOOL": True}, {"BOOL": False}]},
+    "bool_attr": {"BOOL": True},
+}
+item2 = {"pk": {"S": "msg2"}, "body": {"S": "n/a"}, "unique_key": {"S": "key"}}
+
+
+def create_items(table_name):
+    client = boto3.client("dynamodb", "us-east-1")
+    client.put_item(TableName=table_name, Item=item1)
+    client.put_item(TableName=table_name, Item=item2)
+
+
+@pytest.mark.aws_verified
+@dynamodb_aws_verified
+def test_execute_statement_select_star(table_name=None):
+    client = boto3.client("dynamodb", "us-east-1")
+    create_items(table_name)
+    items = client.execute_statement(Statement=f"select * from {table_name}")["Items"]
+    assert item1 in items
+    assert item2 in items
+
+
+@pytest.mark.aws_verified
+@dynamodb_aws_verified
+def test_execute_statement_select_unique(table_name=None):
+    client = boto3.client("dynamodb", "us-east-1")
+    create_items(table_name)
+    items = client.execute_statement(Statement=f"select unique_key from {table_name}")[
+        "Items"
+    ]
+    assert {} in items
+    assert {"unique_key": {"S": "key"}} in items
+
+
+@pytest.mark.aws_verified
+@dynamodb_aws_verified
+def test_execute_statement_with_parameter(table_name=None):
+    client = boto3.client("dynamodb", "us-east-1")
+    create_items(table_name)
+    stmt = f"select * from {table_name} where pk = ?"
+    items = client.execute_statement(Statement=stmt, Parameters=[{"S": "msg1"}])[
+        "Items"
+    ]
+    assert len(items) == 1
+    assert item1 in items
+
+    stmt = f"select pk from {table_name} where pk = ?"
+    items = client.execute_statement(Statement=stmt, Parameters=[{"S": "msg1"}])[
+        "Items"
+    ]
+    assert len(items) == 1
+    assert {"pk": {"S": "msg1"}} in items
+
+
+@pytest.mark.aws_verified
+@dynamodb_aws_verified
+def test_execute_statement_with_no_results(table_name=None):
+    client = boto3.client("dynamodb", "us-east-1")
+    create_items(table_name)
+    stmt = f"select * from {table_name} where pk = ?"
+    items = client.execute_statement(Statement=stmt, Parameters=[{"S": "msg3"}])[
+        "Items"
+    ]
+    assert items == []
 
 
 @mock_dynamodb
diff --git a/tests/test_ec2/test_fleets.py b/tests/test_ec2/test_fleets.py
index 2dfda6991..b63595411 100644
--- a/tests/test_ec2/test_fleets.py
+++ b/tests/test_ec2/test_fleets.py
@@ -57,6 +57,7 @@ class launch_template_context:
         self.ec2.delete_launch_template(LaunchTemplateId=self.lt_id)
 
 
+@pytest.mark.aws_verified
 @ec2_aws_verified
 def test_launch_template_is_created_properly():
     with launch_template_context() as ctxt:
@@ -379,6 +380,7 @@ def test_create_fleet_using_launch_template_config__overrides():
     assert instance["SubnetId"] == subnet_id
 
 
+@pytest.mark.aws_verified
 @ec2_aws_verified
 def test_delete_fleet():
     with launch_template_context() as ctxt:
diff --git a/tests/test_elbv2/test_elbv2_target_groups.py b/tests/test_elbv2/test_elbv2_target_groups.py
index 0fea02be4..512f1f118 100644
--- a/tests/test_elbv2/test_elbv2_target_groups.py
+++ b/tests/test_elbv2/test_elbv2_target_groups.py
@@ -398,21 +398,24 @@ def test_target_group_attributes():
         Attributes=[
             {"Key": "stickiness.enabled", "Value": "true"},
             {"Key": "stickiness.type", "Value": "app_cookie"},
+            {"Key": "stickiness.app_cookie.cookie_name", "Value": "my_cookie"},
         ],
     )
 
     # The response should have only the keys updated
-    assert len(response["Attributes"]) == 2
+    assert len(response["Attributes"]) == 3
     attributes = {attr["Key"]: attr["Value"] for attr in response["Attributes"]}
     assert attributes["stickiness.type"] == "app_cookie"
     assert attributes["stickiness.enabled"] == "true"
+    assert attributes["stickiness.app_cookie.cookie_name"] == "my_cookie"
 
     # These new values should be in the full attribute list
     response = conn.describe_target_group_attributes(TargetGroupArn=target_group_arn)
-    assert len(response["Attributes"]) == 7
+    assert len(response["Attributes"]) == 8
     attributes = {attr["Key"]: attr["Value"] for attr in response["Attributes"]}
     assert attributes["stickiness.type"] == "app_cookie"
     assert attributes["stickiness.enabled"] == "true"
+    assert attributes["stickiness.app_cookie.cookie_name"] == "my_cookie"
 
 
 @mock_elbv2
@@ -993,3 +996,213 @@ def test_create_target_group_healthcheck_validation(protocol_name, should_raise)
         assert exc.value.response["Error"]["Message"] == _get_error_message(
             protocol_name, 5, 5
         )
+
+
+@mock_ec2
+@mock_elbv2
+@pytest.mark.parametrize(
+    "protocol, should_raise, stickiness_type, error_message",
+    [
+        # stickiness.type = "source_ip"
+        (
+            "HTTP",
+            True,
+            "source_ip",
+            "Stickiness type 'source_ip' is not supported for target groups with the HTTP protocol",
+        ),
+        (
+            "HTTPS",
+            True,
+            "source_ip",
+            "Stickiness type 'source_ip' is not supported for target groups with the HTTPS protocol",
+        ),
+        ("TCP", False, "source_ip", ""),
+        (
+            "TLS",
+            True,
+            "source_ip",
+            "You cannot enable stickiness on target groups with the TLS protocol",
+        ),
+        ("UDP", False, "source_ip", ""),
+        ("TCP_UDP", False, "source_ip", ""),
+        (
+            "GENEVE",
+            True,
+            "source_ip",
+            "'source_ip' must be one of [source_ip_dest_ip_proto, source_ip_dest_ip]",
+        ),
+        # stickiness.type = "lb_cookie"
+        ("HTTP", False, "lb_cookie", ""),
+        ("HTTPS", False, "lb_cookie", ""),
+        (
+            "TCP",
+            True,
+            "lb_cookie",
+            "Stickiness type 'lb_cookie' is not supported for target groups with the TCP protocol",
+        ),
+        (
+            "TLS",
+            True,
+            "lb_cookie",
+            "Stickiness type 'lb_cookie' is not supported for target groups with the TLS protocol",
+        ),
+        (
+            "UDP",
+            True,
+            "lb_cookie",
+            "Stickiness type 'lb_cookie' is not supported for target groups with the UDP protocol",
+        ),
+        (
+            "TCP_UDP",
+            True,
+            "lb_cookie",
+            "Stickiness type 'lb_cookie' is not supported for target groups with the TCP_UDP protocol",
+        ),
+        (
+            "GENEVE",
+            True,
+            "lb_cookie",
+            "'lb_cookie' must be one of [source_ip_dest_ip_proto, source_ip_dest_ip]",
+        ),
+        # stickiness.type = "app_cookie"
+        ("HTTP", False, "app_cookie", ""),
+        ("HTTPS", False, "app_cookie", ""),
+        (
+            "TCP",
+            True,
+            "app_cookie",
+            "Stickiness type 'app_cookie' is not supported for target groups with the TCP protocol",
+        ),
+        (
+            "TLS",
+            True,
+            "app_cookie",
+            "Stickiness type 'app_cookie' is not supported for target groups with the TLS protocol",
+        ),
+        (
+            "UDP",
+            True,
+            "app_cookie",
+            "Stickiness type 'app_cookie' is not supported for target groups with the UDP protocol",
+        ),
+        (
+            "TCP_UDP",
+            True,
+            "app_cookie",
+            "Stickiness type 'app_cookie' is not supported for target groups with the TCP_UDP protocol",
+        ),
+        (
+            "GENEVE",
+            True,
+            "app_cookie",
+            "Target group attribute key 'stickiness.app_cookie.cookie_name' is not recognized",
+        ),
+        # stickiness.type = "source_ip_dest_ip"
+        (
+            "HTTP",
+            True,
+            "source_ip_dest_ip",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "HTTPS",
+            True,
+            "source_ip_dest_ip",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "TCP",
+            True,
+            "source_ip_dest_ip",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "TLS",
+            True,
+            "source_ip_dest_ip",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "UDP",
+            True,
+            "source_ip_dest_ip",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "TCP_UDP",
+            True,
+            "source_ip_dest_ip",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        ("GENEVE", False, "source_ip_dest_ip", ""),
+        # stickiness.type = "source_ip_dest_ip_proto"
+        (
+            "HTTPS",
+            True,
+            "source_ip_dest_ip_proto",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "HTTP",
+            True,
+            "source_ip_dest_ip_proto",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "TCP",
+            True,
+            "source_ip_dest_ip_proto",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "TLS",
+            True,
+            "source_ip_dest_ip_proto",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "UDP",
+            True,
+            "source_ip_dest_ip_proto",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        (
+            "TCP_UDP",
+            True,
+            "source_ip_dest_ip_proto",
+            "'Stickiness type' must be one of [app_cookie, lb_cookie, source_ip]",
+        ),
+        ("GENEVE", False, "source_ip_dest_ip_proto", ""),
+    ],
+)
+def test_target_group_attributes_stickiness(
+    protocol, should_raise, stickiness_type, error_message
+):
+    elbv2 = boto3.client("elbv2", region_name="us-east-1")
+    _, vpc, _, _, _, _ = create_load_balancer()
+
+    response = elbv2.create_target_group(
+        Name="a-target",
+        Protocol=protocol,
+        Port=6081 if protocol == "GENEVE" else 80,
+        VpcId=vpc.id,
+    )
+    target_group_arn = response["TargetGroups"][0]["TargetGroupArn"]
+    attributes = [
+        {"Key": "stickiness.enabled", "Value": "true"},
+        {"Key": "stickiness.type", "Value": stickiness_type},
+    ]
+    if stickiness_type == "app_cookie":
+        attributes.append(
+            {"Key": "stickiness.app_cookie.cookie_name", "Value": "localstack"}
+        )
+    if should_raise:
+        with pytest.raises(ClientError) as exc:
+            elbv2.modify_target_group_attributes(
+                TargetGroupArn=target_group_arn, Attributes=attributes
+            )
+        assert exc.value.response["Error"]["Message"] == error_message
+    else:
+        elbv2.modify_target_group_attributes(
+            TargetGroupArn=target_group_arn, Attributes=attributes
+        )
diff --git a/tests/test_ivs/__init__.py b/tests/test_ivs/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/test_ivs/test_ivs.py b/tests/test_ivs/test_ivs.py
new file mode 100644
index 000000000..b5a2f1867
--- /dev/null
+++ b/tests/test_ivs/test_ivs.py
@@ -0,0 +1,192 @@
+"""Unit tests for ivs-supported APIs."""
+import boto3
+from botocore.exceptions import ClientError
+from pytest import raises
+from moto import mock_ivs
+from re import fullmatch
+
+
+@mock_ivs
+def test_create_channel_with_name():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(name="foo")
+    assert create_response["channel"]["name"] == "foo"
+
+
+@mock_ivs
+def test_create_channel_defaults():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(name="foo")
+    assert create_response["channel"]["authorized"] is False
+    assert create_response["channel"]["insecureIngest"] is False
+    assert create_response["channel"]["latencyMode"] == "LOW"
+    assert create_response["channel"]["preset"] == ""
+    assert create_response["channel"]["recordingConfigurationArn"] == ""
+    assert create_response["channel"]["tags"] == {}
+    assert create_response["channel"]["type"] == "STANDARD"
+    assert create_response["streamKey"]["tags"] == {}
+
+
+@mock_ivs
+def test_create_channel_generated_values():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(name="foo")
+    assert fullmatch(r"arn:aws:ivs:.*:channel/.*", create_response["channel"]["arn"])
+    assert create_response["channel"]["ingestEndpoint"]
+    assert create_response["channel"]["playbackUrl"]
+    assert fullmatch(
+        r"arn:aws:ivs:.*:stream-key/.*", create_response["streamKey"]["arn"]
+    )
+    assert (
+        create_response["streamKey"]["channelArn"] == create_response["channel"]["arn"]
+    )
+    assert fullmatch(r"sk_.*", create_response["streamKey"]["value"])
+
+
+@mock_ivs
+def test_create_channel_with_name_and_recording_configuration():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(
+        name="foo",
+        recordingConfigurationArn="blah",
+    )
+    assert create_response["channel"]["name"] == "foo"
+    assert create_response["channel"]["recordingConfigurationArn"] == "blah"
+
+
+@mock_ivs
+def test_list_channels_empty():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    list_response = client.list_channels()
+    assert list_response["channels"] == []
+
+
+@mock_ivs
+def test_list_channels_one():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    client.create_channel(name="foo")
+    list_response = client.list_channels()
+    assert len(list_response["channels"]) == 1
+    assert list_response["channels"][0]["name"] == "foo"
+
+
+@mock_ivs
+def test_list_channels_two():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    client.create_channel(name="foo")
+    client.create_channel(
+        name="bar",
+        recordingConfigurationArn="blah",
+    )
+    list_response = client.list_channels()
+    assert len(list_response["channels"]) == 2
+    assert list_response["channels"][0]["name"] == "foo"
+    assert list_response["channels"][1]["name"] == "bar"
+
+
+@mock_ivs
+def test_list_channels_by_name():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    client.create_channel(name="foo")
+    client.create_channel(
+        name="bar",
+        recordingConfigurationArn="blah",
+    )
+    list_response = client.list_channels(filterByName="foo")
+    assert len(list_response["channels"]) == 1
+    assert list_response["channels"][0]["name"] == "foo"
+
+
+@mock_ivs
+def test_list_channels_by_recording_configuration():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    client.create_channel(name="foo")
+    client.create_channel(
+        name="bar",
+        recordingConfigurationArn="blah",
+    )
+    list_response = client.list_channels(filterByRecordingConfigurationArn="blah")
+    assert len(list_response["channels"]) == 1
+    assert list_response["channels"][0]["name"] == "bar"
+
+
+@mock_ivs
+def test_list_channels_pagination():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    client.create_channel(name="foo")
+    client.create_channel(name="bar")
+    first_list_response = client.list_channels(maxResults=1)
+    assert len(first_list_response["channels"]) == 1
+    assert "nextToken" in first_list_response
+    second_list_response = client.list_channels(
+        maxResults=1, nextToken=first_list_response["nextToken"]
+    )
+    assert len(second_list_response["channels"]) == 1
+    assert "nextToken" not in second_list_response
+
+
+@mock_ivs
+def test_get_channel_exists():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(name="foo")
+    get_response = client.get_channel(arn=create_response["channel"]["arn"])
+    assert get_response["channel"]["name"] == "foo"
+
+
+@mock_ivs
+def test_get_channel_not_exists():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    with raises(ClientError) as exc:
+        client.get_channel(arn="nope")
+    assert exc.value.response["Error"]["Code"] == "ResourceNotFoundException"
+
+
+@mock_ivs
+def test_batch_get_channel():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(name="foo")
+    batch_get_response = client.batch_get_channel(
+        arns=[create_response["channel"]["arn"]]
+    )
+    assert len(batch_get_response["channels"]) == 1
+    assert batch_get_response["channels"][0]["name"] == "foo"
+
+
+@mock_ivs
+def test_update_channel_exists():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(
+        name="foo",
+        recordingConfigurationArn="blah",
+    )
+    update_response = client.update_channel(
+        arn=create_response["channel"]["arn"],
+        name="bar",
+    )
+    assert update_response["channel"]["name"] == "bar"
+    assert update_response["channel"]["recordingConfigurationArn"] == "blah"
+
+
+@mock_ivs
+def test_update_channel_not_exists():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    with raises(ClientError) as exc:
+        client.update_channel(arn="nope", name="bar")
+    assert exc.value.response["Error"]["Code"] == "ResourceNotFoundException"
+
+
+@mock_ivs
+def test_delete_channel_exists():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    create_response = client.create_channel(name="foo")
+    client.delete_channel(arn=create_response["channel"]["arn"])
+    list_response = client.list_channels()
+    assert list_response["channels"] == []
+
+
+@mock_ivs
+def test_delete_channel_not_exists():
+    client = boto3.client("ivs", region_name="eu-west-1")
+    with raises(ClientError) as exc:
+        client.delete_channel(arn="nope")
+    assert exc.value.response["Error"]["Code"] == "ResourceNotFoundException"
diff --git a/tests/test_lakeformation/test_resource_tags_integration.py b/tests/test_lakeformation/test_resource_tags_integration.py
index ecc33cc16..1887e5a1c 100644
--- a/tests/test_lakeformation/test_resource_tags_integration.py
+++ b/tests/test_lakeformation/test_resource_tags_integration.py
@@ -1,10 +1,12 @@
 import boto3
+import pytest
 
 from uuid import uuid4
 
 from . import lakeformation_aws_verified
 
 
+@pytest.mark.aws_verified
 @lakeformation_aws_verified
 def test_add_unknown_lf_tags(
     bucket_name=None,  # pylint: disable=unused-argument
@@ -32,6 +34,7 @@ def test_add_unknown_lf_tags(
     }
 
 
+@pytest.mark.aws_verified
 @lakeformation_aws_verified
 def test_tag_lakeformation_database(
     bucket_name=None,  # pylint: disable=unused-argument
@@ -115,6 +118,7 @@ def test_tag_lakeformation_database(
     )
 
 
+@pytest.mark.aws_verified
 @lakeformation_aws_verified
 def test_tag_lakeformation_table(
     bucket_name=None,  # pylint: disable=unused-argument
@@ -198,6 +202,7 @@ def test_tag_lakeformation_table(
     )
 
 
+@pytest.mark.aws_verified
 @lakeformation_aws_verified
 def test_tag_lakeformation_columns(
     bucket_name=None,  # pylint: disable=unused-argument
@@ -361,6 +366,7 @@ def test_tag_lakeformation_columns(
     )
 
 
+@pytest.mark.aws_verified
 @lakeformation_aws_verified
 def test_lf_tags(
     bucket_name=None, db_name=None, table_name=None, column_name=None
diff --git a/tests/test_moto_api/mock_random/test_mock_random.py b/tests/test_moto_api/mock_random/test_mock_random.py
index dd415a644..8c5c4d120 100644
--- a/tests/test_moto_api/mock_random/test_mock_random.py
+++ b/tests/test_moto_api/mock_random/test_mock_random.py
@@ -31,7 +31,13 @@ def test_semi_random_hex_strings():
     # Ensure they are different
     assert fixed_hex != random_hex
 
-    # Retrieving another 'fixed' UUID should not return a known UUID
-    second_hex = mock_random.uuid4()
+    # Retrieving another 'fixed' HEX should not return a known HEX
+    second_hex = mock_random.get_random_hex()
     assert second_hex != random_hex
     assert second_hex != fixed_hex
+
+
+def test_semi_random_token_urlsafe():
+    mock_random.seed(42)
+    token = mock_random.token_urlsafe(32)
+    assert token == "nXmxo38xgBzRGmcG-0DWvVdSaEaQO7E-3lYkOenBuCM"
diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py
index 1c06a3a0d..52e3a598c 100644
--- a/tests/test_s3/test_s3.py
+++ b/tests/test_s3/test_s3.py
@@ -1684,6 +1684,9 @@ def test_delete_versioned_bucket():
 @s3_aws_verified
 def test_delete_versioned_bucket_returns_metadata(name=None):
     client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
+    resource = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
+    bucket = resource.Bucket(name)
+    versions = bucket.object_versions
 
     client.put_bucket_versioning(
         Bucket=name, VersioningConfiguration={"Status": "Enabled"}
@@ -1696,12 +1699,30 @@ def test_delete_versioned_bucket_returns_metadata(name=None):
 
     # Delete the object
     del_file = client.delete_object(Bucket=name, Key="test1")
+    deleted_version_id = del_file["VersionId"]
     assert del_file["DeleteMarker"] is True
-    assert del_file["VersionId"] is not None
+    assert deleted_version_id is not None
 
     # We now have one DeleteMarker
     assert len(client.list_object_versions(Bucket=name)["DeleteMarkers"]) == 1
 
+    # list_object_versions returns the object itself, and a DeleteMarker
+    # object.head() returns a 'x-amz-delete-marker' header
+    # delete_marker.head() returns a 405
+    for version in versions.filter(Prefix="test1"):
+        if version.version_id == deleted_version_id:
+            with pytest.raises(ClientError) as exc:
+                version.head()
+            err = exc.value.response
+            assert err["Error"] == {"Code": "405", "Message": "Method Not Allowed"}
+            assert err["ResponseMetadata"]["HTTPStatusCode"] == 405
+            assert (
+                err["ResponseMetadata"]["HTTPHeaders"]["x-amz-delete-marker"] == "true"
+            )
+            assert err["ResponseMetadata"]["HTTPHeaders"]["allow"] == "DELETE"
+        else:
+            assert version.head()["ResponseMetadata"]["HTTPStatusCode"] == 200
+
     # Delete the same object gives a new version id
     del_mrk1 = client.delete_object(Bucket=name, Key="test1")
     assert del_mrk1["DeleteMarker"] is True
@@ -1717,6 +1738,20 @@ def test_delete_versioned_bucket_returns_metadata(name=None):
     assert del_mrk2["DeleteMarker"] is True
     assert del_mrk2["VersionId"] == del_mrk1["VersionId"]
 
+    for version in versions.filter(Prefix="test1"):
+        if version.version_id == deleted_version_id:
+            with pytest.raises(ClientError) as exc:
+                version.head()
+            err = exc.value.response
+            assert err["Error"] == {"Code": "405", "Message": "Method Not Allowed"}
+            assert err["ResponseMetadata"]["HTTPStatusCode"] == 405
+            assert (
+                err["ResponseMetadata"]["HTTPHeaders"]["x-amz-delete-marker"] == "true"
+            )
+            assert err["ResponseMetadata"]["HTTPHeaders"]["allow"] == "DELETE"
+        else:
+            assert version.head()["ResponseMetadata"]["HTTPStatusCode"] == 200
+
     # We now have only one DeleteMarker
     assert len(client.list_object_versions(Bucket=name)["DeleteMarkers"]) == 1
 
@@ -1732,6 +1767,13 @@ def test_delete_versioned_bucket_returns_metadata(name=None):
     assert len(client.list_object_versions(Bucket=name)["DeleteMarkers"]) == 1
     assert "Versions" not in client.list_object_versions(Bucket=name)
 
+    # Because we only have DeleteMarkers, we can not call `head()` on any of othem
+    for version in versions.filter(Prefix="test1"):
+        with pytest.raises(ClientError) as exc:
+            version.head()
+        err = exc.value.response
+        assert err["Error"] == {"Code": "405", "Message": "Method Not Allowed"}
+
     # Delete the last marker
     del_mrk4 = client.delete_object(
         Bucket=name, Key="test1", VersionId=del_mrk2["VersionId"]
diff --git a/tests/test_s3/test_s3_select.py b/tests/test_s3/test_s3_select.py
index d299365f8..84a80dc34 100644
--- a/tests/test_s3/test_s3_select.py
+++ b/tests/test_s3/test_s3_select.py
@@ -1,20 +1,22 @@
-import json
-from unittest import TestCase
-from uuid import uuid4
-
 import boto3
+import json
 import pytest
 
-from moto import mock_s3
+from . import s3_aws_verified
 
 
 SIMPLE_JSON = {"a1": "b1", "a2": "b2", "a3": None}
 SIMPLE_JSON2 = {"a1": "b2", "a3": "b3"}
+NESTED_JSON = {"a1": {"b1": "b2"}, "a2": [True, False], "a3": True, "a4": [1, 5]}
 EXTENSIVE_JSON = [
     {
         "staff": [
-            {"name": "Janelyn M", "city": "Chicago", "kids": 2},
-            {"name": "Stacy P", "city": "Seattle", "kids": 1},
+            {
+                "name": "Janelyn M",
+                "city": "Chicago",
+                "kids": [{"Name": "Josh"}, {"Name": "Jay"}],
+            },
+            {"name": "Stacy P", "city": "Seattle", "kids": {"Name": "Josh"}},
         ],
         "country": "USA",
     }
@@ -26,152 +28,201 @@ y,u,i
 q,w,y"""
 
 
-@mock_s3
-class TestS3Select(TestCase):
-    def setUp(self) -> None:
-        self.client = boto3.client("s3", "us-east-1")
-        self.bucket_name = str(uuid4())
-        self.client.create_bucket(Bucket=self.bucket_name)
-        self.client.put_object(
-            Bucket=self.bucket_name, Key="simple.json", Body=json.dumps(SIMPLE_JSON)
-        )
-        self.client.put_object(
-            Bucket=self.bucket_name, Key="list.json", Body=json.dumps(SIMPLE_LIST)
-        )
-        self.client.put_object(
-            Bucket=self.bucket_name, Key="simple_csv", Body=SIMPLE_CSV
-        )
-        self.client.put_object(
-            Bucket=self.bucket_name,
-            Key="extensive.json",
-            Body=json.dumps(EXTENSIVE_JSON),
-        )
-
-    def tearDown(self) -> None:
-        self.client.delete_object(Bucket=self.bucket_name, Key="list.json")
-        self.client.delete_object(Bucket=self.bucket_name, Key="simple.json")
-        self.client.delete_object(Bucket=self.bucket_name, Key="simple_csv")
-        self.client.delete_object(Bucket=self.bucket_name, Key="extensive.json")
-        self.client.delete_bucket(Bucket=self.bucket_name)
-
-    def test_query_all(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="simple.json",
-            Expression="SELECT * FROM S3Object",
-            ExpressionType="SQL",
-            InputSerialization={"JSON": {"Type": "DOCUMENT"}},
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b'{"a1":"b1","a2":"b2","a3":null},'}} in result
-
-        # Verify result is valid JSON
-        json.loads(result[0]["Records"]["Payload"][0:-1].decode("utf-8"))
-
-        # Verify result contains metadata
-        assert {
-            "Stats": {
-                "Details": {
-                    "BytesScanned": 24,
-                    "BytesProcessed": 24,
-                    "BytesReturned": 22,
-                }
-            }
-        } in result
-        assert {"End": {}} in result
-
-    def test_count_function(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="simple.json",
-            Expression="SELECT count(*) FROM S3Object",
-            ExpressionType="SQL",
-            InputSerialization={"JSON": {"Type": "DOCUMENT"}},
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b'{"_1":1},'}} in result
-
-    @pytest.mark.xfail(message="Not yet implement in our parser")
-    def test_count_as(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="simple.json",
-            Expression="SELECT count(*) as cnt FROM S3Object",
-            ExpressionType="SQL",
-            InputSerialization={"JSON": {"Type": "DOCUMENT"}},
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b'{"cnt":1},'}} in result
-
-    @pytest.mark.xfail(message="Not yet implement in our parser")
-    def test_count_list_as(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="list.json",
-            Expression="SELECT count(*) as cnt FROM S3Object",
-            ExpressionType="SQL",
-            InputSerialization={"JSON": {"Type": "DOCUMENT"}},
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b'{"cnt":1},'}} in result
-
-    def test_count_csv(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="simple_csv",
-            Expression="SELECT count(*) FROM S3Object",
-            ExpressionType="SQL",
-            InputSerialization={
-                "CSV": {"FileHeaderInfo": "USE", "FieldDelimiter": ","}
-            },
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b'{"_1":3},'}} in result
-
-    def test_default_record_delimiter(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="simple_csv",
-            Expression="SELECT count(*) FROM S3Object",
-            ExpressionType="SQL",
-            InputSerialization={
-                "CSV": {"FileHeaderInfo": "USE", "FieldDelimiter": ","}
-            },
-            # RecordDelimiter is not specified - should default to new line (\n)
-            OutputSerialization={"JSON": {}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b'{"_1":3}\n'}} in result
-
-    def test_extensive_json__select_list(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="extensive.json",
-            Expression="select * from s3object[*].staff[*] s",
-            ExpressionType="SQL",
-            InputSerialization={"JSON": {"Type": "DOCUMENT"}},
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {"Records": {"Payload": b"{},"}} in result
-
-    def test_extensive_json__select_all(self):
-        content = self.client.select_object_content(
-            Bucket=self.bucket_name,
-            Key="extensive.json",
-            Expression="select * from s3object s",
-            ExpressionType="SQL",
-            InputSerialization={"JSON": {"Type": "DOCUMENT"}},
-            OutputSerialization={"JSON": {"RecordDelimiter": ","}},
-        )
-        result = list(content["Payload"])
-        assert {
-            "Records": {
-                "Payload": b'{"_1":[{"staff":[{"name":"Janelyn M","city":"Chicago","kids":2},{"name":"Stacy P","city":"Seattle","kids":1}],"country":"USA"}]},'
-            }
-        } in result
+def create_test_files(bucket_name):
+    client = boto3.client("s3", "us-east-1")
+    client.put_object(
+        Bucket=bucket_name, Key="simple.json", Body=json.dumps(SIMPLE_JSON)
+    )
+    client.put_object(Bucket=bucket_name, Key="list.json", Body=json.dumps(SIMPLE_LIST))
+    client.put_object(Bucket=bucket_name, Key="simple_csv", Body=SIMPLE_CSV)
+    client.put_object(
+        Bucket=bucket_name,
+        Key="extensive.json",
+        Body=json.dumps(EXTENSIVE_JSON),
+    )
+    client.put_object(
+        Bucket=bucket_name,
+        Key="nested.json",
+        Body=json.dumps(NESTED_JSON),
+    )
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_query_all(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="simple.json",
+        Expression="SELECT * FROM S3Object",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b'{"a1":"b1","a2":"b2","a3":null},'}} in result
+
+    # Verify result is valid JSON
+    json.loads(result[0]["Records"]["Payload"][0:-1].decode("utf-8"))
+
+    # Verify result contains metadata
+    stats = [res for res in result if "Stats" in res][0]["Stats"]
+    assert "BytesScanned" in stats["Details"]
+    assert "BytesProcessed" in stats["Details"]
+    assert "BytesReturned" in stats["Details"]
+    assert {"End": {}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_count_function(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="simple.json",
+        Expression="SELECT count(*) FROM S3Object",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b'{"_1":1},'}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+@pytest.mark.xfail(message="Not yet implement in our parser")
+def test_count_as(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="simple.json",
+        Expression="SELECT count(*) as cnt FROM S3Object",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b'{"cnt":1},'}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+@pytest.mark.xfail(message="Not yet implement in our parser")
+def test_count_list_as(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="list.json",
+        Expression="SELECT count(*) as cnt FROM S3Object",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b'{"cnt":1},'}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_count_csv(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="simple_csv",
+        Expression="SELECT count(*) FROM S3Object",
+        ExpressionType="SQL",
+        InputSerialization={"CSV": {"FileHeaderInfo": "USE", "FieldDelimiter": ","}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b'{"_1":3},'}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_default_record_delimiter(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="simple_csv",
+        Expression="SELECT count(*) FROM S3Object",
+        ExpressionType="SQL",
+        InputSerialization={"CSV": {"FileHeaderInfo": "USE", "FieldDelimiter": ","}},
+        # RecordDelimiter is not specified - should default to new line (\n)
+        OutputSerialization={"JSON": {}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b'{"_1":3}\n'}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_extensive_json__select_list(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="extensive.json",
+        Expression="select * from s3object[*].staff[*] s",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    assert {"Records": {"Payload": b"{},"}} in result
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_extensive_json__select_all(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="extensive.json",
+        Expression="select * from s3object s",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    records = [res for res in result if "Records" in res][0]["Records"][
+        "Payload"
+    ].decode("utf-8")
+
+    # For some reason, AWS returns records with a comma at the end
+    assert records[-1] == ","
+
+    # Because the original doc is a list, it is returned like this
+    assert json.loads(records[:-1]) == {"_1": EXTENSIVE_JSON}
+
+
+@pytest.mark.aws_verified
+@s3_aws_verified
+def test_nested_json__select_all(bucket_name=None):
+    client = boto3.client("s3", "us-east-1")
+    create_test_files(bucket_name)
+    content = client.select_object_content(
+        Bucket=bucket_name,
+        Key="nested.json",
+        Expression="select * from s3object s",
+        ExpressionType="SQL",
+        InputSerialization={"JSON": {"Type": "DOCUMENT"}},
+        OutputSerialization={"JSON": {"RecordDelimiter": ","}},
+    )
+    result = list(content["Payload"])
+    records = [res for res in result if "Records" in res][0]["Records"][
+        "Payload"
+    ].decode("utf-8")
+
+    # For some reason, AWS returns records with a comma at the end
+    assert records[-1] == ","
+
+    assert json.loads(records[:-1]) == NESTED_JSON
diff --git a/tests/test_sagemaker/test_sagemaker_model_package_groups.py b/tests/test_sagemaker/test_sagemaker_model_package_groups.py
index 49a1d99fb..147975064 100644
--- a/tests/test_sagemaker/test_sagemaker_model_package_groups.py
+++ b/tests/test_sagemaker/test_sagemaker_model_package_groups.py
@@ -1,8 +1,10 @@
 """Unit tests for sagemaker-supported APIs."""
 from unittest import SkipTest
+from datetime import datetime
 
 import boto3
 from freezegun import freeze_time
+from dateutil.tz import tzutc  # type: ignore
 
 from moto import mock_sagemaker, settings
 
@@ -163,3 +165,28 @@ def test_list_model_package_groups_sort_order():
         resp["ModelPackageGroupSummaryList"][1]["ModelPackageGroupName"]
         == "test-model-package-group-1"
     )
+
+
+@mock_sagemaker
+def test_describe_model_package_group():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't freeze time in ServerMode")
+    client = boto3.client("sagemaker", region_name="eu-west-1")
+    with freeze_time("2020-01-01 00:00:00"):
+        client.create_model_package_group(
+            ModelPackageGroupName="test-model-package-group",
+            ModelPackageGroupDescription="test-model-package-group-description",
+        )
+    resp = client.describe_model_package_group(
+        ModelPackageGroupName="test-model-package-group"
+    )
+    assert resp["ModelPackageGroupName"] == "test-model-package-group"
+    assert (
+        resp["ModelPackageGroupDescription"] == "test-model-package-group-description"
+    )
+    assert (
+        resp["ModelPackageGroupArn"]
+        == "arn:aws:sagemaker:eu-west-1:123456789012:model-package-group/test-model-package-group"
+    )
+    assert resp["ModelPackageGroupStatus"] == "Completed"
+    assert resp["CreationTime"] == datetime(2020, 1, 1, 0, 0, 0, tzinfo=tzutc())
diff --git a/tests/test_sagemaker/test_sagemaker_model_packages.py b/tests/test_sagemaker/test_sagemaker_model_packages.py
index c510c2c9c..617d5a27b 100644
--- a/tests/test_sagemaker/test_sagemaker_model_packages.py
+++ b/tests/test_sagemaker/test_sagemaker_model_packages.py
@@ -1,13 +1,20 @@
 """Unit tests for sagemaker-supported APIs."""
-from unittest import SkipTest
+from datetime import datetime
+from unittest import SkipTest, TestCase
 
 import boto3
 from freezegun import freeze_time
+from dateutil.tz import tzutc  # type: ignore
 
 from moto import mock_sagemaker, settings
 
+import pytest
+
 # See our Development Tips on writing tests for hints on how to write good tests:
 # http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html
+from moto.sagemaker.exceptions import ValidationError
+from moto.sagemaker.models import ModelPackage
+from moto.sagemaker.utils import validate_model_approval_status
 
 
 @mock_sagemaker
@@ -210,15 +217,194 @@ def test_list_model_packages_sort_order():
 
 
 @mock_sagemaker
-def test_describe_model_package():
+def test_describe_model_package_default():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't freeze time in ServerMode")
+    client = boto3.client("sagemaker", region_name="eu-west-1")
+    client.create_model_package_group(ModelPackageGroupName="test-model-package-group")
+    with freeze_time("2015-01-01 00:00:00"):
+        client.create_model_package(
+            ModelPackageName="test-model-package",
+            ModelPackageGroupName="test-model-package-group",
+            ModelPackageDescription="test-model-package-description",
+        )
+    resp = client.describe_model_package(ModelPackageName="test-model-package")
+    assert resp["ModelPackageName"] == "test-model-package"
+    assert resp["ModelPackageGroupName"] == "test-model-package-group"
+    assert resp["ModelPackageDescription"] == "test-model-package-description"
+    assert (
+        resp["ModelPackageArn"]
+        == "arn:aws:sagemaker:eu-west-1:123456789012:model-package/test-model-package/1"
+    )
+    assert resp["CreationTime"] == datetime(2015, 1, 1, 0, 0, 0, tzinfo=tzutc())
+    assert (
+        resp["CreatedBy"]["UserProfileArn"]
+        == "arn:aws:sagemaker:eu-west-1:123456789012:user-profile/fake-domain-id/fake-user-profile-name"
+    )
+    assert resp["CreatedBy"]["UserProfileName"] == "fake-user-profile-name"
+    assert resp["CreatedBy"]["DomainId"] == "fake-domain-id"
+    assert resp["ModelPackageStatus"] == "Completed"
+    assert resp.get("ModelPackageStatusDetails") is not None
+    assert resp["ModelPackageStatusDetails"]["ValidationStatuses"] == [
+        {
+            "Name": "arn:aws:sagemaker:eu-west-1:123456789012:model-package/test-model-package/1",
+            "Status": "Completed",
+        }
+    ]
+    assert resp["ModelPackageStatusDetails"]["ImageScanStatuses"] == [
+        {
+            "Name": "arn:aws:sagemaker:eu-west-1:123456789012:model-package/test-model-package/1",
+            "Status": "Completed",
+        }
+    ]
+    assert resp["CertifyForMarketplace"] is False
+
+
+@mock_sagemaker
+def test_describe_model_package_with_create_model_package_arguments():
     client = boto3.client("sagemaker", region_name="eu-west-1")
+    client.create_model_package_group(ModelPackageGroupName="test-model-package-group")
     client.create_model_package(
         ModelPackageName="test-model-package",
+        ModelPackageGroupName="test-model-package-group",
         ModelPackageDescription="test-model-package-description",
+        ModelApprovalStatus="PendingManualApproval",
+        MetadataProperties={
+            "CommitId": "test-commit-id",
+            "GeneratedBy": "test-user",
+            "ProjectId": "test-project-id",
+            "Repository": "test-repo",
+        },
+        CertifyForMarketplace=True,
     )
     resp = client.describe_model_package(ModelPackageName="test-model-package")
-    assert resp["ModelPackageName"] == "test-model-package"
-    assert resp["ModelPackageDescription"] == "test-model-package-description"
+    assert resp["ModelApprovalStatus"] == "PendingManualApproval"
+    assert resp.get("ApprovalDescription") is None
+    assert resp["CertifyForMarketplace"] is True
+    assert resp["MetadataProperties"] is not None
+    assert resp["MetadataProperties"]["CommitId"] == "test-commit-id"
+    assert resp["MetadataProperties"]["GeneratedBy"] == "test-user"
+    assert resp["MetadataProperties"]["ProjectId"] == "test-project-id"
+    assert resp["MetadataProperties"]["Repository"] == "test-repo"
+
+
+@mock_sagemaker
+def test_update_model_package():
+    client = boto3.client("sagemaker", region_name="eu-west-1")
+    client.create_model_package_group(ModelPackageGroupName="test-model-package-group")
+    model_package_arn = client.create_model_package(
+        ModelPackageName="test-model-package",
+        ModelPackageGroupName="test-model-package-group",
+        ModelPackageDescription="test-model-package-description",
+        CustomerMetadataProperties={
+            "test-key-to-remove": "test-value-to-remove",
+        },
+    )["ModelPackageArn"]
+    client.update_model_package(
+        ModelPackageArn=model_package_arn,
+        ModelApprovalStatus="Approved",
+        ApprovalDescription="test-approval-description",
+        CustomerMetadataProperties={"test-key": "test-value"},
+        CustomerMetadataPropertiesToRemove=["test-key-to-remove"],
+    )
+    resp = client.describe_model_package(ModelPackageName="test-model-package")
+    assert resp["ModelApprovalStatus"] == "Approved"
+    assert resp["ApprovalDescription"] == "test-approval-description"
+    assert resp["CustomerMetadataProperties"] is not None
+    assert resp["CustomerMetadataProperties"]["test-key"] == "test-value"
+    assert resp["CustomerMetadataProperties"].get("test-key-to-remove") is None
+
+
+@mock_sagemaker
+def test_update_model_package_given_additional_inference_specifications_to_add():
+    client = boto3.client("sagemaker", region_name="eu-west-1")
+    client.create_model_package_group(ModelPackageGroupName="test-model-package-group")
+    model_package_arn = client.create_model_package(
+        ModelPackageName="test-model-package",
+        ModelPackageGroupName="test-model-package-group",
+        ModelPackageDescription="test-model-package-description",
+    )["ModelPackageArn"]
+    additional_inference_specifications_to_add = {
+        "Name": "test-inference-specification-name",
+        "Description": "test-inference-specification-description",
+        "Containers": [
+            {
+                "ContainerHostname": "test-container-hostname",
+                "Image": "test-image",
+                "ImageDigest": "test-image-digest",
+                "ModelDataUrl": "test-model-data-url",
+                "ProductId": "test-product-id",
+                "Environment": {"test-key": "test-value"},
+                "ModelInput": {"DataInputConfig": "test-data-input-config"},
+                "Framework": "test-framework",
+                "FrameworkVersion": "test-framework-version",
+                "NearestModelName": "test-nearest-model-name",
+            },
+        ],
+        "SupportedTransformInstanceTypes": ["ml.m4.xlarge", "ml.m4.2xlarge"],
+        "SupportedRealtimeInferenceInstanceTypes": ["ml.t2.medium", "ml.t2.large"],
+        "SupportedContentTypes": [
+            "test-content-type-1",
+        ],
+        "SupportedResponseMIMETypes": [
+            "test-response-mime-type-1",
+        ],
+    }
+    client.update_model_package(
+        ModelPackageArn=model_package_arn,
+        AdditionalInferenceSpecificationsToAdd=[
+            additional_inference_specifications_to_add
+        ],
+    )
+    resp = client.describe_model_package(ModelPackageName="test-model-package")
+    assert resp["AdditionalInferenceSpecifications"] is not None
+    TestCase().assertDictEqual(
+        resp["AdditionalInferenceSpecifications"][0],
+        additional_inference_specifications_to_add,
+    )
+
+
+@mock_sagemaker
+def test_update_model_package_shoudl_update_last_modified_information():
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't freeze time in ServerMode")
+    client = boto3.client("sagemaker", region_name="eu-west-1")
+    client.create_model_package_group(ModelPackageGroupName="test-model-package-group")
+    model_package_arn = client.create_model_package(
+        ModelPackageName="test-model-package",
+        ModelPackageGroupName="test-model-package-group",
+    )["ModelPackageArn"]
+    with freeze_time("2020-01-01 12:00:00"):
+        client.update_model_package(
+            ModelPackageArn=model_package_arn,
+            ModelApprovalStatus="Approved",
+        )
+    resp = client.describe_model_package(ModelPackageName="test-model-package")
+    assert resp.get("LastModifiedTime") is not None
+    assert resp["LastModifiedTime"] == datetime(2020, 1, 1, 12, 0, 0, tzinfo=tzutc())
+    assert resp.get("LastModifiedBy") is not None
+    assert (
+        resp["LastModifiedBy"]["UserProfileArn"]
+        == "arn:aws:sagemaker:eu-west-1:123456789012:user-profile/fake-domain-id/fake-user-profile-name"
+    )
+    assert resp["LastModifiedBy"]["UserProfileName"] == "fake-user-profile-name"
+    assert resp["LastModifiedBy"]["DomainId"] == "fake-domain-id"
+
+
+def test_validate_supported_transform_instance_types_should_raise_error_for_wrong_supported_transform_instance_types():
+    with pytest.raises(ValidationError) as exc:
+        ModelPackage.validate_supported_transform_instance_types(
+            ["ml.m4.2xlarge", "not-a-supported-transform-instances-types"]
+        )
+    assert "not-a-supported-transform-instances-types" in str(exc.value)
+
+
+def test_validate_supported_realtime_inference_instance_types_should_raise_error_for_wrong_supported_transform_instance_types():
+    with pytest.raises(ValidationError) as exc:
+        ModelPackage.validate_supported_realtime_inference_instance_types(
+            ["ml.m4.2xlarge", "not-a-supported-realtime-inference-instances-types"]
+        )
+    assert "not-a-supported-realtime-inference-instances-types" in str(exc.value)
 
 
 @mock_sagemaker
@@ -234,6 +420,27 @@ def test_create_model_package():
     )
 
 
+@pytest.mark.parametrize(
+    "model_approval_status",
+    ["Approved", "Rejected", "PendingManualApproval"],
+)
+def test_utils_validate_model_approval_status_should_not_raise_error_if_model_approval_status_is_correct(
+    model_approval_status: str,
+):
+    validate_model_approval_status(model_approval_status)
+
+
+def test_utils_validate_model_approval_status_should_raise_error_if_model_approval_status_is_incorrect():
+    model_approval_status = "IncorrectStatus"
+    with pytest.raises(ValidationError) as exc:
+        validate_model_approval_status(model_approval_status)
+    assert exc.value.code == 400
+    assert (
+        exc.value.message
+        == "Value 'IncorrectStatus' at 'modelApprovalStatus' failed to satisfy constraint: Member must satisfy enum value set: [PendingManualApproval, Approved, Rejected]"
+    )
+
+
 @mock_sagemaker
 def test_create_model_package_in_model_package_group():
     client = boto3.client("sagemaker", region_name="eu-west-1")
diff --git a/tests/test_ses/test_ses_boto3.py b/tests/test_ses/test_ses_boto3.py
index eda9cb1b0..c06408c17 100644
--- a/tests/test_ses/test_ses_boto3.py
+++ b/tests/test_ses/test_ses_boto3.py
@@ -1297,6 +1297,7 @@ def test_render_template():
     )
 
 
+@pytest.mark.aws_verified
 @ses_aws_verified
 def test_render_template__advanced():
     conn = boto3.client("ses", region_name="us-east-1")