Repository: getmoto/moto
Pull request #7158 (2023-12-24 12:06:21)

chore: update SSM Instance parameters
Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/getmoto/moto/pull/7158?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Comparison is base [(`b6530f8`)](https://app.codecov.io/gh/getmoto/moto/commit/b6530f8367960b76d059109596b82b50054914b0?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) 95.89% compared to head [(`95ac3b0`)](https://app.codecov.io/gh/getmoto/moto/pull/7158?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) 95.89%.


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


```diff
@@           Coverage Diff           @@
##           master    #7158   +/-   ##
=======================================
  Coverage   95.89%   95.89%           
=======================================
  Files         834      834           
  Lines       82265    82265           
=======================================
  Hits        78892    78892           
  Misses       3373     3373           
```

| [Flag](https://app.codecov.io/gh/getmoto/moto/pull/7158/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/7158/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `35.46% <ø> (ø)` | |
| [unittests](https://app.codecov.io/gh/getmoto/moto/pull/7158/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=getmoto) | `95.84% <ø> (ø)` | |

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


</details>

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


Patch:
diff --git a/IMPLEMENTATION_COVERAGE.md b/IMPLEMENTATION_COVERAGE.md
index bd76a8b7c..0368ce97a 100644
--- a/IMPLEMENTATION_COVERAGE.md
+++ b/IMPLEMENTATION_COVERAGE.md
@@ -5173,6 +5173,46 @@
 - [X] update_policy
 </details>
 
+## panorama
+<details>
+<summary>14% implemented</summary>
+
+- [ ] create_application_instance
+- [ ] create_job_for_devices
+- [ ] create_node_from_template_job
+- [ ] create_package
+- [ ] create_package_import_job
+- [X] delete_device
+- [ ] delete_package
+- [ ] deregister_package_version
+- [ ] describe_application_instance
+- [ ] describe_application_instance_details
+- [X] describe_device
+- [ ] describe_device_job
+- [ ] describe_node
+- [ ] describe_node_from_template_job
+- [ ] describe_package
+- [ ] describe_package_import_job
+- [ ] describe_package_version
+- [ ] list_application_instance_dependencies
+- [ ] list_application_instance_node_instances
+- [ ] list_application_instances
+- [X] list_devices
+- [ ] list_devices_jobs
+- [ ] list_node_from_template_jobs
+- [ ] list_nodes
+- [ ] list_package_import_jobs
+- [ ] list_packages
+- [ ] list_tags_for_resource
+- [X] provision_device
+- [ ] register_package_version
+- [ ] remove_application_instance
+- [ ] signal_application_instance_node_instances
+- [ ] tag_resource
+- [ ] untag_resource
+- [X] update_device_metadata
+</details>
+
 ## personalize
 <details>
 <summary>5% implemented</summary>
diff --git a/docs/docs/services/ec2.rst b/docs/docs/services/ec2.rst
index 866de236c..a040868ea 100644
--- a/docs/docs/services/ec2.rst
+++ b/docs/docs/services/ec2.rst
@@ -600,9 +600,9 @@ ec2
 - [X] modify_vpc_endpoint
 - [ ] modify_vpc_endpoint_connection_notification
 - [X] modify_vpc_endpoint_service_configuration
-  
+
         The following parameters are not yet implemented: RemovePrivateDnsName
-        
+
 
 - [ ] modify_vpc_endpoint_service_payer_responsibility
 - [X] modify_vpc_endpoint_service_permissions
@@ -662,7 +662,7 @@ ec2
 - [X] revoke_security_group_egress
 - [X] revoke_security_group_ingress
 - [X] run_instances
-  
+
         The Placement-parameter is validated to verify the availability-zone exists for the current region.
 
         The InstanceType-parameter can be validated, to see if it is a known instance-type.
@@ -673,15 +673,15 @@ ec2
 
         The KeyPair-parameter can be validated, to see if it is a known key-pair.
         Enable this validation by setting the environment variable `MOTO_ENABLE_KEYPAIR_VALIDATION=true`
-        
+
 
 - [ ] run_scheduled_instances
 - [ ] search_local_gateway_routes
 - [ ] search_transit_gateway_multicast_groups
 - [X] search_transit_gateway_routes
-  
+
         The following filters are currently supported: type, state, route-search.exact-match
-        
+
 
 - [ ] send_diagnostic_interrupt
 - [X] start_instances
@@ -699,4 +699,3 @@ ec2
 - [X] update_security_group_rule_descriptions_egress
 - [X] update_security_group_rule_descriptions_ingress
 - [ ] withdraw_byoip_cidr
-
diff --git a/docs/docs/services/panorama.rst b/docs/docs/services/panorama.rst
new file mode 100644
index 000000000..f2a7f25ee
--- /dev/null
+++ b/docs/docs/services/panorama.rst
@@ -0,0 +1,62 @@
+.. _implementedservice_panorama:
+
+.. |start-h3| raw:: html
+
+    <h3>
+
+.. |end-h3| raw:: html
+
+    </h3>
+
+========
+panorama
+========
+
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+            @mock_panorama
+            def test_panorama_behaviour:
+                boto3.client("panorama")
+                ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
+- [ ] create_application_instance
+- [ ] create_job_for_devices
+- [ ] create_node_from_template_job
+- [ ] create_package
+- [ ] create_package_import_job
+- [X] delete_device
+- [ ] delete_package
+- [ ] deregister_package_version
+- [ ] describe_application_instance
+- [ ] describe_application_instance_details
+- [X] describe_device
+- [ ] describe_device_job
+- [ ] describe_node
+- [ ] describe_node_from_template_job
+- [ ] describe_package
+- [ ] describe_package_import_job
+- [ ] describe_package_version
+- [ ] list_application_instance_dependencies
+- [ ] list_application_instance_node_instances
+- [ ] list_application_instances
+- [X] list_devices
+- [ ] list_devices_jobs
+- [ ] list_node_from_template_jobs
+- [ ] list_nodes
+- [ ] list_package_import_jobs
+- [ ] list_packages
+- [ ] list_tags_for_resource
+- [X] provision_device
+- [ ] register_package_version
+- [ ] remove_application_instance
+- [ ] signal_application_instance_node_instances
+- [ ] tag_resource
+- [ ] untag_resource
+- [X] update_device_metadata
+
diff --git a/docs/docs/services/textract.rst b/docs/docs/services/textract.rst
index 28f84aafb..ea4dde02c 100644
--- a/docs/docs/services/textract.rst
+++ b/docs/docs/services/textract.rst
@@ -39,9 +39,9 @@ textract
 - [ ] get_adapter_version
 - [ ] get_document_analysis
 - [X] get_document_text_detection
-  
+
         Pagination has not yet been implemented
-        
+
 
 - [ ] get_expense_analysis
 - [ ] get_lending_analysis
@@ -51,13 +51,12 @@ textract
 - [ ] list_tags_for_resource
 - [ ] start_document_analysis
 - [X] start_document_text_detection
-  
+
         The following parameters have not yet been implemented: ClientRequestToken, JobTag, NotificationChannel, OutputConfig, KmsKeyID
-        
+
 
 - [ ] start_expense_analysis
 - [ ] start_lending_analysis
 - [ ] tag_resource
 - [ ] untag_resource
 - [ ] update_adapter
-
diff --git a/moto/__init__.py b/moto/__init__.py
index 5da436966..d08b22c0c 100644
--- a/moto/__init__.py
+++ b/moto/__init__.py
@@ -178,6 +178,7 @@ mock_neptune = lazy_load(".rds", "mock_rds", boto3_name="neptune")
 mock_opensearch = lazy_load(".opensearch", "mock_opensearch")
 mock_opsworks = lazy_load(".opsworks", "mock_opsworks")
 mock_organizations = lazy_load(".organizations", "mock_organizations")
+mock_panorama = lazy_load(".panorama", "mock_panorama")
 mock_personalize = lazy_load(".personalize", "mock_personalize")
 mock_pinpoint = lazy_load(".pinpoint", "mock_pinpoint")
 mock_polly = lazy_load(".polly", "mock_polly")
diff --git a/moto/backend_index.py b/moto/backend_index.py
index f61af9acf..300784891 100644
--- a/moto/backend_index.py
+++ b/moto/backend_index.py
@@ -122,6 +122,7 @@ backend_url_patterns = [
     ("mq", re.compile("https?://mq\\.(.+)\\.amazonaws\\.com")),
     ("opsworks", re.compile("https?://opsworks\\.us-east-1\\.amazonaws.com")),
     ("organizations", re.compile("https?://organizations\\.(.+)\\.amazonaws\\.com")),
+    ("panorama", re.compile("https?://panorama\\.(.+)\\.amazonaws.com")),
     ("personalize", re.compile("https?://personalize\\.(.+)\\.amazonaws\\.com")),
     ("pinpoint", re.compile("https?://pinpoint\\.(.+)\\.amazonaws\\.com")),
     ("polly", re.compile("https?://polly\\.(.+)\\.amazonaws.com")),
diff --git a/moto/panorama/__init__.py b/moto/panorama/__init__.py
new file mode 100644
index 000000000..53d80c28b
--- /dev/null
+++ b/moto/panorama/__init__.py
@@ -0,0 +1,4 @@
+from ..core.models import base_decorator
+from .models import panorama_backends
+
+mock_panorama = base_decorator(panorama_backends)
diff --git a/moto/panorama/exceptions.py b/moto/panorama/exceptions.py
new file mode 100644
index 000000000..1f61bae33
--- /dev/null
+++ b/moto/panorama/exceptions.py
@@ -0,0 +1,6 @@
+from moto.core.exceptions import JsonRESTError
+
+
+class ValidationError(JsonRESTError):
+    def __init__(self, message: str):
+        super().__init__("ValidationException", message)
diff --git a/moto/panorama/models.py b/moto/panorama/models.py
new file mode 100644
index 000000000..db81af483
--- /dev/null
+++ b/moto/panorama/models.py
@@ -0,0 +1,306 @@
+import base64
+import json
+from datetime import datetime, timedelta
+from typing import Any, Dict, List, Optional, Union
+
+from dateutil.tz import tzutc
+
+from moto.core import BackendDict, BaseBackend, BaseModel
+from moto.moto_api._internal.managed_state_model import ManagedState
+from moto.panorama.utils import deep_convert_datetime_to_isoformat, hash_device_name
+from moto.utilities.paginator import paginate
+
+from .exceptions import (
+    ValidationError,
+)
+
+PAGINATION_MODEL = {
+    "list_devices": {
+        "input_token": "next_token",
+        "limit_key": "max_results",
+        "limit_default": 123,
+        "unique_attribute": "device_id",
+    },
+}
+
+
+class BaseObject(BaseModel):
+    def camelCase(self, key: str) -> str:
+        words = []
+        for word in key.split("_"):
+            words.append(word.title())
+        return "".join(words)
+
+    def update(self, details_json: str) -> None:
+        details = json.loads(details_json)
+        for k in details.keys():
+            setattr(self, k, details[k])
+
+    def gen_response_object(self) -> Dict[str, Any]:
+        response_object: Dict[str, Any] = dict()
+        for key, value in self.__dict__.items():
+            if "_" in key:
+                response_object[self.camelCase(key)] = value
+            else:
+                response_object[key[0].upper() + key[1:]] = value
+        return response_object
+
+    def response_object(self) -> Dict[str, Any]:  # type: ignore[misc]
+        return self.gen_response_object()
+
+
+class Device(BaseObject):
+    def __init__(
+        self,
+        account_id: str,
+        region_name: str,
+        description: Optional[str],
+        name: str,
+        network_configuration: Optional[Dict[str, Any]],
+        tags: Optional[Dict[str, str]],
+    ) -> None:
+        # ManagedState is a class that helps us manage the state of a resource.
+        # A Panorama Device has a lot of different states that has their own lifecycle.
+        # To make all this states in the same object, and avoid changing ManagedState,
+        # we use a ManagedState for each state and we manage them in the Device class.
+        # Each ManagedState has a name composed with attribute name and device name to make subscription easier.
+        self.__device_aggregated_status_manager = ManagedState(
+            model_name=f"panorama::device_{name}_aggregated_status",
+            transitions=[
+                ("NOT-A-STATUS", "AWAITING_PROVISIONING"),
+                ("AWAITING_PROVISIONING", "PENDING"),
+                ("PENDING", "ONLINE"),
+            ],
+        )
+        self.__device_provisioning_status_manager = ManagedState(
+            model_name=f"panorama::device_{name}_provisioning_status",
+            transitions=[
+                ("NOT-A-STATUS", "AWAITING_PROVISIONING"),
+                ("AWAITING_PROVISIONING", "PENDING"),
+                ("PENDING", "SUCCEEDED"),
+            ],
+        )
+        self.account_id = account_id
+        self.region_name = region_name
+        self.description = description
+        self.name = name
+        self.network_configuration = network_configuration
+        self.tags = tags
+
+        self.certificates = base64.b64encode("certificate".encode("utf-8")).decode(
+            "utf-8"
+        )
+        self.arn = (
+            f"arn:aws:panorama:{self.region_name}:{self.account_id}:device/{self.name}"
+        )
+        self.device_id = f"device-{hash_device_name(name)}"
+        self.iot_thing_name = ""
+
+        self.alternate_softwares = [
+            {"Version": "0.2.1"},
+        ]
+        self.brand: str = "AWS_PANORAMA"  # AWS_PANORAMA | LENOVO
+        self.created_time = datetime.now(tzutc())
+        self.last_updated_time = datetime.now(tzutc())
+        self.current_networking_status = {
+            "Ethernet0Status": {
+                "ConnectionStatus": "CONNECTED",
+                "HwAddress": "8C:0F:5F:60:F5:C4",
+                "IpAddress": "192.168.1.300/24",
+            },
+            "Ethernet1Status": {
+                "ConnectionStatus": "NOT_CONNECTED",
+                "HwAddress": "8C:0F:6F:60:F4:F1",
+                "IpAddress": "--",
+            },
+            "LastUpdatedTime": datetime.now(tzutc()),
+            "NtpStatus": {
+                "ConnectionStatus": "CONNECTED",
+                "IpAddress": "91.224.149.41:123",
+                "NtpServerName": "0.pool.ntp.org",
+            },
+        }
+        self.current_software = "6.2.1"
+        self.device_connection_status: str = "ONLINE"  # "ONLINE"|"OFFLINE"|"AWAITING_CREDENTIALS"|"NOT_AVAILABLE"|"ERROR"
+        self.latest_device_job = {"JobType": "REBOOT", "Status": "COMPLETED"}
+        self.latest_software = "6.2.1"
+        self.lease_expiration_time = datetime.now(tzutc()) + timedelta(days=5)
+        self.serial_number = "GAD81E29013274749"
+        self.type: str = "PANORAMA_APPLIANCE"  # "PANORAMA_APPLIANCE_DEVELOPER_KIT", "PANORAMA_APPLIANCE"
+
+    @property
+    def device_aggregated_status(self) -> str:
+        self.__device_aggregated_status_manager.advance()
+        return self.__device_aggregated_status_manager.status  # type: ignore[return-value]
+
+    @property
+    def provisioning_status(self) -> str:
+        self.__device_provisioning_status_manager.advance()
+        return self.__device_provisioning_status_manager.status  # type: ignore[return-value]
+
+    def response_object(self) -> Dict[str, Any]:
+        response_object = super().gen_response_object()
+        response_object = deep_convert_datetime_to_isoformat(response_object)
+        static_response_fields = [
+            "AlternateSoftwares",
+            "Arn",
+            "Brand",
+            "CreatedTime",
+            "CurrentNetworkingStatus",
+            "CurrentSoftware",
+            "Description",
+            "DeviceConnectionStatus",
+            "DeviceId",
+            "LatestAlternateSoftware",
+            "LatestDeviceJob",
+            "LatestSoftware",
+            "LeaseExpirationTime",
+            "Name",
+            "NetworkConfiguration",
+            "SerialNumber",
+            "Tags",
+            "Type",
+        ]
+        return {
+            **{
+                k: v
+                for k, v in response_object.items()
+                if v is not None and k in static_response_fields
+            },
+            **{
+                "DeviceAggregatedStatus": self.device_aggregated_status,
+                "ProvisioningStatus": self.provisioning_status,
+            },
+        }
+
+    def response_listed(self) -> Dict[str, Any]:
+        response_object = super().gen_response_object()
+        response_object = deep_convert_datetime_to_isoformat(response_object)
+        static_response_fields = [
+            "Brand",
+            "CreatedTime",
+            "CurrentSoftware",
+            "Description",
+            "DeviceId",
+            "LastUpdatedTime",
+            "LatestDeviceJob",
+            "LeaseExpirationTime",
+            "Name",
+            "Tags",
+            "Type",
+        ]
+        return {
+            **{
+                k: v
+                for k, v in response_object.items()
+                if v is not None and k in static_response_fields
+            },
+            **{
+                "DeviceAggregatedStatus": self.device_aggregated_status,
+                "ProvisioningStatus": self.provisioning_status,
+            },
+        }
+
+    @property
+    def response_provision(self) -> Dict[str, Union[str, bytes]]:
+        return {
+            "Arn": self.arn,
+            "Certificates": self.certificates,
+            "DeviceId": self.device_id,
+            "IotThingName": self.iot_thing_name,
+            "Status": self.provisioning_status,
+        }
+
+    @property
+    def response_updated(self) -> Dict[str, str]:
+        return {"DeviceId": self.device_id}
+
+    @property
+    def response_deleted(self) -> Dict[str, str]:
+        return {"DeviceId": self.device_id}
+
+
+class PanoramaBackend(BaseBackend):
+    def __init__(self, region_name: str, account_id: str):
+        super().__init__(region_name, account_id)
+        self.devices_memory: Dict[str, Device] = {}
+
+    def provision_device(
+        self,
+        description: Optional[str],
+        name: str,
+        networking_configuration: Optional[Dict[str, Any]],
+        tags: Optional[Dict[str, str]],
+    ) -> Device:
+        device_obj = Device(
+            account_id=self.account_id,
+            region_name=self.region_name,
+            description=description,
+            name=name,
+            network_configuration=networking_configuration,
+            tags=tags,
+        )
+
+        self.devices_memory[device_obj.device_id] = device_obj
+        return device_obj
+
+    def describe_device(self, device_id: str) -> Device:
+        device = self.devices_memory.get(device_id)
+        if device is None:
+            raise ValidationError(f"Device {device_id} not found")
+        return device
+
+    @paginate(pagination_model=PAGINATION_MODEL)  # type: ignore[misc]
+    def list_devices(
+        self,
+        device_aggregated_status_filter: str,
+        name_filter: str,
+        sort_by: str,  # "DEVICE_ID", "CREATED_TIME", "NAME", "DEVICE_AGGREGATED_STATUS"
+        sort_order: str,  # "ASCENDING", "DESCENDING"
+    ) -> List[Device]:
+        devices_list = list(
+            filter(
+                lambda x: (name_filter is None or x.name.startswith(name_filter))
+                and (
+                    device_aggregated_status_filter is None
+                    or x.device_aggregated_status == device_aggregated_status_filter
+                ),
+                self.devices_memory.values(),
+            )
+        )
+        devices_list = list(
+            sorted(
+                devices_list,
+                key={
+                    "DEVICE_ID": lambda x: x.device_id,
+                    "CREATED_TIME": lambda x: x.created_time,
+                    "NAME": lambda x: x.name,
+                    "DEVICE_AGGREGATED_STATUS": lambda x: x.device_aggregated_status,
+                    None: lambda x: x.created_time,
+                }[sort_by],
+                reverse=sort_order == "DESCENDING",
+            )
+        )
+        return devices_list
+
+    def update_device_metadata(self, device_id: str, description: str) -> Device:
+        self.devices_memory[device_id].description = description
+        return self.devices_memory[device_id]
+
+    def delete_device(self, device_id: str) -> Device:
+        return self.devices_memory.pop(device_id)
+
+
+panorama_backends = BackendDict(
+    PanoramaBackend,
+    "panorama",
+    False,
+    additional_regions=[
+        "us-east-1",
+        "us-west-2",
+        "ca-central-1",
+        "eu-west-1",
+        "ap-southeast-2",
+        "ap-southeast-1",
+    ],
+)
diff --git a/moto/panorama/responses.py b/moto/panorama/responses.py
new file mode 100644
index 000000000..3e8b98f59
--- /dev/null
+++ b/moto/panorama/responses.py
@@ -0,0 +1,72 @@
+import json
+import urllib
+
+from moto.core.responses import BaseResponse
+
+from .models import PanoramaBackend, panorama_backends
+
+
+class PanoramaResponse(BaseResponse):
+    def __init__(self) -> None:
+        super().__init__(service_name="panorama")
+
+    @property
+    def panorama_backend(self) -> PanoramaBackend:
+        return panorama_backends[self.current_account][self.region]
+
+    def provision_device(self) -> str:
+        description = self._get_param("Description")
+        name = self._get_param("Name")
+        networking_configuration = self._get_param("NetworkingConfiguration")
+        tags = self._get_param("Tags")
+        device = self.panorama_backend.provision_device(
+            description=description,
+            name=name,
+            networking_configuration=networking_configuration,
+            tags=tags,
+        )
+        return json.dumps(device.response_provision)
+
+    def describe_device(self) -> str:
+        device_id = urllib.parse.unquote(self._get_param("DeviceId"))
+        device = self.panorama_backend.describe_device(device_id=device_id)
+        return json.dumps(device.response_object())
+
+    def list_devices(
+        self,
+    ) -> str:
+        device_aggregated_status_filter = self._get_param(
+            "DeviceAggregatedStatusFilter"
+        )
+        max_results = self._get_int_param("MaxResults")
+        name_filter = self._get_param("NameFilter")
+        next_token = self._get_param("NextToken")
+        sort_by = self._get_param("SortBy")
+        sort_order = self._get_param("SortOrder")
+        list_devices, next_token = self.panorama_backend.list_devices(
+            device_aggregated_status_filter=device_aggregated_status_filter,
+            max_results=max_results,
+            name_filter=name_filter,
+            next_token=next_token,
+            sort_by=sort_by,
+            sort_order=sort_order,
+        )
+        return json.dumps(
+            {
+                "Devices": [device.response_listed() for device in list_devices],
+                "NextToken": next_token,
+            }
+        )
+
+    def update_device_metadata(self) -> str:
+        device_id = urllib.parse.unquote(self._get_param("DeviceId"))
+        description = self._get_param("Description")
+        device = self.panorama_backend.update_device_metadata(
+            device_id=device_id, description=description
+        )
+        return json.dumps(device.response_updated)
+
+    def delete_device(self) -> str:
+        device_id = urllib.parse.unquote(self._get_param("DeviceId"))
+        device = self.panorama_backend.delete_device(device_id=device_id)
+        return json.dumps(device.response_deleted)
diff --git a/moto/panorama/urls.py b/moto/panorama/urls.py
new file mode 100644
index 000000000..13f54d0ff
--- /dev/null
+++ b/moto/panorama/urls.py
@@ -0,0 +1,11 @@
+from .responses import PanoramaResponse
+
+url_bases = [
+    r"https?://panorama\.(.+)\.amazonaws.com",
+]
+
+url_paths = {
+    "{0}/$": PanoramaResponse.dispatch,
+    "{0}/devices$": PanoramaResponse.dispatch,
+    "{0}/devices/(?P<DeviceId>[^/]+)$": PanoramaResponse.dispatch,
+}
diff --git a/moto/panorama/utils.py b/moto/panorama/utils.py
new file mode 100644
index 000000000..ad52c39df
--- /dev/null
+++ b/moto/panorama/utils.py
@@ -0,0 +1,21 @@
+import base64
+import hashlib
+from datetime import datetime
+from typing import Any
+
+
+def deep_convert_datetime_to_isoformat(obj: Any) -> Any:
+    if isinstance(obj, datetime):
+        return obj.isoformat()
+    elif isinstance(obj, list):
+        return [deep_convert_datetime_to_isoformat(x) for x in obj]
+    elif isinstance(obj, dict):
+        return {k: deep_convert_datetime_to_isoformat(v) for k, v in obj.items()}
+    else:
+        return obj
+
+
+def hash_device_name(name: str) -> str:
+    digest = hashlib.md5(name.encode("utf-8")).digest()
+    token = base64.b64encode(digest)
+    return token.decode("utf-8")
diff --git a/moto/ssm/resources/regions.json b/moto/ssm/resources/regions.json
index 20aa09fb0..1835f2261 100644
--- a/moto/ssm/resources/regions.json
+++ b/moto/ssm/resources/regions.json
@@ -593,6 +593,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.af-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -830,6 +833,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.af-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -2166,6 +2172,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -2412,6 +2421,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -3633,6 +3645,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-northeast-1.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -4129,6 +4147,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-northeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elastic-inference": {
@@ -4480,6 +4501,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -5046,6 +5070,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "Value": "neptune-graph",
+                "endpoint": {
+                  "Value": "neptune-graph.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
@@ -6279,6 +6312,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-northeast-2.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -6703,6 +6742,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-northeast-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elastic-inference": {
@@ -7021,6 +7063,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -8178,6 +8223,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
                 "endpoint": {
@@ -8773,6 +8827,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-northeast-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -8992,6 +9049,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-northeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -10498,6 +10558,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -10795,6 +10858,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -11946,6 +12012,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
                 "endpoint": {
@@ -12470,6 +12545,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-south-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -12739,6 +12817,15 @@
               "marketplace": {
                 "Value": "marketplace"
               },
+              "mediaconnect": {
+                "Value": "mediaconnect",
+                "endpoint": {
+                  "Value": "mediaconnect.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "meteringmarketplace": {
                 "Value": "meteringmarketplace",
                 "endpoint": {
@@ -12889,6 +12976,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "rolesanywhere": {
+                "Value": "rolesanywhere",
+                "endpoint": {
+                  "Value": "rolesanywhere.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "rosa": {
                 "Value": "rosa"
               },
@@ -13561,6 +13657,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-southeast-1.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -14048,6 +14150,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -14408,6 +14513,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -14872,6 +14980,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "Value": "neptune-graph",
+                "endpoint": {
+                  "Value": "neptune-graph.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
@@ -16126,6 +16243,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-southeast-2.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -16649,6 +16772,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -17009,6 +17135,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -18936,6 +19065,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -19152,6 +19284,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ap-southeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -19763,6 +19898,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.ap-southeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
                 "endpoint": {
@@ -20212,6 +20356,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-4.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -20361,6 +20508,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "identitystore": {
+                "Value": "identitystore",
+                "endpoint": {
+                  "Value": "identitystore.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "imagebuilder": {
                 "Value": "imagebuilder",
                 "endpoint": {
@@ -20472,6 +20628,15 @@
               "marketplace": {
                 "Value": "marketplace"
               },
+              "mediaconnect": {
+                "Value": "mediaconnect",
+                "endpoint": {
+                  "Value": "mediaconnect.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "mediaconvert": {
                 "Value": "mediaconvert",
                 "endpoint": {
@@ -20481,6 +20646,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "medialive": {
+                "Value": "medialive",
+                "endpoint": {
+                  "Value": "medialive.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "mediatailor": {
                 "Value": "mediatailor",
                 "endpoint": {
@@ -20631,6 +20805,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "rolesanywhere": {
+                "Value": "rolesanywhere",
+                "endpoint": {
+                  "Value": "rolesanywhere.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "rosa": {
                 "Value": "rosa"
               },
@@ -21701,6 +21884,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.ca-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -21989,6 +22175,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -22828,406 +23017,1156 @@
               "schemas": {
                 "Value": "schemas",
                 "endpoint": {
-                  "Value": "schemas.ca-central-1.amazonaws.com"
+                  "Value": "schemas.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "secretsmanager": {
+                "Value": "secretsmanager",
+                "endpoint": {
+                  "Value": "secretsmanager.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "securityhub": {
+                "Value": "securityhub",
+                "endpoint": {
+                  "Value": "securityhub.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "securitylake": {
+                "Value": "securitylake",
+                "endpoint": {
+                  "Value": "securitylake.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "serverlessrepo": {
+                "Value": "serverlessrepo",
+                "endpoint": {
+                  "Value": "serverlessrepo.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "service-quotas": {
+                "Value": "service-quotas",
+                "endpoint": {
+                  "Value": "servicequotas.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "servicecatalog": {
+                "Value": "servicecatalog",
+                "endpoint": {
+                  "Value": "servicecatalog.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "servicecatalog-appregistry": {
+                "Value": "servicecatalog-appregistry",
+                "endpoint": {
+                  "Value": "servicecatalog-appregistry.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "servicediscovery": {
+                "Value": "servicediscovery",
+                "endpoint": {
+                  "Value": "servicediscovery.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ses": {
+                "Value": "ses",
+                "endpoint": {
+                  "Value": "email.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "shield": {
+                "Value": "shield",
+                "endpoint": {
+                  "Value": "shield.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "signer": {
+                "Value": "signer",
+                "endpoint": {
+                  "Value": "signer.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "snow-device-management": {
+                "Value": "snow-device-management",
+                "endpoint": {
+                  "Value": "snow-device-management.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "snowball": {
+                "Value": "snowball",
+                "endpoint": {
+                  "Value": "snowball.ca-central-1.amazonaws.com"
+                }
+              },
+              "snowcone": {
+                "Value": "snowcone"
+              },
+              "sns": {
+                "Value": "sns",
+                "endpoint": {
+                  "Value": "sns.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "sqs": {
+                "Value": "sqs",
+                "endpoint": {
+                  "Value": "sqs.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "ssm": {
+                "Value": "ssm",
+                "endpoint": {
+                  "Value": "ssm.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ssm-contacts": {
+                "Value": "ssm-contacts",
+                "endpoint": {
+                  "Value": "ssm-contacts.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ssm-incidents": {
+                "Value": "ssm-incidents",
+                "endpoint": {
+                  "Value": "ssm-incidents.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ssm-sap": {
+                "Value": "ssm-sap",
+                "endpoint": {
+                  "Value": "ssm-sap.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "sso-oidc": {
+                "Value": "sso-oidc",
+                "endpoint": {
+                  "Value": "oidc.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "stepfunctions": {
+                "Value": "stepfunctions",
+                "endpoint": {
+                  "Value": "states.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "storagegateway": {
+                "Value": "storagegateway",
+                "endpoint": {
+                  "Value": "storagegateway.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "sts": {
+                "Value": "sts",
+                "endpoint": {
+                  "Value": "sts.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "support": {
+                "Value": "support",
+                "endpoint": {
+                  "Value": "support.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "swf": {
+                "Value": "swf",
+                "endpoint": {
+                  "Value": "swf.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "synthetics": {
+                "Value": "synthetics",
+                "endpoint": {
+                  "Value": "synthetics.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "textract": {
+                "Value": "textract",
+                "endpoint": {
+                  "Value": "textract.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "thinclient": {
+                "Value": "thinclient"
+              },
+              "tnb": {
+                "Value": "tnb",
+                "endpoint": {
+                  "Value": "tnb.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "transcribe": {
+                "Value": "transcribe",
+                "endpoint": {
+                  "Value": "transcribe.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "transfer": {
+                "Value": "transfer",
+                "endpoint": {
+                  "Value": "transfer.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "transitgateway": {
+                "Value": "transitgateway",
+                "endpoint": {
+                  "Value": "ec2.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "translate": {
+                "Value": "translate",
+                "endpoint": {
+                  "Value": "translate.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "trustedadvisor": {
+                "Value": "trustedadvisor"
+              },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "verifiedpermissions": {
+                "Value": "verifiedpermissions",
+                "endpoint": {
+                  "Value": "verifiedpermissions.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "vmwarecloudonaws": {
+                "Value": "vmwarecloudonaws"
+              },
+              "voice-id": {
+                "Value": "voice-id",
+                "endpoint": {
+                  "Value": "voiceid.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "vpc": {
+                "Value": "vpc"
+              },
+              "vpc-lattice": {
+                "Value": "vpc-lattice",
+                "endpoint": {
+                  "Value": "vpc-lattice.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "vpn": {
+                "Value": "vpn",
+                "endpoint": {
+                  "Value": "ec2.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "waf": {
+                "Value": "waf",
+                "endpoint": {
+                  "Value": "wafv2.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "waf-regional": {
+                "Value": "waf-regional",
+                "endpoint": {
+                  "Value": "waf-regional.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "wellarchitectedtool": {
+                "Value": "wellarchitectedtool",
+                "endpoint": {
+                  "Value": "wellarchitected.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "wickr": {
+                "Value": "wickr",
+                "endpoint": {
+                  "Value": "api.messaging.wickr.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "workspaces": {
+                "Value": "workspaces",
+                "endpoint": {
+                  "Value": "workspaces.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "workspaces-web": {
+                "Value": "workspaces-web",
+                "endpoint": {
+                  "Value": "workspaces-web.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "xray": {
+                "Value": "xray",
+                "endpoint": {
+                  "Value": "xray.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              }
+            },
+            "wavelength-zones": {
+              "cac1-wl1-yto-wlz1": {
+                "Value": "cac1-wl1-yto-wlz1"
+              }
+            }
+          },
+          "ca-west-1": {
+            "Value": "ca-west-1",
+            "availability-zones": {
+              "caw1-az1": {
+                "Value": "caw1-az1"
+              },
+              "caw1-az2": {
+                "Value": "caw1-az2"
+              },
+              "caw1-az3": {
+                "Value": "caw1-az3"
+              }
+            },
+            "domain": {
+              "Value": "amazonaws.com"
+            },
+            "geolocationCountry": {
+              "Value": "CA"
+            },
+            "geolocationRegion": {
+              "Value": "CA-AB"
+            },
+            "longName": {
+              "Value": "Canada West (Calgary)"
+            },
+            "partition": {
+              "Value": "aws"
+            },
+            "services": {
+              "accessanalyzer": {
+                "Value": "accessanalyzer",
+                "endpoint": {
+                  "Value": "access-analyzer.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "acm": {
+                "Value": "acm",
+                "endpoint": {
+                  "Value": "acm.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "apigateway": {
+                "Value": "apigateway",
+                "endpoint": {
+                  "Value": "apigateway.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "appconfig": {
+                "Value": "appconfig",
+                "endpoint": {
+                  "Value": "appconfig.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "appconfigdata": {
+                "Value": "appconfigdata",
+                "endpoint": {
+                  "Value": "appconfigdata.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "arc-zonal-shift": {
+                "Value": "arc-zonal-shift",
+                "endpoint": {
+                  "Value": "arc-zonal-shift.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "artifact": {
+                "Value": "artifact"
+              },
+              "aurora": {
+                "Value": "aurora",
+                "endpoint": {
+                  "Value": "rds.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "autoscaling": {
+                "Value": "autoscaling",
+                "endpoint": {
+                  "Value": "autoscaling.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "awshealthdashboard": {
+                "Value": "awshealthdashboard",
+                "endpoint": {
+                  "Value": "phd.aws.amazon.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "batch": {
+                "Value": "batch",
+                "endpoint": {
+                  "Value": "batch.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "cloudcontrolapi": {
+                "Value": "cloudcontrolapi",
+                "endpoint": {
+                  "Value": "cloudcontrolapi.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "cloudformation": {
+                "Value": "cloudformation",
+                "endpoint": {
+                  "Value": "cloudformation.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "cloudfront": {
+                "Value": "cloudfront",
+                "endpoint": {
+                  "Value": "cloudfront.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "cloudtrail": {
+                "Value": "cloudtrail",
+                "endpoint": {
+                  "Value": "cloudtrail.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "cloudwatch": {
+                "Value": "cloudwatch",
+                "endpoint": {
+                  "Value": "monitoring.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "codedeploy": {
+                "Value": "codedeploy",
+                "endpoint": {
+                  "Value": "codedeploy.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "config": {
+                "Value": "config",
+                "endpoint": {
+                  "Value": "config.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "datasync": {
+                "Value": "datasync",
+                "endpoint": {
+                  "Value": "datasync.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "directconnect": {
+                "Value": "directconnect",
+                "endpoint": {
+                  "Value": "directconnect.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "dlm": {
+                "Value": "dlm",
+                "endpoint": {
+                  "Value": "dlm.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "dms": {
+                "Value": "dms",
+                "endpoint": {
+                  "Value": "dms.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ds": {
+                "Value": "ds",
+                "endpoint": {
+                  "Value": "ds.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "dynamodb": {
+                "Value": "dynamodb",
+                "endpoint": {
+                  "Value": "dynamodb.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "dynamodbstreams": {
+                "Value": "dynamodbstreams",
+                "endpoint": {
+                  "Value": "streams.dynamodb.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
+              "ebs": {
+                "Value": "ebs",
+                "endpoint": {
+                  "Value": "ec2.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ec2": {
+                "Value": "ec2",
+                "endpoint": {
+                  "Value": "ec2.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ecr": {
+                "Value": "ecr",
+                "endpoint": {
+                  "Value": "ecr.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ecs": {
+                "Value": "ecs",
+                "endpoint": {
+                  "Value": "ecs.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eks": {
+                "Value": "eks",
+                "endpoint": {
+                  "Value": "eks.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eks-auth": {
+                "Value": "eks-auth",
+                "endpoint": {
+                  "Value": "eks-auth.ca-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "elasticache": {
+                "Value": "elasticache",
+                "endpoint": {
+                  "Value": "elasticache.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "elb": {
+                "Value": "elb",
+                "endpoint": {
+                  "Value": "elasticloadbalancing.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "emr": {
+                "Value": "emr",
+                "endpoint": {
+                  "Value": "elasticmapreduce.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "secretsmanager": {
-                "Value": "secretsmanager",
+              "es": {
+                "Value": "es",
                 "endpoint": {
-                  "Value": "secretsmanager.ca-central-1.amazonaws.com"
+                  "Value": "es.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "securityhub": {
-                "Value": "securityhub",
+              "eventbridge": {
+                "Value": "eventbridge",
                 "endpoint": {
-                  "Value": "securityhub.ca-central-1.amazonaws.com"
+                  "Value": "events.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "securitylake": {
-                "Value": "securitylake",
+              "events": {
+                "Value": "events",
                 "endpoint": {
-                  "Value": "securitylake.ca-central-1.amazonaws.com"
+                  "Value": "events.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "serverlessrepo": {
-                "Value": "serverlessrepo",
+              "fargate": {
+                "Value": "fargate"
+              },
+              "firehose": {
+                "Value": "firehose",
                 "endpoint": {
-                  "Value": "serverlessrepo.ca-central-1.amazonaws.com"
+                  "Value": "firehose.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "service-quotas": {
-                "Value": "service-quotas",
+              "iam": {
+                "Value": "iam",
                 "endpoint": {
-                  "Value": "servicequotas.ca-central-1.amazonaws.com"
+                  "Value": "iam.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "servicecatalog": {
-                "Value": "servicecatalog",
+              "imagebuilder": {
+                "Value": "imagebuilder",
                 "endpoint": {
-                  "Value": "servicecatalog.ca-central-1.amazonaws.com"
+                  "Value": "imagebuilder.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "servicecatalog-appregistry": {
-                "Value": "servicecatalog-appregistry",
+              "kinesis": {
+                "Value": "kinesis",
                 "endpoint": {
-                  "Value": "servicecatalog-appregistry.ca-central-1.amazonaws.com"
+                  "Value": "kinesis.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "servicediscovery": {
-                "Value": "servicediscovery",
+              "kms": {
+                "Value": "kms",
                 "endpoint": {
-                  "Value": "servicediscovery.ca-central-1.amazonaws.com"
+                  "Value": "kms.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "ses": {
-                "Value": "ses",
+              "lambda": {
+                "Value": "lambda",
                 "endpoint": {
-                  "Value": "email.ca-central-1.amazonaws.com"
+                  "Value": "lambda.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "shield": {
-                "Value": "shield",
+              "license-manager-linux-subscriptions": {
+                "Value": "license-manager-linux-subscriptions",
                 "endpoint": {
-                  "Value": "shield.us-east-1.amazonaws.com"
+                  "Value": "license-manager-linux-subscriptions.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "signer": {
-                "Value": "signer",
+              "logs": {
+                "Value": "logs",
                 "endpoint": {
-                  "Value": "signer.ca-central-1.amazonaws.com"
+                  "Value": "logs.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "snow-device-management": {
-                "Value": "snow-device-management",
+              "marketplace": {
+                "Value": "marketplace"
+              },
+              "oam": {
+                "Value": "oam",
                 "endpoint": {
-                  "Value": "snow-device-management.ca-central-1.amazonaws.com"
+                  "Value": "oam.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "snowball": {
-                "Value": "snowball",
+              "organizations": {
+                "Value": "organizations",
                 "endpoint": {
-                  "Value": "snowball.ca-central-1.amazonaws.com"
+                  "Value": "organizations.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
-              "snowcone": {
-                "Value": "snowcone"
-              },
-              "sns": {
-                "Value": "sns",
+              "pi": {
+                "Value": "pi",
                 "endpoint": {
-                  "Value": "sns.ca-central-1.amazonaws.com"
+                  "Value": "pi.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS, HTTP"
+                  "Value": "HTTPS"
                 }
               },
-              "sqs": {
-                "Value": "sqs",
+              "privatelink": {
+                "Value": "privatelink"
+              },
+              "ram": {
+                "Value": "ram",
                 "endpoint": {
-                  "Value": "sqs.ca-central-1.amazonaws.com"
+                  "Value": "ram.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS, HTTP"
+                  "Value": "HTTPS"
                 }
               },
-              "ssm": {
-                "Value": "ssm",
+              "rbin": {
+                "Value": "rbin",
                 "endpoint": {
-                  "Value": "ssm.ca-central-1.amazonaws.com"
+                  "Value": "rbin.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "ssm-contacts": {
-                "Value": "ssm-contacts",
+              "rds": {
+                "Value": "rds",
                 "endpoint": {
-                  "Value": "ssm-contacts.ca-central-1.amazonaws.com"
+                  "Value": "rds.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "ssm-incidents": {
-                "Value": "ssm-incidents",
+              "redshift": {
+                "Value": "redshift",
                 "endpoint": {
-                  "Value": "ssm-incidents.ca-central-1.amazonaws.com"
+                  "Value": "redshift.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "ssm-sap": {
-                "Value": "ssm-sap",
+              "redshift-data": {
+                "Value": "redshift-data",
                 "endpoint": {
-                  "Value": "ssm-sap.ca-central-1.amazonaws.com"
+                  "Value": "redshift-data.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "sso-oidc": {
-                "Value": "sso-oidc",
+              "resource-groups": {
+                "Value": "resource-groups",
                 "endpoint": {
-                  "Value": "oidc.ca-central-1.amazonaws.com"
+                  "Value": "resource-groups.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "stepfunctions": {
-                "Value": "stepfunctions",
+              "resourcegroupstaggingapi": {
+                "Value": "resourcegroupstaggingapi",
                 "endpoint": {
-                  "Value": "states.ca-central-1.amazonaws.com"
+                  "Value": "tagging.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "storagegateway": {
-                "Value": "storagegateway",
+              "route53": {
+                "Value": "route53",
                 "endpoint": {
-                  "Value": "storagegateway.ca-central-1.amazonaws.com"
+                  "Value": "route53.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "sts": {
-                "Value": "sts",
+              "route53-application-recovery-controller": {
+                "Value": "route53-application-recovery-controller"
+              },
+              "route53-recovery-control-config": {
+                "Value": "route53-recovery-control-config",
                 "endpoint": {
-                  "Value": "sts.ca-central-1.amazonaws.com"
+                  "Value": "route53-recovery-control-config.us-west-2.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "support": {
-                "Value": "support",
+              "route53resolver": {
+                "Value": "route53resolver",
                 "endpoint": {
-                  "Value": "support.us-east-1.amazonaws.com"
+                  "Value": "route53resolver.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "swf": {
-                "Value": "swf",
+              "s3": {
+                "Value": "s3",
                 "endpoint": {
-                  "Value": "swf.ca-central-1.amazonaws.com"
+                  "Value": "s3.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "HTTPS, HTTP"
                 }
               },
-              "synthetics": {
-                "Value": "synthetics",
+              "sagemaker": {
+                "Value": "sagemaker",
                 "endpoint": {
-                  "Value": "synthetics.ca-central-1.amazonaws.com"
+                  "Value": "api.sagemaker.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "textract": {
-                "Value": "textract",
+              "sagemaker-metrics": {
+                "Value": "sagemaker-metrics",
                 "endpoint": {
-                  "Value": "textract.ca-central-1.amazonaws.com"
+                  "Value": "metrics.sagemaker.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "thinclient": {
-                "Value": "thinclient"
-              },
-              "tnb": {
-                "Value": "tnb",
+              "sagemaker-runtime": {
+                "Value": "sagemaker-runtime",
                 "endpoint": {
-                  "Value": "tnb.ca-central-1.amazonaws.com"
+                  "Value": "runtime.sagemaker.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "transcribe": {
-                "Value": "transcribe",
+              "secretsmanager": {
+                "Value": "secretsmanager",
                 "endpoint": {
-                  "Value": "transcribe.ca-central-1.amazonaws.com"
+                  "Value": "secretsmanager.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "transfer": {
-                "Value": "transfer",
+              "securityhub": {
+                "Value": "securityhub",
                 "endpoint": {
-                  "Value": "transfer.ca-central-1.amazonaws.com"
+                  "Value": "securityhub.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "transitgateway": {
-                "Value": "transitgateway",
+              "service-quotas": {
+                "Value": "service-quotas",
                 "endpoint": {
-                  "Value": "ec2.ca-central-1.amazonaws.com"
+                  "Value": "servicequotas.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "translate": {
-                "Value": "translate",
+              "servicecatalog-appregistry": {
+                "Value": "servicecatalog-appregistry",
                 "endpoint": {
-                  "Value": "translate.ca-central-1.amazonaws.com"
+                  "Value": "servicecatalog-appregistry.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "trustedadvisor": {
-                "Value": "trustedadvisor"
-              },
-              "verified-access": {
-                "Value": "verified-access",
+              "servicediscovery": {
+                "Value": "servicediscovery",
                 "endpoint": {
-                  "Value": "ec2.ca-central-1.amazonaws.com"
+                  "Value": "servicediscovery.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "verifiedpermissions": {
-                "Value": "verifiedpermissions",
+              "sns": {
+                "Value": "sns",
                 "endpoint": {
-                  "Value": "verifiedpermissions.ca-central-1.amazonaws.com"
+                  "Value": "sns.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "HTTPS, HTTP"
                 }
               },
-              "vmwarecloudonaws": {
-                "Value": "vmwarecloudonaws"
-              },
-              "voice-id": {
-                "Value": "voice-id",
+              "sqs": {
+                "Value": "sqs",
                 "endpoint": {
-                  "Value": "voiceid.ca-central-1.amazonaws.com"
+                  "Value": "sqs.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
-                  "Value": "HTTPS"
+                  "Value": "HTTPS, HTTP"
                 }
               },
-              "vpc": {
-                "Value": "vpc"
-              },
-              "vpc-lattice": {
-                "Value": "vpc-lattice",
+              "ssm": {
+                "Value": "ssm",
                 "endpoint": {
-                  "Value": "vpc-lattice.ca-central-1.amazonaws.com"
+                  "Value": "ssm.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "vpn": {
-                "Value": "vpn",
+              "stepfunctions": {
+                "Value": "stepfunctions",
                 "endpoint": {
-                  "Value": "ec2.ca-central-1.amazonaws.com"
+                  "Value": "states.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "waf": {
-                "Value": "waf",
+              "sts": {
+                "Value": "sts",
                 "endpoint": {
-                  "Value": "wafv2.ca-central-1.amazonaws.com"
+                  "Value": "sts.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "waf-regional": {
-                "Value": "waf-regional",
+              "support": {
+                "Value": "support",
                 "endpoint": {
-                  "Value": "waf-regional.ca-central-1.amazonaws.com"
+                  "Value": "support.us-east-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "wellarchitectedtool": {
-                "Value": "wellarchitectedtool",
+              "swf": {
+                "Value": "swf",
                 "endpoint": {
-                  "Value": "wellarchitected.ca-central-1.amazonaws.com"
+                  "Value": "swf.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "wickr": {
-                "Value": "wickr",
+              "synthetics": {
+                "Value": "synthetics",
                 "endpoint": {
-                  "Value": "api.messaging.wickr.ca-central-1.amazonaws.com"
+                  "Value": "synthetics.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "workspaces": {
-                "Value": "workspaces",
+              "transitgateway": {
+                "Value": "transitgateway",
                 "endpoint": {
-                  "Value": "workspaces.ca-central-1.amazonaws.com"
+                  "Value": "ec2.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               },
-              "workspaces-web": {
-                "Value": "workspaces-web",
+              "trustedadvisor": {
+                "Value": "trustedadvisor"
+              },
+              "vpc": {
+                "Value": "vpc"
+              },
+              "vpn": {
+                "Value": "vpn",
                 "endpoint": {
-                  "Value": "workspaces-web.ca-central-1.amazonaws.com"
+                  "Value": "ec2.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
@@ -23236,17 +24175,12 @@
               "xray": {
                 "Value": "xray",
                 "endpoint": {
-                  "Value": "xray.ca-central-1.amazonaws.com"
+                  "Value": "xray.ca-west-1.amazonaws.com"
                 },
                 "protocols": {
                   "Value": "HTTPS"
                 }
               }
-            },
-            "wavelength-zones": {
-              "cac1-wl1-yto-wlz1": {
-                "Value": "cac1-wl1-yto-wlz1"
-              }
             }
           },
           "cn-north-1": {
@@ -26378,6 +27312,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-central-1.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -26892,6 +27832,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -27234,6 +28177,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -27785,6 +28731,11 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
@@ -29172,6 +30123,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-central-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -29352,6 +30306,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -29615,6 +30572,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "rolesanywhere": {
+                "Value": "rolesanywhere",
+                "endpoint": {
+                  "Value": "rolesanywhere.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "route53": {
                 "Value": "route53",
                 "endpoint": {
@@ -30210,6 +31176,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-north-1.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -30589,6 +31561,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-north-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -30862,6 +31837,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -31845,6 +32823,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
                 "endpoint": {
@@ -32510,6 +33497,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -32738,6 +33728,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -33385,6 +34378,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.eu-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "verifiedpermissions": {
                 "Value": "verifiedpermissions",
                 "endpoint": {
@@ -33855,6 +34857,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-south-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -34265,6 +35270,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "rolesanywhere": {
+                "Value": "rolesanywhere",
+                "endpoint": {
+                  "Value": "rolesanywhere.eu-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "rosa": {
                 "Value": "rosa"
               },
@@ -34926,6 +35940,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-west-1.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -35404,6 +36424,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elastic-inference": {
@@ -35791,6 +36814,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -36387,6 +37413,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "Value": "neptune-graph",
+                "endpoint": {
+                  "Value": "neptune-graph.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
@@ -37702,6 +38737,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-west-2.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -38198,6 +39239,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-west-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -38504,6 +39548,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -40454,6 +41501,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.eu-west-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -40691,6 +41741,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.eu-west-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -42192,6 +43245,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.il-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -42641,6 +43697,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "rolesanywhere": {
+                "Value": "rolesanywhere",
+                "endpoint": {
+                  "Value": "rolesanywhere.il-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "route53": {
                 "Value": "route53",
                 "endpoint": {
@@ -42902,6 +43967,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.il-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "vpc": {
                 "Value": "vpc"
               },
@@ -43396,6 +44470,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.me-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -43737,6 +44814,15 @@
               "marketplace": {
                 "Value": "marketplace"
               },
+              "mediaconnect": {
+                "Value": "mediaconnect",
+                "endpoint": {
+                  "Value": "mediaconnect.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "meteringmarketplace": {
                 "Value": "meteringmarketplace",
                 "endpoint": {
@@ -43905,6 +44991,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "rolesanywhere": {
+                "Value": "rolesanywhere",
+                "endpoint": {
+                  "Value": "rolesanywhere.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "rosa": {
                 "Value": "rosa"
               },
@@ -44771,6 +45866,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.me-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -45017,6 +46115,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.me-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -46503,6 +47604,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.sa-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -46755,6 +47859,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -48135,6 +49242,9 @@
                 "Value": "b2bi",
                 "endpoint": {
                   "Value": "b2bi.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "backup": {
@@ -48269,6 +49379,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.us-east-1.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -48849,6 +49965,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.us-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elastic-inference": {
@@ -49245,6 +50364,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -49913,6 +51035,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "Value": "neptune-graph",
+                "endpoint": {
+                  "Value": "neptune-graph.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
@@ -51255,6 +52386,9 @@
                 "Value": "b2bi",
                 "endpoint": {
                   "Value": "b2bi.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "backup": {
@@ -51320,6 +52454,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.us-east-2.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -51762,6 +52902,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.us-east-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elastic-inference": {
@@ -52140,6 +53283,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -52592,6 +53738,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "Value": "neptune-graph",
+                "endpoint": {
+                  "Value": "neptune-graph.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
@@ -54151,6 +55306,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -54774,6 +55932,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "vmwarecloudonaws": {
                 "Value": "vmwarecloudonaws"
               },
@@ -55045,6 +56212,9 @@
                   "Value": "HTTPS"
                 }
               },
+              "bedrock": {
+                "Value": "bedrock"
+              },
               "chime-sdk": {
                 "Value": "chime-sdk"
               },
@@ -55619,6 +56789,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.us-gov-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -56401,6 +57574,15 @@
               "trustedadvisor": {
                 "Value": "trustedadvisor"
               },
+              "verified-access": {
+                "Value": "verified-access",
+                "endpoint": {
+                  "Value": "ec2.us-gov-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "vmwarecloudonaws": {
                 "Value": "vmwarecloudonaws"
               },
@@ -57141,6 +58323,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.us-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elasticache": {
@@ -57411,6 +58596,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -58788,6 +59976,9 @@
                 "Value": "b2bi",
                 "endpoint": {
                   "Value": "b2bi.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "backup": {
@@ -58892,6 +60083,12 @@
                   "Value": "HTTPS"
                 }
               },
+              "cleanroomsml": {
+                "Value": "cleanroomsml",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.us-west-2.amazonaws.com"
+                }
+              },
               "cloud9": {
                 "Value": "cloud9",
                 "endpoint": {
@@ -59442,6 +60639,9 @@
                 "Value": "eks-auth",
                 "endpoint": {
                   "Value": "eks-auth.us-west-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "elastic-inference": {
@@ -59838,6 +61038,9 @@
                 "Value": "inspector-scan",
                 "endpoint": {
                   "Value": "inspector-scan.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "inspector2": {
@@ -60425,6 +61628,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "neptune-graph": {
+                "Value": "neptune-graph",
+                "endpoint": {
+                  "Value": "neptune-graph.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "network-firewall": {
                 "Value": "network-firewall",
                 "endpoint": {
diff --git a/moto/ssm/resources/services.json b/moto/ssm/resources/services.json
index f73b5662a..47e67a963 100644
--- a/moto/ssm/resources/services.json
+++ b/moto/ssm/resources/services.json
@@ -117,6 +117,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "access-analyzer.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -685,6 +694,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "acm.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -1961,6 +1979,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "apigateway.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -2567,6 +2594,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "appconfig.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -2863,6 +2899,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "appconfigdata.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -4838,6 +4883,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "arc-zonal-shift.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -5065,6 +5119,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "eu-central-1": {
                 "Value": "eu-central-1"
               },
@@ -5703,6 +5760,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "rds.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -6002,6 +6068,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "autoscaling.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -6339,6 +6414,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "phd.aws.amazon.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -6522,6 +6606,7 @@
             }
           },
           "b2bi": {
+            "Value": "b2bi",
             "longName": {
               "Value": "AWS B2B Data Interchange"
             },
@@ -6530,18 +6615,27 @@
                 "Value": "us-east-1",
                 "endpoint": {
                   "Value": "b2bi.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-east-2": {
                 "Value": "us-east-2",
                 "endpoint": {
                   "Value": "b2bi.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-west-2": {
                 "Value": "us-west-2",
                 "endpoint": {
                   "Value": "b2bi.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               }
             }
@@ -7464,6 +7558,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "batch.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -7667,6 +7770,9 @@
               "us-east-1": {
                 "Value": "us-east-1"
               },
+              "us-gov-west-1": {
+                "Value": "us-gov-west-1"
+              },
               "us-west-2": {
                 "Value": "us-west-2"
               }
@@ -8557,6 +8663,80 @@
               }
             }
           },
+          "cleanroomsml": {
+            "Value": "cleanroomsml",
+            "longName": {
+              "Value": "AWS Clean Rooms ML"
+            },
+            "regions": {
+              "ap-northeast-1": {
+                "Value": "ap-northeast-1",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-northeast-1.amazonaws.com"
+                }
+              },
+              "ap-northeast-2": {
+                "Value": "ap-northeast-2",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-northeast-2.amazonaws.com"
+                }
+              },
+              "ap-southeast-1": {
+                "Value": "ap-southeast-1",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-southeast-1.amazonaws.com"
+                }
+              },
+              "ap-southeast-2": {
+                "Value": "ap-southeast-2",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.ap-southeast-2.amazonaws.com"
+                }
+              },
+              "eu-central-1": {
+                "Value": "eu-central-1",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-central-1.amazonaws.com"
+                }
+              },
+              "eu-north-1": {
+                "Value": "eu-north-1",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-north-1.amazonaws.com"
+                }
+              },
+              "eu-west-1": {
+                "Value": "eu-west-1",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-west-1.amazonaws.com"
+                }
+              },
+              "eu-west-2": {
+                "Value": "eu-west-2",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.eu-west-2.amazonaws.com"
+                }
+              },
+              "us-east-1": {
+                "Value": "us-east-1",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.us-east-1.amazonaws.com"
+                }
+              },
+              "us-east-2": {
+                "Value": "us-east-2",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.us-east-2.amazonaws.com"
+                }
+              },
+              "us-west-2": {
+                "Value": "us-west-2",
+                "endpoint": {
+                  "Value": "cleanrooms-ml.us-west-2.amazonaws.com"
+                }
+              }
+            }
+          },
           "cloud9": {
             "Value": "cloud9",
             "longName": {
@@ -8883,6 +9063,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "cloudcontrolapi.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -9443,6 +9632,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "cloudformation.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -9742,6 +9940,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "cloudfront.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -10623,6 +10830,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "cloudtrail.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -10928,6 +11144,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "monitoring.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -11952,6 +12177,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "codedeploy.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -14276,6 +14510,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "config.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -15837,6 +16080,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "datasync.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -16854,6 +17106,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "directconnect.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -17224,6 +17485,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "dlm.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -17523,6 +17793,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "dms.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -18303,6 +18582,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ds.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -18602,6 +18890,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "dynamodb.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -18898,6 +19195,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "streams.dynamodb.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -19197,6 +19503,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ec2.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -19496,6 +19811,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ec2.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -19795,6 +20119,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ecr.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -20120,6 +20453,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ecs.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -20709,6 +21051,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "eks.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -20901,168 +21252,261 @@
                 "Value": "af-south-1",
                 "endpoint": {
                   "Value": "eks-auth.af-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-east-1": {
                 "Value": "ap-east-1",
                 "endpoint": {
                   "Value": "eks-auth.ap-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-northeast-1": {
                 "Value": "ap-northeast-1",
                 "endpoint": {
                   "Value": "eks-auth.ap-northeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-northeast-2": {
                 "Value": "ap-northeast-2",
                 "endpoint": {
                   "Value": "eks-auth.ap-northeast-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-northeast-3": {
                 "Value": "ap-northeast-3",
                 "endpoint": {
                   "Value": "eks-auth.ap-northeast-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-south-1": {
                 "Value": "ap-south-1",
                 "endpoint": {
                   "Value": "eks-auth.ap-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-south-2": {
                 "Value": "ap-south-2",
                 "endpoint": {
                   "Value": "eks-auth.ap-south-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-2": {
                 "Value": "ap-southeast-2",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-3": {
                 "Value": "ap-southeast-3",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-4": {
                 "Value": "ap-southeast-4",
                 "endpoint": {
                   "Value": "eks-auth.ap-southeast-4.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
                   "Value": "eks-auth.ca-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "eks-auth.ca-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-central-1": {
                 "Value": "eu-central-1",
                 "endpoint": {
                   "Value": "eks-auth.eu-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-central-2": {
                 "Value": "eu-central-2",
                 "endpoint": {
                   "Value": "eks-auth.eu-central-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-north-1": {
                 "Value": "eu-north-1",
                 "endpoint": {
                   "Value": "eks-auth.eu-north-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-south-1": {
                 "Value": "eu-south-1",
                 "endpoint": {
                   "Value": "eks-auth.eu-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-south-2": {
                 "Value": "eu-south-2",
                 "endpoint": {
                   "Value": "eks-auth.eu-south-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-west-1": {
                 "Value": "eu-west-1",
                 "endpoint": {
                   "Value": "eks-auth.eu-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-west-2": {
                 "Value": "eu-west-2",
                 "endpoint": {
                   "Value": "eks-auth.eu-west-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-west-3": {
                 "Value": "eu-west-3",
                 "endpoint": {
                   "Value": "eks-auth.eu-west-3.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "il-central-1": {
                 "Value": "il-central-1",
                 "endpoint": {
                   "Value": "eks-auth.il-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "me-central-1": {
                 "Value": "me-central-1",
                 "endpoint": {
                   "Value": "eks-auth.me-central-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "me-south-1": {
                 "Value": "me-south-1",
                 "endpoint": {
                   "Value": "eks-auth.me-south-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "sa-east-1": {
                 "Value": "sa-east-1",
                 "endpoint": {
                   "Value": "eks-auth.sa-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-east-1": {
                 "Value": "us-east-1",
                 "endpoint": {
                   "Value": "eks-auth.us-east-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-east-2": {
                 "Value": "us-east-2",
                 "endpoint": {
                   "Value": "eks-auth.us-east-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-west-1": {
                 "Value": "us-west-1",
                 "endpoint": {
                   "Value": "eks-auth.us-west-1.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-west-2": {
                 "Value": "us-west-2",
                 "endpoint": {
                   "Value": "eks-auth.us-west-2.api.aws"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               }
             }
@@ -21249,6 +21693,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "elasticache.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -21885,6 +22338,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "elasticloadbalancing.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -22184,6 +22646,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "elasticmapreduce.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -23068,6 +23539,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "es.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -23367,6 +23847,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "events.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -23663,6 +24152,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "events.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -23979,6 +24477,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -24413,6 +24914,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "firehose.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -28726,6 +29236,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "iam.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -29258,6 +29777,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-4": {
+                "Value": "ap-southeast-4",
+                "endpoint": {
+                  "Value": "identitystore.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -29557,6 +30085,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "imagebuilder.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -29957,150 +30494,225 @@
                 "Value": "af-south-1",
                 "endpoint": {
                   "Value": "inspector-scan.af-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-east-1": {
                 "Value": "ap-east-1",
                 "endpoint": {
                   "Value": "inspector-scan.ap-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-northeast-1": {
                 "Value": "ap-northeast-1",
                 "endpoint": {
                   "Value": "inspector-scan.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-northeast-2": {
                 "Value": "ap-northeast-2",
                 "endpoint": {
                   "Value": "inspector-scan.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-northeast-3": {
                 "Value": "ap-northeast-3",
                 "endpoint": {
                   "Value": "inspector-scan.ap-northeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-south-1": {
                 "Value": "ap-south-1",
                 "endpoint": {
                   "Value": "inspector-scan.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1",
                 "endpoint": {
                   "Value": "inspector-scan.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-2": {
                 "Value": "ap-southeast-2",
                 "endpoint": {
                   "Value": "inspector-scan.ap-southeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ap-southeast-3": {
                 "Value": "ap-southeast-3",
                 "endpoint": {
                   "Value": "inspector-scan.ap-southeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
                   "Value": "inspector-scan.ca-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-central-1": {
                 "Value": "eu-central-1",
                 "endpoint": {
                   "Value": "inspector-scan.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-central-2": {
                 "Value": "eu-central-2",
                 "endpoint": {
                   "Value": "inspector-scan.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-north-1": {
                 "Value": "eu-north-1",
                 "endpoint": {
                   "Value": "inspector-scan.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-south-1": {
                 "Value": "eu-south-1",
                 "endpoint": {
                   "Value": "inspector-scan.eu-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-west-1": {
                 "Value": "eu-west-1",
                 "endpoint": {
                   "Value": "inspector-scan.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-west-2": {
                 "Value": "eu-west-2",
                 "endpoint": {
                   "Value": "inspector-scan.eu-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "eu-west-3": {
                 "Value": "eu-west-3",
                 "endpoint": {
                   "Value": "inspector-scan.eu-west-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "me-south-1": {
                 "Value": "me-south-1",
                 "endpoint": {
                   "Value": "inspector-scan.me-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "sa-east-1": {
                 "Value": "sa-east-1",
                 "endpoint": {
                   "Value": "inspector-scan.sa-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-east-1": {
                 "Value": "us-east-1",
                 "endpoint": {
                   "Value": "inspector-scan.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-east-2": {
                 "Value": "us-east-2",
                 "endpoint": {
                   "Value": "inspector-scan.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-gov-east-1": {
                 "Value": "us-gov-east-1",
                 "endpoint": {
                   "Value": "inspector-scan.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-gov-west-1": {
                 "Value": "us-gov-west-1",
                 "endpoint": {
                   "Value": "inspector-scan.us-gov-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-west-1": {
                 "Value": "us-west-1",
                 "endpoint": {
                   "Value": "inspector-scan.us-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               },
               "us-west-2": {
                 "Value": "us-west-2",
                 "endpoint": {
                   "Value": "inspector-scan.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
                 }
               }
             }
@@ -33767,6 +34379,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "kinesis.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -34529,6 +35150,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "kms.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -35127,6 +35757,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "lambda.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -36299,6 +36938,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "license-manager-linux-subscriptions.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -36995,6 +37643,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "logs.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -38189,6 +38846,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -38580,6 +39240,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-south-2": {
+                "Value": "ap-south-2",
+                "endpoint": {
+                  "Value": "mediaconnect.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1",
                 "endpoint": {
@@ -38598,6 +39267,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-4": {
+                "Value": "ap-southeast-4",
+                "endpoint": {
+                  "Value": "mediaconnect.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -38652,6 +39330,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "me-central-1": {
+                "Value": "me-central-1",
+                "endpoint": {
+                  "Value": "mediaconnect.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "sa-east-1": {
                 "Value": "sa-east-1",
                 "endpoint": {
@@ -38962,6 +39649,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-4": {
+                "Value": "ap-southeast-4",
+                "endpoint": {
+                  "Value": "medialive.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -41605,6 +42301,73 @@
               }
             }
           },
+          "neptune-graph": {
+            "regions": {
+              "ap-northeast-1": {
+                "Value": "ap-northeast-1",
+                "endpoint": {
+                  "Value": "neptune-graph.ap-northeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-southeast-1": {
+                "Value": "ap-southeast-1",
+                "endpoint": {
+                  "Value": "neptune-graph.ap-southeast-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-central-1": {
+                "Value": "eu-central-1",
+                "endpoint": {
+                  "Value": "neptune-graph.eu-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-west-1": {
+                "Value": "eu-west-1",
+                "endpoint": {
+                  "Value": "neptune-graph.eu-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-1": {
+                "Value": "us-east-1",
+                "endpoint": {
+                  "Value": "neptune-graph.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-east-2": {
+                "Value": "us-east-2",
+                "endpoint": {
+                  "Value": "neptune-graph.us-east-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-west-2": {
+                "Value": "us-west-2",
+                "endpoint": {
+                  "Value": "neptune-graph.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              }
+            }
+          },
           "network-firewall": {
             "Value": "network-firewall",
             "longName": {
@@ -42420,6 +43183,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "oam.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -43232,6 +44004,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "organizations.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -44343,6 +45124,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "pi.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -45442,6 +46232,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -46141,6 +46934,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ram.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -46437,6 +47239,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "rbin.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -46736,6 +47547,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "rds.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -47183,6 +48003,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "redshift.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -47479,6 +48308,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "redshift-data.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -48388,6 +49226,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "resource-groups.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -48684,6 +49531,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "tagging.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -49009,6 +49865,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-south-2": {
+                "Value": "ap-south-2",
+                "endpoint": {
+                  "Value": "rolesanywhere.ap-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1",
                 "endpoint": {
@@ -49036,6 +49901,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-4": {
+                "Value": "ap-southeast-4",
+                "endpoint": {
+                  "Value": "rolesanywhere.ap-southeast-4.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -49072,6 +49946,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "eu-central-2": {
+                "Value": "eu-central-2",
+                "endpoint": {
+                  "Value": "rolesanywhere.eu-central-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-north-1": {
                 "Value": "eu-north-1",
                 "endpoint": {
@@ -49090,6 +49973,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "eu-south-2": {
+                "Value": "eu-south-2",
+                "endpoint": {
+                  "Value": "rolesanywhere.eu-south-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-west-1": {
                 "Value": "eu-west-1",
                 "endpoint": {
@@ -49117,6 +50009,24 @@
                   "Value": "HTTPS"
                 }
               },
+              "il-central-1": {
+                "Value": "il-central-1",
+                "endpoint": {
+                  "Value": "rolesanywhere.il-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "me-central-1": {
+                "Value": "me-central-1",
+                "endpoint": {
+                  "Value": "rolesanywhere.me-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "me-south-1": {
                 "Value": "me-south-1",
                 "endpoint": {
@@ -49397,6 +50307,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "route53.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -49606,6 +50525,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -49751,6 +50673,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "route53-recovery-control-config.us-west-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-central-1": {
                 "Value": "eu-central-1",
                 "endpoint": {
@@ -50009,6 +50940,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "route53resolver.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -50406,6 +51346,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "s3.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -51009,6 +51958,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "api.sagemaker.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -51604,6 +52562,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "metrics.sagemaker.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -51870,6 +52837,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "runtime.sagemaker.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -53050,6 +54026,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "secretsmanager.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -53349,6 +54334,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "securityhub.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -54018,6 +55012,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "servicequotas.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -54613,6 +55616,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "servicecatalog-appregistry.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-central-1": {
                 "Value": "eu-central-1",
                 "endpoint": {
@@ -54894,6 +55906,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "servicediscovery.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -56497,6 +57518,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "sns.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -56796,6 +57826,15 @@
                   "Value": "HTTPS, HTTP"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "sqs.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS, HTTP"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -57095,6 +58134,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ssm.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -58164,6 +59212,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "states.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -58759,6 +59816,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "sts.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -59058,6 +60124,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "support.us-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -59392,6 +60467,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "swf.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -59688,6 +60772,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "synthetics.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -60898,6 +61991,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ec2.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {
@@ -61289,6 +62391,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -61369,6 +62474,24 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-northeast-2": {
+                "Value": "ap-northeast-2",
+                "endpoint": {
+                  "Value": "ec2.ap-northeast-2.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "ap-south-1": {
+                "Value": "ap-south-1",
+                "endpoint": {
+                  "Value": "ec2.ap-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ap-southeast-1": {
                 "Value": "ap-southeast-1",
                 "endpoint": {
@@ -61387,6 +62510,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ap-southeast-3": {
+                "Value": "ap-southeast-3",
+                "endpoint": {
+                  "Value": "ec2.ap-southeast-3.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "ca-central-1": {
                 "Value": "ca-central-1",
                 "endpoint": {
@@ -61405,6 +62537,24 @@
                   "Value": "HTTPS"
                 }
               },
+              "eu-north-1": {
+                "Value": "eu-north-1",
+                "endpoint": {
+                  "Value": "ec2.eu-north-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "eu-south-1": {
+                "Value": "eu-south-1",
+                "endpoint": {
+                  "Value": "ec2.eu-south-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-west-1": {
                 "Value": "eu-west-1",
                 "endpoint": {
@@ -61423,6 +62573,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "il-central-1": {
+                "Value": "il-central-1",
+                "endpoint": {
+                  "Value": "ec2.il-central-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "sa-east-1": {
                 "Value": "sa-east-1",
                 "endpoint": {
@@ -61450,6 +62609,24 @@
                   "Value": "HTTPS"
                 }
               },
+              "us-gov-east-1": {
+                "Value": "us-gov-east-1",
+                "endpoint": {
+                  "Value": "ec2.us-gov-east-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
+              "us-gov-west-1": {
+                "Value": "us-gov-west-1",
+                "endpoint": {
+                  "Value": "ec2.us-gov-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "us-west-1": {
                 "Value": "us-west-1",
                 "endpoint": {
@@ -61938,6 +63115,9 @@
               "ca-central-1": {
                 "Value": "ca-central-1"
               },
+              "ca-west-1": {
+                "Value": "ca-west-1"
+              },
               "cn-north-1": {
                 "Value": "cn-north-1"
               },
@@ -62227,6 +63407,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "ec2.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "eu-central-1": {
                 "Value": "eu-central-1",
                 "endpoint": {
@@ -63850,6 +65039,15 @@
                   "Value": "HTTPS"
                 }
               },
+              "ca-west-1": {
+                "Value": "ca-west-1",
+                "endpoint": {
+                  "Value": "xray.ca-west-1.amazonaws.com"
+                },
+                "protocols": {
+                  "Value": "HTTPS"
+                }
+              },
               "cn-north-1": {
                 "Value": "cn-north-1",
                 "endpoint": {


Test patch:
diff --git a/tests/test_panorama/__init__.py b/tests/test_panorama/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/test_panorama/test_panorama_device.py b/tests/test_panorama/test_panorama_device.py
new file mode 100644
index 000000000..d452055bd
--- /dev/null
+++ b/tests/test_panorama/test_panorama_device.py
@@ -0,0 +1,435 @@
+from datetime import datetime
+from typing import List
+from unittest import SkipTest
+
+import boto3
+import pytest
+from botocore.exceptions import ClientError
+from dateutil.tz import tzutc
+from freezegun import freeze_time
+
+from moto import mock_panorama, settings
+from moto.moto_api import state_manager
+
+
+@mock_panorama
+def test_provision_device() -> None:
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't use ManagedState in ServerMode")
+    client = boto3.client("panorama", region_name="eu-west-1")
+    given_device_name = "test-device-name"
+    state_manager.set_transition(
+        model_name=f"panorama::device_{given_device_name}_provisioning_status",
+        transition={"progression": "manual", "times": 1},
+    )
+    resp = client.provision_device(
+        Description=given_device_name,
+        Name="test-device-name",
+        NetworkingConfiguration={
+            "Ethernet0": {
+                "ConnectionType": "STATIC_IP",
+                "StaticIpConnectionInfo": {
+                    "DefaultGateway": "192.168.1.1",
+                    "Dns": [
+                        "8.8.8.8",
+                    ],
+                    "IpAddress": "192.168.1.10",
+                    "Mask": "255.255.255.0",
+                },
+            },
+            "Ethernet1": {
+                "ConnectionType": "dhcp",
+            },
+            "Ntp": {
+                "NtpServers": [
+                    "0.pool.ntp.org",
+                    "1.pool.ntp.org",
+                    "0.fr.pool.ntp.org",
+                ]
+            },
+        },
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    assert (
+        resp["Arn"] == "arn:aws:panorama:eu-west-1:123456789012:device/test-device-name"
+    )
+    assert resp["Certificates"] == b"certificate"
+    assert resp["DeviceId"] == "device-RsozEWjZpeNe3SXHidX3mg=="
+    assert resp["IotThingName"] == ""
+    assert resp["Status"] == "AWAITING_PROVISIONING"
+
+
+@mock_panorama
+def test_describe_device() -> None:
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't freeze time in ServerMode")
+    client = boto3.client("panorama", region_name="eu-west-1")
+    given_device_name = "test-device-name"
+    state_manager.set_transition(
+        model_name=f"panorama::device_{given_device_name}_provisioning_status",
+        transition={"progression": "immediate"},
+    )
+    with freeze_time("2020-01-01 12:00:00"):
+        resp = client.provision_device(
+            Description="test device description",
+            Name=given_device_name,
+            NetworkingConfiguration={
+                "Ethernet0": {
+                    "ConnectionType": "STATIC_IP",
+                    "StaticIpConnectionInfo": {
+                        "DefaultGateway": "192.168.1.1",
+                        "Dns": [
+                            "8.8.8.8",
+                        ],
+                        "IpAddress": "192.168.1.10",
+                        "Mask": "255.255.255.0",
+                    },
+                },
+                "Ethernet1": {
+                    "ConnectionType": "dhcp",
+                },
+                "Ntp": {
+                    "NtpServers": [
+                        "0.pool.ntp.org",
+                        "1.pool.ntp.org",
+                        "0.fr.pool.ntp.org",
+                    ]
+                },
+            },
+            Tags={"Key": "test-key", "Value": "test-value"},
+        )
+
+    resp = client.describe_device(DeviceId=resp["DeviceId"])
+
+    assert resp["AlternateSoftwares"] == [{"Version": "0.2.1"}]
+    assert (
+        resp["Arn"] == "arn:aws:panorama:eu-west-1:123456789012:device/test-device-name"
+    )
+    assert resp["Brand"] == "AWS_PANORAMA"
+    assert resp["CreatedTime"] == datetime(2020, 1, 1, 12, 0, tzinfo=tzutc())
+    assert resp["CurrentNetworkingStatus"] == {
+        "Ethernet0Status": {
+            "ConnectionStatus": "CONNECTED",
+            "HwAddress": "8C:0F:5F:60:F5:C4",
+            "IpAddress": "192.168.1.300/24",
+        },
+        "Ethernet1Status": {
+            "ConnectionStatus": "NOT_CONNECTED",
+            "HwAddress": "8C:0F:6F:60:F4:F1",
+            "IpAddress": "--",
+        },
+        "LastUpdatedTime": datetime(2020, 1, 1, 12, 0, tzinfo=tzutc()),
+        "NtpStatus": {
+            "ConnectionStatus": "CONNECTED",
+            "IpAddress": "91.224.149.41:123",
+            "NtpServerName": "0.pool.ntp.org",
+        },
+    }
+    assert resp["CurrentSoftware"] == "6.2.1"
+    assert resp["Description"] == "test device description"
+    assert resp["DeviceAggregatedStatus"] == "ONLINE"
+    assert resp["DeviceConnectionStatus"] == "ONLINE"
+    assert resp["DeviceId"] == "device-RsozEWjZpeNe3SXHidX3mg=="
+    assert resp["LatestDeviceJob"] == {"JobType": "REBOOT", "Status": "COMPLETED"}
+    assert resp["LatestSoftware"] == "6.2.1"
+    assert resp["LeaseExpirationTime"] == datetime(2020, 1, 6, 12, 0, tzinfo=tzutc())
+    assert resp["Name"] == "test-device-name"
+    assert resp["ProvisioningStatus"] == "SUCCEEDED"
+    assert resp["SerialNumber"] == "GAD81E29013274749"
+    assert resp["Tags"] == {"Key": "test-key", "Value": "test-value"}
+    assert resp["Type"] == "PANORAMA_APPLIANCE"
+
+
+@mock_panorama
+def test_provision_device_aggregated_status_lifecycle() -> None:
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't use ManagedState in ServerMode")
+    client = boto3.client("panorama", region_name="eu-west-1")
+    given_device_name = "test-device-name"
+    state_manager.set_transition(
+        model_name=f"panorama::device_{given_device_name}_aggregated_status",
+        transition={"progression": "manual", "times": 1},
+    )
+    state_manager.set_transition(
+        model_name=f"panorama::device_{given_device_name}_provisioning_status",
+        transition={"progression": "manual", "times": 2},
+    )
+    device_id = client.provision_device(
+        Description="test device description",
+        Name=given_device_name,
+        NetworkingConfiguration={
+            "Ethernet0": {
+                "ConnectionType": "STATIC_IP",
+                "StaticIpConnectionInfo": {
+                    "DefaultGateway": "192.168.1.1",
+                    "Dns": [
+                        "8.8.8.8",
+                    ],
+                    "IpAddress": "192.168.1.10",
+                    "Mask": "255.255.255.0",
+                },
+            },
+            "Ethernet1": {
+                "ConnectionType": "dhcp",
+            },
+            "Ntp": {
+                "NtpServers": [
+                    "0.pool.ntp.org",
+                    "1.pool.ntp.org",
+                    "0.fr.pool.ntp.org",
+                ]
+            },
+        },
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )["DeviceId"]
+
+    resp_1 = client.describe_device(DeviceId=device_id)
+    assert (
+        resp_1["Arn"]
+        == "arn:aws:panorama:eu-west-1:123456789012:device/test-device-name"
+    )
+    assert resp_1["DeviceAggregatedStatus"] == "AWAITING_PROVISIONING"
+    assert resp_1["ProvisioningStatus"] == "AWAITING_PROVISIONING"
+
+    resp_2 = client.describe_device(DeviceId=device_id)
+    assert (
+        resp_2["Arn"]
+        == "arn:aws:panorama:eu-west-1:123456789012:device/test-device-name"
+    )
+    assert resp_2["DeviceAggregatedStatus"] == "PENDING"
+    assert resp_2["ProvisioningStatus"] == "AWAITING_PROVISIONING"
+
+    resp_3 = client.describe_device(DeviceId=device_id)
+    assert (
+        resp_3["Arn"]
+        == "arn:aws:panorama:eu-west-1:123456789012:device/test-device-name"
+    )
+    assert resp_3["DeviceAggregatedStatus"] == "ONLINE"
+    assert resp_3["ProvisioningStatus"] == "PENDING"
+
+
+@mock_panorama
+def test_list_device() -> None:
+    client = boto3.client("panorama", region_name="eu-west-1")
+    resp_1 = client.provision_device(
+        Description="test device description 1",
+        Name="test-device-name-1",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    resp_2 = client.provision_device(
+        Description="test device description 2",
+        Name="test-device-name-2",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+
+    resp = client.list_devices()
+
+    assert len(resp["Devices"]) == 2
+    assert "Brand" in resp["Devices"][0]
+    assert "CreatedTime" in resp["Devices"][0]
+    assert "CurrentSoftware" in resp["Devices"][0]
+    assert "Description" in resp["Devices"][0]
+    assert "DeviceAggregatedStatus" in resp["Devices"][0]
+    assert "DeviceId" in resp["Devices"][0]
+    assert "LastUpdatedTime" in resp["Devices"][0]
+    assert "LatestDeviceJob" in resp["Devices"][0]
+    assert "LeaseExpirationTime" in resp["Devices"][0]
+    assert "Name" in resp["Devices"][0]
+    assert "ProvisioningStatus" in resp["Devices"][0]
+    assert "Tags" in resp["Devices"][0]
+    assert "Type" in resp["Devices"][0]
+    assert resp["Devices"][0]["DeviceId"] == resp_1["DeviceId"]
+
+    assert "Brand" in resp["Devices"][1]
+    assert "CreatedTime" in resp["Devices"][1]
+    assert "CurrentSoftware" in resp["Devices"][1]
+    assert "Description" in resp["Devices"][1]
+    assert "DeviceAggregatedStatus" in resp["Devices"][1]
+    assert "DeviceId" in resp["Devices"][1]
+    assert "LastUpdatedTime" in resp["Devices"][1]
+    assert "LatestDeviceJob" in resp["Devices"][1]
+    assert "LeaseExpirationTime" in resp["Devices"][1]
+    assert "Name" in resp["Devices"][1]
+    assert "ProvisioningStatus" in resp["Devices"][1]
+    assert "Tags" in resp["Devices"][1]
+    assert "Type" in resp["Devices"][1]
+    assert resp["Devices"][1]["DeviceId"] == resp_2["DeviceId"]
+
+
+@mock_panorama
+def test_list_device_name_filter() -> None:
+    client = boto3.client("panorama", region_name="eu-west-1")
+    resp_1 = client.provision_device(
+        Description="test device description 1",
+        Name="test-device-name-1",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    resp_2 = client.provision_device(
+        Description="test device description 2",
+        Name="test-device-name-2",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    _ = client.provision_device(
+        Description="test device description 3",
+        Name="another-test-device-name",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+
+    resp = client.list_devices(NameFilter="test-")
+
+    assert len(resp["Devices"]) == 2
+    assert resp["Devices"][0]["DeviceId"] == resp_1["DeviceId"]
+    assert resp["Devices"][1]["DeviceId"] == resp_2["DeviceId"]
+
+
+@mock_panorama
+def test_list_device_max_result_and_next_token() -> None:
+    client = boto3.client("panorama", region_name="eu-west-1")
+    _ = client.provision_device(
+        Description="test device description 1",
+        Name="test-device-name-1",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    _ = client.provision_device(
+        Description="test device description 2",
+        Name="test-device-name-2",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+
+    resp = client.list_devices(MaxResults=1)
+
+    assert len(resp["Devices"]) == 1
+    assert "NextToken" in resp
+
+    resp = client.list_devices(MaxResults=1, NextToken=resp["NextToken"])
+
+    assert len(resp["Devices"]) == 1
+    assert "NextToken" not in resp
+
+
+@pytest.mark.parametrize(
+    "sort_order, indexes",
+    [
+        ("ASCENDING", [0, 1]),
+        ("DESCENDING", [1, 0]),
+    ],
+)
+@mock_panorama
+def test_list_devices_sort_order(sort_order: str, indexes: List[int]) -> None:
+    client = boto3.client("panorama", region_name="eu-west-1")
+    resp_1 = client.provision_device(
+        Description="test device description 1",
+        Name="test-device-name-1",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    resp_2 = client.provision_device(
+        Description="test device description 2",
+        Name="test-device-name-2",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+
+    resp = client.list_devices(SortOrder=sort_order)
+
+    assert len(resp["Devices"]) == 2
+    assert resp["Devices"][indexes[0]]["DeviceId"] == resp_1["DeviceId"]
+    assert resp["Devices"][indexes[1]]["DeviceId"] == resp_2["DeviceId"]
+
+
+@pytest.mark.parametrize(
+    "sort_by, indexes",
+    [
+        ("DEVICE_ID", [0, 1]),
+        ("CREATED_TIME", [1, 0]),
+        ("NAME", [0, 1]),
+        ("DEVICE_AGGREGATED_STATUS", [1, 0]),
+    ],
+)
+@mock_panorama
+def test_list_devices_sort_by(sort_by: str, indexes: List[int]) -> None:
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't freeze time in ServerMode")
+    client = boto3.client("panorama", region_name="eu-west-1")
+    state_manager.set_transition(
+        model_name="panorama::device_test-device-name-2_aggregated_status",
+        transition={"progression": "manual", "times": 1},
+    )
+    with freeze_time("2021-01-01 12:00:00"):
+        resp_1 = client.provision_device(
+            Description="test device description 1",
+            Name="test-device-name-1",
+            Tags={"Key": "test-key", "Value": "test-value"},
+        )
+    with freeze_time("2021-01-01 10:00:00"):
+        resp_2 = client.provision_device(
+            Description="test device description 2",
+            Name="test-device-name-2",
+            Tags={"Key": "test-key", "Value": "test-value"},
+        )
+
+    resp = client.list_devices(SortBy=sort_by)
+
+    assert len(resp["Devices"]) == 2
+    assert resp["Devices"][indexes[0]]["DeviceId"] == resp_1["DeviceId"]
+    assert resp["Devices"][indexes[1]]["DeviceId"] == resp_2["DeviceId"]
+
+
+@mock_panorama
+def test_list_devices_device_aggregated_status_filter() -> None:
+    if settings.TEST_SERVER_MODE:
+        raise SkipTest("Can't use ManagedState in ServerMode")
+    client = boto3.client("panorama", region_name="eu-west-1")
+    state_manager.set_transition(
+        model_name="panorama::device_test-device-name-2_aggregated_status",
+        transition={"progression": "manual", "times": 1},
+    )
+    _ = client.provision_device(
+        Description="test device description 1",
+        Name="test-device-name-1",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    resp_2 = client.provision_device(
+        Description="test device description 2",
+        Name="test-device-name-2",
+        Tags={"Key": "test-key", "Value": "test-value"},
+    )
+    # Need two advance to go from not-a-status to Pending
+    client.describe_device(DeviceId=resp_2["DeviceId"])
+
+    resp = client.list_devices(DeviceAggregatedStatusFilter="PENDING")
+
+    assert len(resp["Devices"]) == 1
+    assert resp["Devices"][0]["DeviceId"] == resp_2["DeviceId"]
+
+
+@mock_panorama
+def test_update_device_metadata() -> None:
+    client = boto3.client("panorama", region_name="eu-west-1")
+    resp = client.provision_device(
+        Description="test device description", Name="test-device-name"
+    )
+
+    client.update_device_metadata(
+        DeviceId=resp["DeviceId"],
+        Description="updated device description",
+    )
+
+    resp_updated = client.describe_device(DeviceId=resp["DeviceId"])
+
+    assert resp_updated["Description"] == "updated device description"
+
+
+@mock_panorama
+def test_delete_device() -> None:
+    client = boto3.client("panorama", region_name="eu-west-1")
+    resp = client.provision_device(
+        Description="test device description", Name="test-device-name"
+    )
+
+    client.delete_device(DeviceId=resp["DeviceId"])
+
+    with pytest.raises(ClientError) as ex:
+        client.describe_device(DeviceId=resp["DeviceId"])
+    err = ex.value.response
+    assert err["Error"]["Code"] == "ValidationException"
+    assert f"Device {resp['DeviceId']} not found" in err["Error"]["Message"]
+    assert err["ResponseMetadata"]["HTTPStatusCode"] == 400
diff --git a/tests/test_panorama/test_server.py b/tests/test_panorama/test_server.py
new file mode 100644
index 000000000..e10048aeb
--- /dev/null
+++ b/tests/test_panorama/test_server.py
@@ -0,0 +1,12 @@
+"""Test different server responses."""
+
+import moto.server as server
+
+
+def test_panorama_list():
+    backend = server.create_backend_app("panorama")
+    test_client = backend.test_client()
+
+    resp = test_client.get("/devices")
+
+    assert resp.status_code == 200