Repository: boto/botocore
Pull request #2944 (2023-05-17 19:58:56)

Presigning content type bug
This addresses a bug in URL presigning. For certain operations, like Polly's `SynthesizeSpeech`, the URL used for presigning does not match what is modeled for the request. Typically it is sent as a `POST` with API parameters attached to a body, but through presigning, it is a `GET` with parameters attached in the URL query. 

This issue arises in the `RestJson` serializers where the input params are still treated as a body, so a `Content-Type` header is injected, causing a signature mismatch in the presigned URL that is returned.

This PR generally removes this header for presigning from requests using methods where bodies should not be present or should have no meaning.

UPDATE: After some issues were discovered when running presigning for the JSON-RPC protocol, we've decided to scale back this solution to only be applied as a customization for Polly's `synthesize_speech` when generating a presigned URL.

codecov-commenter: ## [Codecov](https://app.codecov.io/gh/boto/botocore/pull/2944?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto) Report
Patch coverage: **`100.00`**% and project coverage change: **`-0.06`** :warning:
> Comparison is base [(`f6dbe19`)](https://app.codecov.io/gh/boto/botocore/commit/f6dbe19fbf171548b74de521cafe17cd59d5ff49?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto) 93.29% compared to head [(`c645d45`)](https://app.codecov.io/gh/boto/botocore/pull/2944?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto) 93.24%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please [install the Github App Integration](https://github.com/apps/codecov) for your organization. [Read more](https://about.codecov.io/blog/codecov-is-updating-its-github-integration/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto).

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


```diff
@@             Coverage Diff             @@
##           develop    #2944      +/-   ##
===========================================
- Coverage    93.29%   93.24%   -0.06%     
===========================================
  Files           64       64              
  Lines        13588    13588              
===========================================
- Hits         12677    12670       -7     
- Misses         911      918       +7     
```


| [Impacted Files](https://app.codecov.io/gh/boto/botocore/pull/2944?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto) | Coverage Δ | |
|---|---|---|
| [botocore/signers.py](https://app.codecov.io/gh/boto/botocore/pull/2944?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto#diff-Ym90b2NvcmUvc2lnbmVycy5weQ==) | `96.10% <100.00%> (+0.03%)` | :arrow_up: |

... and [6 files with indirect coverage changes](https://app.codecov.io/gh/boto/botocore/pull/2944/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto)


</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/boto/botocore/pull/2944?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto).   
:loudspeaker: Do you have feedback about the report comment? [Let us know in this issue](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=boto).


Patch:
diff --git a/.changes/1.29.141.json b/.changes/1.29.141.json
new file mode 100644
index 000000000..23268ffc2
--- /dev/null
+++ b/.changes/1.29.141.json
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``application-autoscaling``",
+    "description": "With this release, ElastiCache customers will be able to use predefined metricType \"ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage\" for their ElastiCache instances.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codepipeline``",
+    "description": "Add PollingDisabledAt time information in PipelineMetadata object of GetPipeline API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``gamelift``",
+    "description": "GameLift FleetIQ users can now filter game server claim requests to exclude servers on instances that are draining.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Added ability to create data quality rulesets for shared, cross-account Glue Data Catalog tables. Added support for dataset comparison rules through a new parameter called AdditionalDataSources. Enhanced the data quality results with a map containing profiled metric values.",
+    "type": "api-change"
+  },
+  {
+    "category": "``migration-hub-refactor-spaces``",
+    "description": "This SDK update allows for path parameter syntax to be passed to the CreateRoute API. Path parameter syntax require parameters to be enclosed in {} characters. This update also includes a new AppendSourcePath field which lets users forward the source path to the Service URL endpoint.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Amazon SageMaker Automatic Model Tuning now supports enabling Autotune for tuning jobs which can choose tuning job configurations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff --git a/.changes/next-release/bugfix-generatepresignedurl-96454.json b/.changes/next-release/bugfix-generatepresignedurl-96454.json
new file mode 100644
index 000000000..1f1bed810
--- /dev/null
+++ b/.changes/next-release/bugfix-generatepresignedurl-96454.json
@@ -0,0 +1,5 @@
+{
+  "type": "bugfix",
+  "category": "``Polly``",
+  "description": "Remove `Content-Type` header from ``synthesize_speech`` URL presigning."
+}
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 1436d8c9e..3b44ecb75 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -2,6 +2,17 @@
 CHANGELOG
 =========
 
+1.29.141
+========
+
+* api-change:``application-autoscaling``: With this release, ElastiCache customers will be able to use predefined metricType "ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage" for their ElastiCache instances.
+* api-change:``codepipeline``: Add PollingDisabledAt time information in PipelineMetadata object of GetPipeline API.
+* api-change:``gamelift``: GameLift FleetIQ users can now filter game server claim requests to exclude servers on instances that are draining.
+* api-change:``glue``: Added ability to create data quality rulesets for shared, cross-account Glue Data Catalog tables. Added support for dataset comparison rules through a new parameter called AdditionalDataSources. Enhanced the data quality results with a map containing profiled metric values.
+* api-change:``migration-hub-refactor-spaces``: This SDK update allows for path parameter syntax to be passed to the CreateRoute API. Path parameter syntax require parameters to be enclosed in {} characters. This update also includes a new AppendSourcePath field which lets users forward the source path to the Service URL endpoint.
+* api-change:``sagemaker``: Amazon SageMaker Automatic Model Tuning now supports enabling Autotune for tuning jobs which can choose tuning job configurations.
+
+
 1.29.140
 ========
 
diff --git a/botocore/__init__.py b/botocore/__init__.py
index fd5e4560f..2681df6c4 100644
--- a/botocore/__init__.py
+++ b/botocore/__init__.py
@@ -16,7 +16,7 @@ import logging
 import os
 import re
 
-__version__ = '1.29.140'
+__version__ = '1.29.141'
 
 
 class NullHandler(logging.Handler):
diff --git a/botocore/data/application-autoscaling/2016-02-06/service-2.json b/botocore/data/application-autoscaling/2016-02-06/service-2.json
index 9e882cc49..99b4f5d78 100644
--- a/botocore/data/application-autoscaling/2016-02-06/service-2.json
+++ b/botocore/data/application-autoscaling/2016-02-06/service-2.json
@@ -692,7 +692,8 @@
         "ElastiCacheReplicaEngineCPUUtilization",
         "ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage",
         "NeptuneReaderAverageCPUUtilization",
-        "SageMakerVariantProvisionedConcurrencyUtilization"
+        "SageMakerVariantProvisionedConcurrencyUtilization",
+        "ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage"
       ]
     },
     "MetricUnit":{"type":"string"},
@@ -887,7 +888,7 @@
         },
         "MinCapacity":{
           "shape":"ResourceCapacity",
-          "documentation":"<p>The minimum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand. This property is required when registering a new scalable target.</p> <p>For the following resources, the minimum value allowed is 0.</p> <ul> <li> <p>AppStream 2.0 fleets</p> </li> <li> <p> Aurora DB clusters</p> </li> <li> <p>ECS services</p> </li> <li> <p>EMR clusters</p> </li> <li> <p>Lambda provisioned concurrency</p> </li> <li> <p>SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>SageMaker endpoint variants</p> </li> <li> <p>Spot Fleets</p> </li> <li> <p>custom resources</p> </li> </ul> <p>It's strongly recommended that you specify a value greater than 0. A value greater than 0 means that data points are continuously reported to CloudWatch that scaling policies can use to scale on a metric like average CPU utilization.</p> <p>For all other resources, the minimum allowed value depends on the type of resource that you are using. If you provide a value that is lower than what a resource can accept, an error occurs. In which case, the error message will provide the minimum value that the resource can accept.</p>"
+          "documentation":"<p>The minimum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand. This property is required when registering a new scalable target.</p> <p>For the following resources, the minimum value allowed is 0.</p> <ul> <li> <p>AppStream 2.0 fleets</p> </li> <li> <p> Aurora DB clusters</p> </li> <li> <p>ECS services</p> </li> <li> <p>EMR clusters</p> </li> <li> <p>Lambda provisioned concurrency</p> </li> <li> <p>SageMaker endpoint variants</p> </li> <li> <p>SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>Spot Fleets</p> </li> <li> <p>custom resources</p> </li> </ul> <p>It's strongly recommended that you specify a value greater than 0. A value greater than 0 means that data points are continuously reported to CloudWatch that scaling policies can use to scale on a metric like average CPU utilization.</p> <p>For all other resources, the minimum allowed value depends on the type of resource that you are using. If you provide a value that is lower than what a resource can accept, an error occurs. In which case, the error message will provide the minimum value that the resource can accept.</p>"
         },
         "MaxCapacity":{
           "shape":"ResourceCapacity",
@@ -1286,7 +1287,7 @@
         },
         "ScalingAdjustment":{
           "shape":"ScalingAdjustment",
-          "documentation":"<p>The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a positive value.</p>"
+          "documentation":"<p>The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a non-negative value.</p>"
         }
       },
       "documentation":"<p>Represents a step adjustment for a <a href=\"https://docs.aws.amazon.com/autoscaling/application/APIReference/API_StepScalingPolicyConfiguration.html\">StepScalingPolicyConfiguration</a>. Describes an adjustment based on the difference between the value of the aggregated CloudWatch metric and the breach threshold that you've defined for the alarm. </p> <p>For the following examples, suppose that you have an alarm with a breach threshold of 50:</p> <ul> <li> <p>To initiate the adjustment when the metric is greater than or equal to 50 and less than 60, specify a lower bound of <code>0</code> and an upper bound of <code>10</code>.</p> </li> <li> <p>To initiate the adjustment when the metric is greater than 40 and less than or equal to 50, specify a lower bound of <code>-10</code> and an upper bound of <code>0</code>.</p> </li> </ul> <p>There are a few rules for the step adjustments for your step policy:</p> <ul> <li> <p>The ranges of your step adjustments can't overlap or have a gap.</p> </li> <li> <p>At most one step adjustment can have a null lower bound. If one step adjustment has a negative lower bound, then there must be a step adjustment with a null lower bound.</p> </li> <li> <p>At most one step adjustment can have a null upper bound. If one step adjustment has a positive upper bound, then there must be a step adjustment with a null upper bound.</p> </li> <li> <p>The upper and lower bound can't be null in the same step adjustment.</p> </li> </ul>"
@@ -1312,14 +1313,14 @@
         },
         "Cooldown":{
           "shape":"Cooldown",
-          "documentation":"<p>The amount of time, in seconds, to wait for a previous scaling activity to take effect. </p> <p>With scale-out policies, the intention is to continuously (but not excessively) scale out. After Application Auto Scaling successfully scales out using a step scaling policy, it starts to calculate the cooldown time. The scaling policy won't increase the desired capacity again unless either a larger scale out is triggered or the cooldown period ends. While the cooldown period is in effect, capacity added by the initiating scale-out activity is calculated as part of the desired capacity for the next scale-out activity. For example, when an alarm triggers a step scaling policy to increase the capacity by 2, the scaling activity completes successfully, and a cooldown period starts. If the alarm triggers again during the cooldown period but at a more aggressive step adjustment of 3, the previous increase of 2 is considered part of the current capacity. Therefore, only 1 is added to the capacity.</p> <p>With scale-in policies, the intention is to scale in conservatively to protect your application’s availability, so scale-in activities are blocked until the cooldown period has expired. However, if another alarm triggers a scale-out activity during the cooldown period after a scale-in activity, Application Auto Scaling scales out the target immediately. In this case, the cooldown period for the scale-in activity stops and doesn't complete.</p> <p>Application Auto Scaling provides a default value of 600 for Amazon ElastiCache replication groups and a default value of 300 for the following scalable targets:</p> <ul> <li> <p>AppStream 2.0 fleets</p> </li> <li> <p>Aurora DB clusters</p> </li> <li> <p>ECS services</p> </li> <li> <p>EMR clusters</p> </li> <li> <p> Neptune clusters</p> </li> <li> <p>SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>SageMaker endpoint variants</p> </li> <li> <p>Spot Fleets</p> </li> <li> <p>Custom resources</p> </li> </ul> <p>For all other scalable targets, the default value is 0:</p> <ul> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>DynamoDB tables and global secondary indexes</p> </li> <li> <p>Amazon Keyspaces tables</p> </li> <li> <p>Lambda provisioned concurrency</p> </li> <li> <p>Amazon MSK broker storage</p> </li> </ul>"
+          "documentation":"<p>The amount of time, in seconds, to wait for a previous scaling activity to take effect. If not specified, the default value is 300. For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html#step-scaling-cooldown\">Cooldown period</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
         },
         "MetricAggregationType":{
           "shape":"MetricAggregationType",
           "documentation":"<p>The aggregation type for the CloudWatch metrics. Valid values are <code>Minimum</code>, <code>Maximum</code>, and <code>Average</code>. If the aggregation type is null, the value is treated as <code>Average</code>.</p>"
         }
       },
-      "documentation":"<p>Represents a step scaling policy configuration to use with Application Auto Scaling.</p>"
+      "documentation":"<p>Represents a step scaling policy configuration to use with Application Auto Scaling.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html\">Step scaling policies</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
     },
     "SuspendedState":{
       "type":"structure",
@@ -1523,18 +1524,18 @@
         },
         "ScaleOutCooldown":{
           "shape":"Cooldown",
-          "documentation":"<p>The amount of time, in seconds, to wait for a previous scale-out activity to take effect.</p> <p>With the <i>scale-out cooldown period</i>, the intention is to continuously (but not excessively) scale out. After Application Auto Scaling successfully scales out using a target tracking scaling policy, it starts to calculate the cooldown time. The scaling policy won't increase the desired capacity again unless either a larger scale out is triggered or the cooldown period ends. While the cooldown period is in effect, the capacity added by the initiating scale-out activity is calculated as part of the desired capacity for the next scale-out activity.</p> <p>Application Auto Scaling provides a default value of 600 for Amazon ElastiCache replication groups and a default value of 300 for the following scalable targets:</p> <ul> <li> <p>AppStream 2.0 fleets</p> </li> <li> <p>Aurora DB clusters</p> </li> <li> <p>ECS services</p> </li> <li> <p>EMR clusters</p> </li> <li> <p> Neptune clusters</p> </li> <li> <p>SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>SageMaker endpoint variants</p> </li> <li> <p>Spot Fleets</p> </li> <li> <p>Custom resources</p> </li> </ul> <p>For all other scalable targets, the default value is 0:</p> <ul> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>DynamoDB tables and global secondary indexes</p> </li> <li> <p>Amazon Keyspaces tables</p> </li> <li> <p>Lambda provisioned concurrency</p> </li> <li> <p>Amazon MSK broker storage</p> </li> </ul>"
+          "documentation":"<p>The amount of time, in seconds, to wait for a previous scale-out activity to take effect. For more information and for default values, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html#target-tracking-cooldown\">Define cooldown periods</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
         },
         "ScaleInCooldown":{
           "shape":"Cooldown",
-          "documentation":"<p>The amount of time, in seconds, after a scale-in activity completes before another scale-in activity can start.</p> <p>With the <i>scale-in cooldown period</i>, the intention is to scale in conservatively to protect your application’s availability, so scale-in activities are blocked until the cooldown period has expired. However, if another alarm triggers a scale-out activity during the scale-in cooldown period, Application Auto Scaling scales out the target immediately. In this case, the scale-in cooldown period stops and doesn't complete.</p> <p>Application Auto Scaling provides a default value of 600 for Amazon ElastiCache replication groups and a default value of 300 for the following scalable targets:</p> <ul> <li> <p>AppStream 2.0 fleets</p> </li> <li> <p>Aurora DB clusters</p> </li> <li> <p>ECS services</p> </li> <li> <p>EMR clusters</p> </li> <li> <p> Neptune clusters</p> </li> <li> <p>SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>SageMaker endpoint variants</p> </li> <li> <p>Spot Fleets</p> </li> <li> <p>Custom resources</p> </li> </ul> <p>For all other scalable targets, the default value is 0:</p> <ul> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>DynamoDB tables and global secondary indexes</p> </li> <li> <p>Amazon Keyspaces tables</p> </li> <li> <p>Lambda provisioned concurrency</p> </li> <li> <p>Amazon MSK broker storage</p> </li> </ul>"
+          "documentation":"<p>The amount of time, in seconds, after a scale-in activity completes before another scale-in activity can start. For more information and for default values, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html#target-tracking-cooldown\">Define cooldown periods</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
         },
         "DisableScaleIn":{
           "shape":"DisableScaleIn",
           "documentation":"<p>Indicates whether scale in by the target tracking scaling policy is disabled. If the value is <code>true</code>, scale in is disabled and the target tracking scaling policy won't remove capacity from the scalable target. Otherwise, scale in is enabled and the target tracking scaling policy can remove capacity from the scalable target. The default value is <code>false</code>.</p>"
         }
       },
-      "documentation":"<p>Represents a target tracking scaling policy configuration to use with Application Auto Scaling.</p>"
+      "documentation":"<p>Represents a target tracking scaling policy configuration to use with Application Auto Scaling.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html\">Target tracking scaling policies</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
     },
     "TimestampType":{"type":"timestamp"},
     "TooManyTagsException":{
@@ -1584,5 +1585,5 @@
       "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\r\\n\\t]*"
     }
   },
-  "documentation":"<p>With Application Auto Scaling, you can configure automatic scaling for the following resources:</p> <ul> <li> <p>Amazon AppStream 2.0 fleets</p> </li> <li> <p>Amazon Aurora Replicas</p> </li> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>Amazon DynamoDB tables and global secondary indexes throughput capacity</p> </li> <li> <p>Amazon ECS services</p> </li> <li> <p>Amazon ElastiCache for Redis clusters (replication groups)</p> </li> <li> <p>Amazon EMR clusters</p> </li> <li> <p>Amazon Keyspaces (for Apache Cassandra) tables</p> </li> <li> <p>Lambda function provisioned concurrency</p> </li> <li> <p>Amazon Managed Streaming for Apache Kafka broker storage</p> </li> <li> <p>Amazon Neptune clusters</p> </li> <li> <p>Amazon SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>Amazon SageMaker endpoint variants</p> </li> <li> <p>Spot Fleets (Amazon EC2)</p> </li> <li> <p>Custom resources provided by your own applications or services</p> </li> </ul> <p>To learn more about Application Auto Scaling, see the <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html\">Application Auto Scaling User Guide</a>.</p> <p> <b>API Summary</b> </p> <p>The Application Auto Scaling service API includes three key sets of actions: </p> <ul> <li> <p>Register and manage scalable targets - Register Amazon Web Services or custom resources as scalable targets (a resource that Application Auto Scaling can scale), set minimum and maximum capacity limits, and retrieve information on existing scalable targets.</p> </li> <li> <p>Configure and manage automatic scaling - Define scaling policies to dynamically scale your resources in response to CloudWatch alarms, schedule one-time or recurring scaling actions, and retrieve your recent scaling activity history.</p> </li> <li> <p>Suspend and resume scaling - Temporarily suspend and later resume automatic scaling by calling the <a href=\"https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html\">RegisterScalableTarget</a> API action for any Application Auto Scaling scalable target. You can suspend and resume (individually or in combination) scale-out activities that are triggered by a scaling policy, scale-in activities that are triggered by a scaling policy, and scheduled scaling.</p> </li> </ul>"
+  "documentation":"<p>With Application Auto Scaling, you can configure automatic scaling for the following resources:</p> <ul> <li> <p>Amazon AppStream 2.0 fleets</p> </li> <li> <p>Amazon Aurora Replicas</p> </li> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>Amazon DynamoDB tables and global secondary indexes throughput capacity</p> </li> <li> <p>Amazon ECS services</p> </li> <li> <p>Amazon ElastiCache for Redis clusters (replication groups)</p> </li> <li> <p>Amazon EMR clusters</p> </li> <li> <p>Amazon Keyspaces (for Apache Cassandra) tables</p> </li> <li> <p>Lambda function provisioned concurrency</p> </li> <li> <p>Amazon Managed Streaming for Apache Kafka broker storage</p> </li> <li> <p>Amazon Neptune clusters</p> </li> <li> <p>Amazon SageMaker endpoint variants</p> </li> <li> <p>Amazon SageMaker Serverless endpoint provisioned concurrency</p> </li> <li> <p>Spot Fleets (Amazon EC2)</p> </li> <li> <p>Custom resources provided by your own applications or services</p> </li> </ul> <p>To learn more about Application Auto Scaling, see the <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html\">Application Auto Scaling User Guide</a>.</p> <p> <b>API Summary</b> </p> <p>The Application Auto Scaling service API includes three key sets of actions: </p> <ul> <li> <p>Register and manage scalable targets - Register Amazon Web Services or custom resources as scalable targets (a resource that Application Auto Scaling can scale), set minimum and maximum capacity limits, and retrieve information on existing scalable targets.</p> </li> <li> <p>Configure and manage automatic scaling - Define scaling policies to dynamically scale your resources in response to CloudWatch alarms, schedule one-time or recurring scaling actions, and retrieve your recent scaling activity history.</p> </li> <li> <p>Suspend and resume scaling - Temporarily suspend and later resume automatic scaling by calling the <a href=\"https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html\">RegisterScalableTarget</a> API action for any Application Auto Scaling scalable target. You can suspend and resume (individually or in combination) scale-out activities that are triggered by a scaling policy, scale-in activities that are triggered by a scaling policy, and scheduled scaling.</p> </li> </ul>"
 }
diff --git a/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json b/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json
index 2a14c1314..7e6b2d6bc 100644
--- a/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json
+++ b/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json
@@ -32,13 +32,12 @@
         {
             "conditions": [
                 {
-                    "fn": "aws.partition",
+                    "fn": "isSet",
                     "argv": [
                         {
-                            "ref": "Region"
+                            "ref": "Endpoint"
                         }
-                    ],
-                    "assign": "PartitionResult"
+                    ]
                 }
             ],
             "type": "tree",
@@ -46,23 +45,20 @@
                 {
                     "conditions": [
                         {
-                            "fn": "isSet",
+                            "fn": "booleanEquals",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
-                                }
+                                    "ref": "UseFIPS"
+                                },
+                                true
                             ]
-                        },
-                        {
-                            "fn": "parseURL",
-                            "argv": [
-                                {
-                                    "ref": "Endpoint"
-                                }
-                            ],
-                            "assign": "url"
                         }
                     ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
                     "type": "tree",
                     "rules": [
                         {
@@ -71,67 +67,42 @@
                                     "fn": "booleanEquals",
                                     "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "ref": "UseDualStack"
                                         },
                                         true
                                     ]
                                 }
                             ],
-                            "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
                             "type": "error"
                         },
                         {
                             "conditions": [],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                                    "type": "error"
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": {
-                                            "ref": "Endpoint"
-                                        },
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ]
-                },
+                }
+            ]
+        },
+        {
+            "conditions": [],
+            "type": "tree",
+            "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        },
-                        {
-                            "fn": "booleanEquals",
+                            "fn": "isSet",
                             "argv": [
                                 {
-                                    "ref": "UseDualStack"
-                                },
-                                true
+                                    "ref": "Region"
+                                }
                             ]
                         }
                     ],
@@ -140,90 +111,215 @@
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
-                                        true,
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "type": "tree",
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "supportsFIPS"
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
+                                    ],
+                                    "type": "tree",
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "type": "tree",
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "type": "tree",
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://codepipeline-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ]
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
                                     ]
                                 },
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "supportsDualStack"
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "type": "tree",
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "type": "tree",
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "type": "tree",
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://codepipeline-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ]
+                                                }
                                             ]
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
                                         }
                                     ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://codepipeline-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
                                 },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseDualStack"
                                                 },
-                                                "supportsFIPS"
+                                                true
                                             ]
                                         }
+                                    ],
+                                    "type": "tree",
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "type": "tree",
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "type": "tree",
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://codepipeline.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ]
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
                                     ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
+                                },
                                 {
                                     "conditions": [],
                                     "type": "tree",
@@ -231,7 +327,7 @@
                                         {
                                             "conditions": [],
                                             "endpoint": {
-                                                "url": "https://codepipeline-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                "url": "https://codepipeline.{Region}.{PartitionResult#dnsSuffix}",
                                                 "properties": {},
                                                 "headers": {}
                                             },
@@ -240,74 +336,13 @@
                                     ]
                                 }
                             ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "FIPS is enabled but this partition does not support FIPS",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
-                                        {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "supportsDualStack"
-                                            ]
-                                        }
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://codepipeline.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "DualStack is enabled but this partition does not support DualStack",
-                            "type": "error"
                         }
                     ]
                 },
                 {
                     "conditions": [],
-                    "endpoint": {
-                        "url": "https://codepipeline.{Region}.{PartitionResult#dnsSuffix}",
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ]
         }
diff --git a/botocore/data/codepipeline/2015-07-09/service-2.json b/botocore/data/codepipeline/2015-07-09/service-2.json
index 9f696d57d..47c745552 100644
--- a/botocore/data/codepipeline/2015-07-09/service-2.json
+++ b/botocore/data/codepipeline/2015-07-09/service-2.json
@@ -59,7 +59,7 @@
         {"shape":"InvalidTagsException"},
         {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Creates a new custom action that can be used in all pipelines associated with the AWS account. Only used for custom actions.</p>"
+      "documentation":"<p>Creates a new custom action that can be used in all pipelines associated with the Amazon Web Services account. Only used for custom actions.</p>"
     },
     "CreatePipeline":{
       "name":"CreatePipeline",
@@ -121,7 +121,7 @@
         {"shape":"ValidationException"},
         {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Deletes a previously created webhook by name. Deleting the webhook stops AWS CodePipeline from starting a pipeline every time an external event occurs. The API returns successfully when trying to delete a webhook that is already deleted. If a deleted webhook is re-created by calling PutWebhook with the same name, it will have a different URL.</p>"
+      "documentation":"<p>Deletes a previously created webhook by name. Deleting the webhook stops CodePipeline from starting a pipeline every time an external event occurs. The API returns successfully when trying to delete a webhook that is already deleted. If a deleted webhook is re-created by calling PutWebhook with the same name, it will have a different URL.</p>"
     },
     "DeregisterWebhookWithThirdParty":{
       "name":"DeregisterWebhookWithThirdParty",
@@ -191,7 +191,7 @@
         {"shape":"ValidationException"},
         {"shape":"JobNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a job. Used for custom actions only.</p> <important> <p>When this API is called, AWS CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.</p> </important>"
+      "documentation":"<p>Returns information about a job. Used for custom actions only.</p> <important> <p>When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.</p> </important>"
     },
     "GetPipeline":{
       "name":"GetPipeline",
@@ -251,7 +251,7 @@
         {"shape":"InvalidClientTokenException"},
         {"shape":"InvalidJobException"}
       ],
-      "documentation":"<p>Requests the details of a job for a third party action. Used for partner actions only.</p> <important> <p>When this API is called, AWS CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.</p> </important>"
+      "documentation":"<p>Requests the details of a job for a third party action. Used for partner actions only.</p> <important> <p>When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.</p> </important>"
     },
     "ListActionExecutions":{
       "name":"ListActionExecutions",
@@ -281,7 +281,7 @@
         {"shape":"ValidationException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Gets a summary of all AWS CodePipeline action types associated with your account.</p>"
+      "documentation":"<p>Gets a summary of all CodePipeline action types associated with your account.</p>"
     },
     "ListPipelineExecutions":{
       "name":"ListPipelineExecutions",
@@ -340,7 +340,7 @@
         {"shape":"ValidationException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Gets a listing of all the webhooks in this AWS Region for this account. The output lists all webhooks and includes the webhook URL and ARN and the configuration for each webhook.</p>"
+      "documentation":"<p>Gets a listing of all the webhooks in this Amazon Web Services Region for this account. The output lists all webhooks and includes the webhook URL and ARN and the configuration for each webhook.</p>"
     },
     "PollForJobs":{
       "name":"PollForJobs",
@@ -354,7 +354,7 @@
         {"shape":"ValidationException"},
         {"shape":"ActionTypeNotFoundException"}
       ],
-      "documentation":"<p>Returns information about any jobs for AWS CodePipeline to act on. <code>PollForJobs</code> is valid only for action types with \"Custom\" in the owner field. If the action type contains \"AWS\" or \"ThirdParty\" in the owner field, the <code>PollForJobs</code> action returns an error.</p> <important> <p>When this API is called, AWS CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.</p> </important>"
+      "documentation":"<p>Returns information about any jobs for CodePipeline to act on. <code>PollForJobs</code> is valid only for action types with \"Custom\" in the owner field. If the action type contains <code>AWS</code> or <code>ThirdParty</code> in the owner field, the <code>PollForJobs</code> action returns an error.</p> <important> <p>When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.</p> </important>"
     },
     "PollForThirdPartyJobs":{
       "name":"PollForThirdPartyJobs",
@@ -368,7 +368,7 @@
         {"shape":"ActionTypeNotFoundException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Determines whether there are any third party jobs for a job worker to act on. Used for partner actions only.</p> <important> <p>When this API is called, AWS CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts.</p> </important>"
+      "documentation":"<p>Determines whether there are any third party jobs for a job worker to act on. Used for partner actions only.</p> <important> <p>When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts.</p> </important>"
     },
     "PutActionRevision":{
       "name":"PutActionRevision",
@@ -384,7 +384,7 @@
         {"shape":"ActionNotFoundException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Provides information to AWS CodePipeline about new revisions to a source.</p>"
+      "documentation":"<p>Provides information to CodePipeline about new revisions to a source.</p>"
     },
     "PutApprovalResult":{
       "name":"PutApprovalResult",
@@ -402,7 +402,7 @@
         {"shape":"ActionNotFoundException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Provides the response to a manual approval request to AWS CodePipeline. Valid responses include Approved and Rejected.</p>"
+      "documentation":"<p>Provides the response to a manual approval request to CodePipeline. Valid responses include Approved and Rejected.</p>"
     },
     "PutJobFailureResult":{
       "name":"PutJobFailureResult",
@@ -580,7 +580,7 @@
         {"shape":"InvalidTagsException"},
         {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Removes tags from an AWS resource.</p>"
+      "documentation":"<p>Removes tags from an Amazon Web Services resource.</p>"
     },
     "UpdateActionType":{
       "name":"UpdateActionType",
@@ -642,7 +642,7 @@
           "documentation":"<p>The token for the session.</p>"
         }
       },
-      "documentation":"<p>Represents an AWS session credentials object. These credentials are temporary credentials that are issued by AWS Secure Token Service (STS). They can be used to access input and output artifacts in the S3 bucket used to store artifact for the pipeline in AWS CodePipeline.</p>",
+      "documentation":"<p>Represents an Amazon Web Services session credentials object. These credentials are temporary credentials that are issued by Amazon Web Services Secure Token Service (STS). They can be used to access input and output artifacts in the S3 bucket used to store artifact for the pipeline in CodePipeline.</p>",
       "sensitive":true
     },
     "AccessKeyId":{
@@ -666,7 +666,7 @@
         },
         "nonce":{
           "shape":"Nonce",
-          "documentation":"<p>A system-generated random number that AWS CodePipeline uses to ensure that the job is being worked on by only one job worker. Get this number from the response of the <a>PollForJobs</a> request that returned this job.</p>"
+          "documentation":"<p>A system-generated random number that CodePipeline uses to ensure that the job is being worked on by only one job worker. Get this number from the response of the <a>PollForJobs</a> request that returned this job.</p>"
         }
       },
       "documentation":"<p>Represents the input of an AcknowledgeJob action.</p>"
@@ -695,7 +695,7 @@
         },
         "nonce":{
           "shape":"Nonce",
-          "documentation":"<p>A system-generated random number that AWS CodePipeline uses to ensure that the job is being worked on by only one job worker. Get this number from the response to a <a>GetThirdPartyJobDetails</a> request.</p>"
+          "documentation":"<p>A system-generated random number that CodePipeline uses to ensure that the job is being worked on by only one job worker. Get this number from the response to a <a>GetThirdPartyJobDetails</a> request.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
@@ -844,7 +844,7 @@
         },
         "configuration":{
           "shape":"ActionConfigurationMap",
-          "documentation":"<p>The action's configuration. These are key-value pairs that specify input values for an action. For more information, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#action-requirements\">Action Structure Requirements in CodePipeline</a>. For the list of configuration properties for the AWS CloudFormation action type in CodePipeline, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-action-reference.html\">Configuration Properties Reference</a> in the <i>AWS CloudFormation User Guide</i>. For template snippets with examples, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-parameter-override-functions.html\">Using Parameter Override Functions with CodePipeline Pipelines</a> in the <i>AWS CloudFormation User Guide</i>.</p> <p>The values can be represented in either JSON or YAML format. For example, the JSON configuration item format is as follows: </p> <p> <i>JSON:</i> </p> <p> <code>\"Configuration\" : { Key : Value },</code> </p>"
+          "documentation":"<p>The action's configuration. These are key-value pairs that specify input values for an action. For more information, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#action-requirements\">Action Structure Requirements in CodePipeline</a>. For the list of configuration properties for the CloudFormation action type in CodePipeline, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-action-reference.html\">Configuration Properties Reference</a> in the <i>CloudFormation User Guide</i>. For template snippets with examples, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-parameter-override-functions.html\">Using Parameter Override Functions with CodePipeline Pipelines</a> in the <i>CloudFormation User Guide</i>.</p> <p>The values can be represented in either JSON or YAML format. For example, the JSON configuration item format is as follows: </p> <p> <i>JSON:</i> </p> <p> <code>\"Configuration\" : { Key : Value },</code> </p>"
         },
         "outputArtifacts":{
           "shape":"OutputArtifactList",
@@ -860,7 +860,7 @@
         },
         "region":{
           "shape":"AWSRegionName",
-          "documentation":"<p>The action declaration's AWS Region, such as us-east-1.</p>"
+          "documentation":"<p>The action declaration's Amazon Web Services Region, such as us-east-1.</p>"
         },
         "namespace":{
           "shape":"ActionNamespace",
@@ -902,7 +902,7 @@
         },
         "externalExecutionUrl":{
           "shape":"Url",
-          "documentation":"<p>The URL of a resource external to AWS that is used when running the action (for example, an external repository URL).</p>"
+          "documentation":"<p>The URL of a resource external to Amazon Web Services that is used when running the action (for example, an external repository URL).</p>"
         },
         "percentComplete":{
           "shape":"Percentage",
@@ -910,7 +910,7 @@
         },
         "errorDetails":{
           "shape":"ErrorDetails",
-          "documentation":"<p>The details of an error returned by a URL external to AWS.</p>"
+          "documentation":"<p>The details of an error returned by a URL external to Amazon Web Services.</p>"
         }
       },
       "documentation":"<p>Represents information about the run of an action.</p>"
@@ -994,7 +994,7 @@
         },
         "region":{
           "shape":"AWSRegionName",
-          "documentation":"<p>The AWS Region for the action, such as us-east-1.</p>"
+          "documentation":"<p>The Amazon Web Services Region for the action, such as us-east-1.</p>"
         },
         "inputArtifacts":{
           "shape":"ArtifactDetailList",
@@ -1266,7 +1266,7 @@
         },
         "policyStatementsTemplate":{
           "shape":"PolicyStatementsTemplate",
-          "documentation":"<p>The policy statement that specifies the permissions in the CodePipeline customer’s account that are needed to successfully run an action.</p> <p>To grant permission to another account, specify the account ID as the Principal, a domain-style identifier defined by the service, for example <code>codepipeline.amazonaws.com</code>.</p> <note> <p>The size of the passed JSON policy document cannot exceed 2048 characters.</p> </note>"
+          "documentation":"<p>The policy statement that specifies the permissions in the CodePipeline customer account that are needed to successfully run an action.</p> <p>To grant permission to another account, specify the account ID as the Principal, a domain-style identifier defined by the service, for example <code>codepipeline.amazonaws.com</code>.</p> <note> <p>The size of the passed JSON policy document cannot exceed 2048 characters.</p> </note>"
         },
         "jobTimeout":{
           "shape":"JobTimeout",
@@ -1294,7 +1294,7 @@
         },
         "provider":{
           "shape":"ActionProvider",
-          "documentation":"<p>The provider of the service being called by the action. Valid providers are determined by the action category. For example, an action in the Deploy category type might have a provider of AWS CodeDeploy, which would be specified as CodeDeploy. For more information, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#actions-valid-providers\">Valid Action Types and Providers in CodePipeline</a>.</p>"
+          "documentation":"<p>The provider of the service being called by the action. Valid providers are determined by the action category. For example, an action in the Deploy category type might have a provider of CodeDeploy, which would be specified as <code>CodeDeploy</code>. For more information, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#actions-valid-providers\">Valid Action Types and Providers in CodePipeline</a>.</p>"
         },
         "version":{
           "shape":"Version",
@@ -1352,7 +1352,7 @@
       "members":{
         "allowedAccounts":{
           "shape":"AllowedAccounts",
-          "documentation":"<p>A list of AWS account IDs with access to use the action type in their pipelines.</p>"
+          "documentation":"<p>A list of Amazon Web Services account IDs with access to use the action type in their pipelines.</p>"
         }
       },
       "documentation":"<p>Details identifying the users with permissions to use the action type.</p>"
@@ -1407,15 +1407,15 @@
         },
         "entityUrlTemplate":{
           "shape":"UrlTemplate",
-          "documentation":"<p>The URL returned to the AWS CodePipeline console that provides a deep link to the resources of the external system, such as the configuration page for an AWS CodeDeploy deployment group. This link is provided as part of the action display in the pipeline.</p>"
+          "documentation":"<p>The URL returned to the CodePipeline console that provides a deep link to the resources of the external system, such as the configuration page for a CodeDeploy deployment group. This link is provided as part of the action display in the pipeline.</p>"
         },
         "executionUrlTemplate":{
           "shape":"UrlTemplate",
-          "documentation":"<p>The URL returned to the AWS CodePipeline console that contains a link to the top-level landing page for the external system, such as the console page for AWS CodeDeploy. This link is shown on the pipeline view page in the AWS CodePipeline console and provides a link to the execution entity of the external action.</p>"
+          "documentation":"<p>The URL returned to the CodePipeline console that contains a link to the top-level landing page for the external system, such as the console page for CodeDeploy. This link is shown on the pipeline view page in the CodePipeline console and provides a link to the execution entity of the external action.</p>"
         },
         "revisionUrlTemplate":{
           "shape":"UrlTemplate",
-          "documentation":"<p>The URL returned to the AWS CodePipeline console that contains a link to the page where customers can update or change the configuration of the external action.</p>"
+          "documentation":"<p>The URL returned to the CodePipeline console that contains a link to the page where customers can update or change the configuration of the external action.</p>"
         }
       },
       "documentation":"<p>Returns information about the settings for an action type.</p>"
@@ -1509,7 +1509,7 @@
           "documentation":"<p>The location of an artifact.</p>"
         }
       },
-      "documentation":"<p>Represents information about an artifact that is worked on by actions in the pipeline.</p>"
+      "documentation":"<p>Artifacts are the files that are worked on by actions in the pipeline. See the action configuration for each action for details about artifact parameters. For example, the S3 source action artifact is a file name (or file path), and the files are generally provided as a ZIP file. Example artifact name: SampleApp_Windows.zip</p>"
     },
     "ArtifactDetail":{
       "type":"structure",
@@ -1592,7 +1592,7 @@
         },
         "revisionSummary":{
           "shape":"RevisionSummary",
-          "documentation":"<p>Summary information about the most recent revision of the artifact. For GitHub and AWS CodeCommit repositories, the commit message. For Amazon S3 buckets or actions, the user-provided content of a <code>codepipeline-artifact-revision-summary</code> key specified in the object metadata.</p>"
+          "documentation":"<p>Summary information about the most recent revision of the artifact. For GitHub and CodeCommit repositories, the commit message. For Amazon S3 buckets or actions, the user-provided content of a <code>codepipeline-artifact-revision-summary</code> key specified in the object metadata.</p>"
         },
         "created":{
           "shape":"Timestamp",
@@ -1600,7 +1600,7 @@
         },
         "revisionUrl":{
           "shape":"Url",
-          "documentation":"<p>The commit ID for the artifact revision. For artifacts stored in GitHub or AWS CodeCommit repositories, the commit ID is linked to a commit details page.</p>"
+          "documentation":"<p>The commit ID for the artifact revision. For artifacts stored in GitHub or CodeCommit repositories, the commit ID is linked to a commit details page.</p>"
         }
       },
       "documentation":"<p>Represents revision details of an artifact. </p>"
@@ -1622,11 +1622,11 @@
         },
         "location":{
           "shape":"ArtifactStoreLocation",
-          "documentation":"<p>The S3 bucket used for storing the artifacts for a pipeline. You can specify the name of an S3 bucket but not a folder in the bucket. A folder to contain the pipeline artifacts is created for you based on the name of the pipeline. You can use any S3 bucket in the same AWS Region as the pipeline to store your pipeline artifacts.</p>"
+          "documentation":"<p>The S3 bucket used for storing the artifacts for a pipeline. You can specify the name of an S3 bucket but not a folder in the bucket. A folder to contain the pipeline artifacts is created for you based on the name of the pipeline. You can use any S3 bucket in the same Amazon Web Services Region as the pipeline to store your pipeline artifacts.</p>"
         },
         "encryptionKey":{
           "shape":"EncryptionKey",
-          "documentation":"<p>The encryption key used to encrypt the data in the artifact store, such as an AWS Key Management Service (AWS KMS) key. If this is undefined, the default key for Amazon S3 is used.</p>"
+          "documentation":"<p>The encryption key used to encrypt the data in the artifact store, such as an Amazon Web Services Key Management Service key. If this is undefined, the default key for Amazon S3 is used.</p>"
         }
       },
       "documentation":"<p>The S3 bucket where artifacts for the pipeline are stored.</p> <note> <p>You must include either <code>artifactStore</code> or <code>artifactStores</code> in your pipeline, but you cannot use both. If you create a cross-region action in your pipeline, you must use <code>artifactStores</code>.</p> </note>"
@@ -1727,7 +1727,7 @@
         },
         "provider":{
           "shape":"ActionProvider",
-          "documentation":"<p>The provider of the service used in the custom action, such as AWS CodeDeploy.</p>"
+          "documentation":"<p>The provider of the service used in the custom action, such as CodeDeploy.</p>"
         },
         "version":{
           "shape":"Version",
@@ -1840,7 +1840,7 @@
         },
         "provider":{
           "shape":"ActionProvider",
-          "documentation":"<p>The provider of the service used in the custom action, such as AWS CodeDeploy.</p>"
+          "documentation":"<p>The provider of the service used in the custom action, such as CodeDeploy.</p>"
         },
         "version":{
           "shape":"Version",
@@ -1969,14 +1969,14 @@
       "members":{
         "id":{
           "shape":"EncryptionKeyId",
-          "documentation":"<p>The ID used to identify the key. For an AWS KMS key, you can use the key ID, the key ARN, or the alias ARN.</p> <note> <p>Aliases are recognized only in the account that created the customer master key (CMK). For cross-account actions, you can only use the key ID or key ARN to identify the key.</p> </note>"
+          "documentation":"<p>The ID used to identify the key. For an Amazon Web Services KMS key, you can use the key ID, the key ARN, or the alias ARN.</p> <note> <p>Aliases are recognized only in the account that created the KMS key. For cross-account actions, you can only use the key ID or key ARN to identify the key. Cross-account actions involve using the role from the other account (AccountB), so specifying the key ID will use the key from the other account (AccountB).</p> </note>"
         },
         "type":{
           "shape":"EncryptionKeyType",
-          "documentation":"<p>The type of encryption key, such as an AWS Key Management Service (AWS KMS) key. When creating or updating a pipeline, the value must be set to 'KMS'.</p>"
+          "documentation":"<p>The type of encryption key, such as an Amazon Web Services KMS key. When creating or updating a pipeline, the value must be set to 'KMS'.</p>"
         }
       },
-      "documentation":"<p>Represents information about the key used to encrypt data in the artifact store, such as an AWS Key Management Service (AWS KMS) key.</p>"
+      "documentation":"<p>Represents information about the key used to encrypt data in the artifact store, such as an Amazon Web Services Key Management Service (Key Management Service) key.</p>"
     },
     "EncryptionKeyId":{
       "type":"string",
@@ -1999,7 +1999,7 @@
           "documentation":"<p>The text of the error message.</p>"
         }
       },
-      "documentation":"<p>Represents information about an error in AWS CodePipeline.</p>"
+      "documentation":"<p>Represents information about an error in CodePipeline.</p>"
     },
     "ExecutionDetails":{
       "type":"structure",
@@ -2010,7 +2010,7 @@
         },
         "externalExecutionId":{
           "shape":"ExecutionId",
-          "documentation":"<p>The system-generated unique ID of this action used to identify this job worker in any external systems, such as AWS CodeDeploy.</p>"
+          "documentation":"<p>The system-generated unique ID of this action used to identify this job worker in any external systems, such as CodeDeploy.</p>"
         },
         "percentComplete":{
           "shape":"Percentage",
@@ -2190,7 +2190,7 @@
       "members":{
         "name":{
           "shape":"PipelineName",
-          "documentation":"<p>The name of the pipeline for which you want to get information. Pipeline names must be unique under an AWS user account.</p>"
+          "documentation":"<p>The name of the pipeline for which you want to get information. Pipeline names must be unique in an Amazon Web Services account.</p>"
         },
         "version":{
           "shape":"PipelineVersion",
@@ -2284,7 +2284,7 @@
       "members":{
         "name":{
           "shape":"ArtifactName",
-          "documentation":"<p>The name of the artifact to be worked on (for example, \"My App\").</p> <p>The input artifact of an action must exactly match the output artifact declared in a preceding action, but the input artifact does not have to be the next action in strict sequence from the action that provided the output artifact. Actions in parallel can declare different output artifacts, which are in turn consumed by different following actions.</p>"
+          "documentation":"<p>The name of the artifact to be worked on (for example, \"My App\").</p> <p>Artifacts are the files that are worked on by actions in the pipeline. See the action configuration for each action for details about artifact parameters. For example, the S3 source action input artifact is a file name (or file path), and the files are generally provided as a ZIP file. Example artifact name: SampleApp_Windows.zip</p> <p>The input artifact of an action must exactly match the output artifact declared in a preceding action, but the input artifact does not have to be the next action in strict sequence from the action that provided the output artifact. Actions in parallel can declare different output artifacts, which are in turn consumed by different following actions.</p>"
         }
       },
       "documentation":"<p>Represents information about an artifact to be worked on, such as a test or build artifact.</p>"
@@ -2406,11 +2406,11 @@
         },
         "nonce":{
           "shape":"Nonce",
-          "documentation":"<p>A system-generated random number that AWS CodePipeline uses to ensure that the job is being worked on by only one job worker. Use this number in an <a>AcknowledgeJob</a> request.</p>"
+          "documentation":"<p>A system-generated random number that CodePipeline uses to ensure that the job is being worked on by only one job worker. Use this number in an <a>AcknowledgeJob</a> request.</p>"
         },
         "accountId":{
           "shape":"AccountId",
-          "documentation":"<p>The ID of the AWS account to use when performing the job.</p>"
+          "documentation":"<p>The ID of the Amazon Web Services account to use when performing the job.</p>"
         }
       },
       "documentation":"<p>Represents information about a job.</p>"
@@ -2440,15 +2440,15 @@
         },
         "artifactCredentials":{
           "shape":"AWSSessionCredentials",
-          "documentation":"<p>Represents an AWS session credentials object. These credentials are temporary credentials that are issued by AWS Secure Token Service (STS). They can be used to access input and output artifacts in the S3 bucket used to store artifacts for the pipeline in AWS CodePipeline.</p>"
+          "documentation":"<p>Represents an Amazon Web Services session credentials object. These credentials are temporary credentials that are issued by Amazon Web Services Secure Token Service (STS). They can be used to access input and output artifacts in the S3 bucket used to store artifacts for the pipeline in CodePipeline.</p>"
         },
         "continuationToken":{
           "shape":"ContinuationToken",
-          "documentation":"<p>A system-generated token, such as a AWS CodeDeploy deployment ID, required by a job to continue the job asynchronously.</p>"
+          "documentation":"<p>A system-generated token, such as a deployment ID, required by a job to continue the job asynchronously.</p>"
         },
         "encryptionKey":{
           "shape":"EncryptionKey",
-          "documentation":"<p>Represents information about the key used to encrypt data in the artifact store, such as an AWS Key Management Service (AWS KMS) key. </p>"
+          "documentation":"<p>Represents information about the key used to encrypt data in the artifact store, such as an KMS key. </p>"
         }
       },
       "documentation":"<p>Represents other information about a job required for a job worker to complete the job.</p>"
@@ -2466,7 +2466,7 @@
         },
         "accountId":{
           "shape":"AccountId",
-          "documentation":"<p>The AWS account ID associated with the job.</p>"
+          "documentation":"<p>The Amazon Web Services account ID associated with the job.</p>"
         }
       },
       "documentation":"<p>Represents information about the details of a job.</p>"
@@ -2546,7 +2546,7 @@
       "type":"structure",
       "members":{
       },
-      "documentation":"<p>The number of pipelines associated with the AWS account has exceeded the limit allowed for the account.</p>",
+      "documentation":"<p>The number of pipelines associated with the Amazon Web Services account has exceeded the limit allowed for the account.</p>",
       "exception":true
     },
     "ListActionExecutionsInput":{
@@ -2831,7 +2831,7 @@
       "type":"structure",
       "members":{
       },
-      "documentation":"<p>The stage has failed in a later run of the pipeline and the pipelineExecutionId associated with the request is out of date.</p>",
+      "documentation":"<p>The stage has failed in a later run of the pipeline and the <code>pipelineExecutionId</code> associated with the request is out of date.</p>",
       "exception":true
     },
     "OutputArtifact":{
@@ -2916,7 +2916,7 @@
         },
         "roleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for AWS CodePipeline to use to either perform actions with no <code>actionRoleArn</code>, or to use to assume roles for actions with an <code>actionRoleArn</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for CodePipeline to use to either perform actions with no <code>actionRoleArn</code>, or to use to assume roles for actions with an <code>actionRoleArn</code>.</p>"
         },
         "artifactStore":{
           "shape":"ArtifactStore",
@@ -2924,7 +2924,7 @@
         },
         "artifactStores":{
           "shape":"ArtifactStoreMap",
-          "documentation":"<p>A mapping of <code>artifactStore</code> objects and their corresponding AWS Regions. There must be an artifact store for the pipeline Region and for each cross-region action in the pipeline.</p> <note> <p>You must include either <code>artifactStore</code> or <code>artifactStores</code> in your pipeline, but you cannot use both. If you create a cross-region action in your pipeline, you must use <code>artifactStores</code>.</p> </note>"
+          "documentation":"<p>A mapping of <code>artifactStore</code> objects and their corresponding Amazon Web Services Regions. There must be an artifact store for the pipeline Region and for each cross-region action in the pipeline.</p> <note> <p>You must include either <code>artifactStore</code> or <code>artifactStores</code> in your pipeline, but you cannot use both. If you create a cross-region action in your pipeline, you must use <code>artifactStores</code>.</p> </note>"
         },
         "stages":{
           "shape":"PipelineStageDeclarationList",
@@ -3055,6 +3055,10 @@
         "updated":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time the pipeline was last updated, in timestamp format.</p>"
+        },
+        "pollingDisabledAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that polling for source changes (periodic checks) was stopped for the pipeline, in timestamp format. You can migrate (update) a polling pipeline to use event-based change detection. For example, for a pipeline with a CodeCommit source, we recommend you migrate (update) your pipeline to use CloudWatch Events. To learn more, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/update-change-detection.html\">Migrate polling pipelines to use event-based change detection</a> in the CodePipeline User Guide.</p>"
         }
       },
       "documentation":"<p>Information about a pipeline.</p>"
@@ -3309,7 +3313,7 @@
         },
         "continuationToken":{
           "shape":"ContinuationToken",
-          "documentation":"<p>A token generated by a job worker, such as an AWS CodeDeploy deployment ID, that a successful job provides to identify a custom action in progress. Future jobs use this token to identify the running instance of the action. It can be reused to return more information about the progress of the custom action. When the action is complete, no continuation token should be supplied.</p>"
+          "documentation":"<p>A token generated by a job worker, such as a CodeDeploy deployment ID, that a successful job provides to identify a custom action in progress. Future jobs use this token to identify the running instance of the action. It can be reused to return more information about the progress of the custom action. When the action is complete, no continuation token should be supplied.</p>"
         },
         "executionDetails":{
           "shape":"ExecutionDetails",
@@ -3366,7 +3370,7 @@
         },
         "continuationToken":{
           "shape":"ContinuationToken",
-          "documentation":"<p>A token generated by a job worker, such as an AWS CodeDeploy deployment ID, that a successful job provides to identify a partner action in progress. Future jobs use this token to identify the running instance of the action. It can be reused to return more information about the progress of the partner action. When the action is complete, no continuation token should be supplied.</p>"
+          "documentation":"<p>A token generated by a job worker, such as a CodeDeploy deployment ID, that a successful job provides to identify a partner action in progress. Future jobs use this token to identify the running instance of the action. It can be reused to return more information about the progress of the partner action. When the action is complete, no continuation token should be supplied.</p>"
         },
         "executionDetails":{
           "shape":"ExecutionDetails",
@@ -3572,11 +3576,11 @@
         },
         "revisionSummary":{
           "shape":"RevisionSummary",
-          "documentation":"<p>Summary information about the most recent revision of the artifact. For GitHub and AWS CodeCommit repositories, the commit message. For Amazon S3 buckets or actions, the user-provided content of a <code>codepipeline-artifact-revision-summary</code> key specified in the object metadata.</p>"
+          "documentation":"<p>Summary information about the most recent revision of the artifact. For GitHub and CodeCommit repositories, the commit message. For Amazon S3 buckets or actions, the user-provided content of a <code>codepipeline-artifact-revision-summary</code> key specified in the object metadata.</p>"
         },
         "revisionUrl":{
           "shape":"Url",
-          "documentation":"<p>The commit ID for the artifact revision. For artifacts stored in GitHub or AWS CodeCommit repositories, the commit ID is linked to a commit details page.</p>"
+          "documentation":"<p>The commit ID for the artifact revision. For artifacts stored in GitHub or CodeCommit repositories, the commit ID is linked to a commit details page.</p>"
         }
       },
       "documentation":"<p>Information about the version (or revision) of a source artifact that initiated a pipeline execution.</p>"
@@ -3854,10 +3858,10 @@
         },
         "jobId":{
           "shape":"JobId",
-          "documentation":"<p>The identifier used to identify the job in AWS CodePipeline.</p>"
+          "documentation":"<p>The identifier used to identify the job in CodePipeline.</p>"
         }
       },
-      "documentation":"<p>A response to a <code>PollForThirdPartyJobs</code> request returned by AWS CodePipeline when there is a job to be worked on by a partner action.</p>"
+      "documentation":"<p>A response to a <code>PollForThirdPartyJobs</code> request returned by CodePipeline when there is a job to be worked on by a partner action.</p>"
     },
     "ThirdPartyJobData":{
       "type":"structure",
@@ -3884,15 +3888,15 @@
         },
         "artifactCredentials":{
           "shape":"AWSSessionCredentials",
-          "documentation":"<p>Represents an AWS session credentials object. These credentials are temporary credentials that are issued by AWS Secure Token Service (STS). They can be used to access input and output artifacts in the S3 bucket used to store artifact for the pipeline in AWS CodePipeline. </p>"
+          "documentation":"<p>Represents an Amazon Web Services session credentials object. These credentials are temporary credentials that are issued by Amazon Web Services Secure Token Service (STS). They can be used to access input and output artifacts in the S3 bucket used to store artifact for the pipeline in CodePipeline. </p>"
         },
         "continuationToken":{
           "shape":"ContinuationToken",
-          "documentation":"<p>A system-generated token, such as a AWS CodeDeploy deployment ID, that a job requires to continue the job asynchronously.</p>"
+          "documentation":"<p>A system-generated token, such as a CodeDeploy deployment ID, that a job requires to continue the job asynchronously.</p>"
         },
         "encryptionKey":{
           "shape":"EncryptionKey",
-          "documentation":"<p>The encryption key used to encrypt and decrypt data in the artifact store for the pipeline, such as an AWS Key Management Service (AWS KMS) key. This is optional and might not be present.</p>"
+          "documentation":"<p>The encryption key used to encrypt and decrypt data in the artifact store for the pipeline, such as an Amazon Web Services Key Management Service (Amazon Web Services KMS) key. This is optional and might not be present.</p>"
         }
       },
       "documentation":"<p>Represents information about the job data for a partner action.</p>"
@@ -3902,7 +3906,7 @@
       "members":{
         "id":{
           "shape":"ThirdPartyJobId",
-          "documentation":"<p>The identifier used to identify the job details in AWS CodePipeline.</p>"
+          "documentation":"<p>The identifier used to identify the job details in CodePipeline.</p>"
         },
         "data":{
           "shape":"ThirdPartyJobData",
@@ -3910,7 +3914,7 @@
         },
         "nonce":{
           "shape":"Nonce",
-          "documentation":"<p>A system-generated random number that AWS CodePipeline uses to ensure that the job is being worked on by only one job worker. Use this number in an <a>AcknowledgeThirdPartyJob</a> request.</p>"
+          "documentation":"<p>A system-generated random number that CodePipeline uses to ensure that the job is being worked on by only one job worker. Use this number in an <a>AcknowledgeThirdPartyJob</a> request.</p>"
         }
       },
       "documentation":"<p>The details of a job sent in response to a <code>GetThirdPartyJobDetails</code> request.</p>"
@@ -4131,7 +4135,7 @@
         },
         "matchEquals":{
           "shape":"MatchEquals",
-          "documentation":"<p>The value selected by the <code>JsonPath</code> expression must match what is supplied in the <code>MatchEquals</code> field. Otherwise, the request is ignored. Properties from the target action configuration can be included as placeholders in this value by surrounding the action configuration key with curly brackets. For example, if the value supplied here is \"refs/heads/{Branch}\" and the target action has an action configuration property called \"Branch\" with a value of \"master\", the <code>MatchEquals</code> value is evaluated as \"refs/heads/master\". For a list of action configuration properties for built-in action types, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#action-requirements\">Pipeline Structure Reference Action Requirements</a>.</p>"
+          "documentation":"<p>The value selected by the <code>JsonPath</code> expression must match what is supplied in the <code>MatchEquals</code> field. Otherwise, the request is ignored. Properties from the target action configuration can be included as placeholders in this value by surrounding the action configuration key with curly brackets. For example, if the value supplied here is \"refs/heads/{Branch}\" and the target action has an action configuration property called \"Branch\" with a value of \"main\", the <code>MatchEquals</code> value is evaluated as \"refs/heads/main\". For a list of action configuration properties for built-in action types, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#action-requirements\">Pipeline Structure Reference Action Requirements</a>.</p>"
         }
       },
       "documentation":"<p>The event criteria that specify when a webhook notification is sent to your URL.</p>"
@@ -4165,5 +4169,5 @@
       "min":1
     }
   },
-  "documentation":"<fullname>AWS CodePipeline</fullname> <p> <b>Overview</b> </p> <p>This is the AWS CodePipeline API Reference. This guide provides descriptions of the actions and data types for AWS CodePipeline. Some functionality for your pipeline can only be configured through the API. For more information, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html\">AWS CodePipeline User Guide</a>.</p> <p>You can use the AWS CodePipeline API to work with pipelines, stages, actions, and transitions.</p> <p> <i>Pipelines</i> are models of automated release processes. Each pipeline is uniquely named, and consists of stages, actions, and transitions. </p> <p>You can work with pipelines by calling:</p> <ul> <li> <p> <a>CreatePipeline</a>, which creates a uniquely named pipeline.</p> </li> <li> <p> <a>DeletePipeline</a>, which deletes the specified pipeline.</p> </li> <li> <p> <a>GetPipeline</a>, which returns information about the pipeline structure and pipeline metadata, including the pipeline Amazon Resource Name (ARN).</p> </li> <li> <p> <a>GetPipelineExecution</a>, which returns information about a specific execution of a pipeline.</p> </li> <li> <p> <a>GetPipelineState</a>, which returns information about the current state of the stages and actions of a pipeline.</p> </li> <li> <p> <a>ListActionExecutions</a>, which returns action-level details for past executions. The details include full stage and action-level details, including individual action duration, status, any errors that occurred during the execution, and input and output artifact location details.</p> </li> <li> <p> <a>ListPipelines</a>, which gets a summary of all of the pipelines associated with your account.</p> </li> <li> <p> <a>ListPipelineExecutions</a>, which gets a summary of the most recent executions for a pipeline.</p> </li> <li> <p> <a>StartPipelineExecution</a>, which runs the most recent revision of an artifact through the pipeline.</p> </li> <li> <p> <a>StopPipelineExecution</a>, which stops the specified pipeline execution from continuing through the pipeline.</p> </li> <li> <p> <a>UpdatePipeline</a>, which updates a pipeline with edits or changes to the structure of the pipeline.</p> </li> </ul> <p>Pipelines include <i>stages</i>. Each stage contains one or more actions that must complete before the next stage begins. A stage results in success or failure. If a stage fails, the pipeline stops at that stage and remains stopped until either a new version of an artifact appears in the source location, or a user takes action to rerun the most recent artifact through the pipeline. You can call <a>GetPipelineState</a>, which displays the status of a pipeline, including the status of stages in the pipeline, or <a>GetPipeline</a>, which returns the entire structure of the pipeline, including the stages of that pipeline. For more information about the structure of stages and actions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-structure.html\">AWS CodePipeline Pipeline Structure Reference</a>.</p> <p>Pipeline stages include <i>actions</i> that are categorized into categories such as source or build actions performed in a stage of a pipeline. For example, you can use a source action to import artifacts into a pipeline from a source such as Amazon S3. Like stages, you do not work with actions directly in most cases, but you do define and interact with actions when working with pipeline operations such as <a>CreatePipeline</a> and <a>GetPipelineState</a>. Valid action categories are:</p> <ul> <li> <p>Source</p> </li> <li> <p>Build</p> </li> <li> <p>Test</p> </li> <li> <p>Deploy</p> </li> <li> <p>Approval</p> </li> <li> <p>Invoke</p> </li> </ul> <p>Pipelines also include <i>transitions</i>, which allow the transition of artifacts from one stage to the next in a pipeline after the actions in one stage complete.</p> <p>You can work with transitions by calling:</p> <ul> <li> <p> <a>DisableStageTransition</a>, which prevents artifacts from transitioning to the next stage in a pipeline.</p> </li> <li> <p> <a>EnableStageTransition</a>, which enables transition of artifacts between stages in a pipeline. </p> </li> </ul> <p> <b>Using the API to integrate with AWS CodePipeline</b> </p> <p>For third-party integrators or developers who want to create their own integrations with AWS CodePipeline, the expected sequence varies from the standard API user. To integrate with AWS CodePipeline, developers need to work with the following items:</p> <p> <b>Jobs</b>, which are instances of an action. For example, a job for a source action might import a revision of an artifact from a source. </p> <p>You can work with jobs by calling:</p> <ul> <li> <p> <a>AcknowledgeJob</a>, which confirms whether a job worker has received the specified job.</p> </li> <li> <p> <a>GetJobDetails</a>, which returns the details of a job.</p> </li> <li> <p> <a>PollForJobs</a>, which determines whether there are any jobs to act on.</p> </li> <li> <p> <a>PutJobFailureResult</a>, which provides details of a job failure. </p> </li> <li> <p> <a>PutJobSuccessResult</a>, which provides details of a job success.</p> </li> </ul> <p> <b>Third party jobs</b>, which are instances of an action created by a partner action and integrated into AWS CodePipeline. Partner actions are created by members of the AWS Partner Network.</p> <p>You can work with third party jobs by calling:</p> <ul> <li> <p> <a>AcknowledgeThirdPartyJob</a>, which confirms whether a job worker has received the specified job.</p> </li> <li> <p> <a>GetThirdPartyJobDetails</a>, which requests the details of a job for a partner action.</p> </li> <li> <p> <a>PollForThirdPartyJobs</a>, which determines whether there are any jobs to act on. </p> </li> <li> <p> <a>PutThirdPartyJobFailureResult</a>, which provides details of a job failure.</p> </li> <li> <p> <a>PutThirdPartyJobSuccessResult</a>, which provides details of a job success.</p> </li> </ul>"
+  "documentation":"<fullname>CodePipeline</fullname> <p> <b>Overview</b> </p> <p>This is the CodePipeline API Reference. This guide provides descriptions of the actions and data types for CodePipeline. Some functionality for your pipeline can only be configured through the API. For more information, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html\">CodePipeline User Guide</a>.</p> <p>You can use the CodePipeline API to work with pipelines, stages, actions, and transitions.</p> <p> <i>Pipelines</i> are models of automated release processes. Each pipeline is uniquely named, and consists of stages, actions, and transitions. </p> <p>You can work with pipelines by calling:</p> <ul> <li> <p> <a>CreatePipeline</a>, which creates a uniquely named pipeline.</p> </li> <li> <p> <a>DeletePipeline</a>, which deletes the specified pipeline.</p> </li> <li> <p> <a>GetPipeline</a>, which returns information about the pipeline structure and pipeline metadata, including the pipeline Amazon Resource Name (ARN).</p> </li> <li> <p> <a>GetPipelineExecution</a>, which returns information about a specific execution of a pipeline.</p> </li> <li> <p> <a>GetPipelineState</a>, which returns information about the current state of the stages and actions of a pipeline.</p> </li> <li> <p> <a>ListActionExecutions</a>, which returns action-level details for past executions. The details include full stage and action-level details, including individual action duration, status, any errors that occurred during the execution, and input and output artifact location details.</p> </li> <li> <p> <a>ListPipelines</a>, which gets a summary of all of the pipelines associated with your account.</p> </li> <li> <p> <a>ListPipelineExecutions</a>, which gets a summary of the most recent executions for a pipeline.</p> </li> <li> <p> <a>StartPipelineExecution</a>, which runs the most recent revision of an artifact through the pipeline.</p> </li> <li> <p> <a>StopPipelineExecution</a>, which stops the specified pipeline execution from continuing through the pipeline.</p> </li> <li> <p> <a>UpdatePipeline</a>, which updates a pipeline with edits or changes to the structure of the pipeline.</p> </li> </ul> <p>Pipelines include <i>stages</i>. Each stage contains one or more actions that must complete before the next stage begins. A stage results in success or failure. If a stage fails, the pipeline stops at that stage and remains stopped until either a new version of an artifact appears in the source location, or a user takes action to rerun the most recent artifact through the pipeline. You can call <a>GetPipelineState</a>, which displays the status of a pipeline, including the status of stages in the pipeline, or <a>GetPipeline</a>, which returns the entire structure of the pipeline, including the stages of that pipeline. For more information about the structure of stages and actions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-structure.html\">CodePipeline Pipeline Structure Reference</a>.</p> <p>Pipeline stages include <i>actions</i> that are categorized into categories such as source or build actions performed in a stage of a pipeline. For example, you can use a source action to import artifacts into a pipeline from a source such as Amazon S3. Like stages, you do not work with actions directly in most cases, but you do define and interact with actions when working with pipeline operations such as <a>CreatePipeline</a> and <a>GetPipelineState</a>. Valid action categories are:</p> <ul> <li> <p>Source</p> </li> <li> <p>Build</p> </li> <li> <p>Test</p> </li> <li> <p>Deploy</p> </li> <li> <p>Approval</p> </li> <li> <p>Invoke</p> </li> </ul> <p>Pipelines also include <i>transitions</i>, which allow the transition of artifacts from one stage to the next in a pipeline after the actions in one stage complete.</p> <p>You can work with transitions by calling:</p> <ul> <li> <p> <a>DisableStageTransition</a>, which prevents artifacts from transitioning to the next stage in a pipeline.</p> </li> <li> <p> <a>EnableStageTransition</a>, which enables transition of artifacts between stages in a pipeline. </p> </li> </ul> <p> <b>Using the API to integrate with CodePipeline</b> </p> <p>For third-party integrators or developers who want to create their own integrations with CodePipeline, the expected sequence varies from the standard API user. To integrate with CodePipeline, developers need to work with the following items:</p> <p> <b>Jobs</b>, which are instances of an action. For example, a job for a source action might import a revision of an artifact from a source. </p> <p>You can work with jobs by calling:</p> <ul> <li> <p> <a>AcknowledgeJob</a>, which confirms whether a job worker has received the specified job.</p> </li> <li> <p> <a>GetJobDetails</a>, which returns the details of a job.</p> </li> <li> <p> <a>PollForJobs</a>, which determines whether there are any jobs to act on.</p> </li> <li> <p> <a>PutJobFailureResult</a>, which provides details of a job failure. </p> </li> <li> <p> <a>PutJobSuccessResult</a>, which provides details of a job success.</p> </li> </ul> <p> <b>Third party jobs</b>, which are instances of an action created by a partner action and integrated into CodePipeline. Partner actions are created by members of the Amazon Web Services Partner Network.</p> <p>You can work with third party jobs by calling:</p> <ul> <li> <p> <a>AcknowledgeThirdPartyJob</a>, which confirms whether a job worker has received the specified job.</p> </li> <li> <p> <a>GetThirdPartyJobDetails</a>, which requests the details of a job for a partner action.</p> </li> <li> <p> <a>PollForThirdPartyJobs</a>, which determines whether there are any jobs to act on. </p> </li> <li> <p> <a>PutThirdPartyJobFailureResult</a>, which provides details of a job failure.</p> </li> <li> <p> <a>PutThirdPartyJobSuccessResult</a>, which provides details of a job success.</p> </li> </ul>"
 }
diff --git a/botocore/data/endpoints.json b/botocore/data/endpoints.json
index d0d5de51f..2bfd13117 100644
--- a/botocore/data/endpoints.json
+++ b/botocore/data/endpoints.json
@@ -2836,6 +2836,7 @@
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
@@ -4263,6 +4264,7 @@
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "datasync-fips.ca-central-1.amazonaws.com",
@@ -6625,6 +6627,7 @@
             } ]
           },
           "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "fms-fips.ca-central-1.amazonaws.com",
@@ -6958,6 +6961,7 @@
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "fsx-fips.ca-central-1.amazonaws.com",
diff --git a/botocore/data/gamelift/2015-10-01/service-2.json b/botocore/data/gamelift/2015-10-01/service-2.json
index 8af75a8ee..f9c6980b7 100644
--- a/botocore/data/gamelift/2015-10-01/service-2.json
+++ b/botocore/data/gamelift/2015-10-01/service-2.json
@@ -44,7 +44,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Locates an available game server and temporarily reserves it to host gameplay and players. This operation is called from a game client or client service (such as a matchmaker) to request hosting resources for a new game session. In response, Amazon GameLift FleetIQ locates an available game server, places it in <code>CLAIMED</code> status for 60 seconds, and returns connection information that players can use to connect to the game server. </p> <p>To claim a game server, identify a game server group. You can also specify a game server ID, although this approach bypasses Amazon GameLift FleetIQ placement optimization. Optionally, include game data to pass to the game server at the start of a game session, such as a game map or player information. </p> <p>When a game server is successfully claimed, connection information is returned. A claimed game server's utilization status remains <code>AVAILABLE</code> while the claim status is set to <code>CLAIMED</code> for up to 60 seconds. This time period gives the game server time to update its status to <code>UTILIZED</code> after players join. If the game server's status is not updated within 60 seconds, the game server reverts to unclaimed status and is available to be claimed by another request. The claim time period is a fixed value and is not configurable.</p> <p>If you try to claim a specific game server, this request will fail in the following cases:</p> <ul> <li> <p>If the game server utilization status is <code>UTILIZED</code>.</p> </li> <li> <p>If the game server claim status is <code>CLAIMED</code>.</p> </li> </ul> <note> <p>When claiming a specific game server, this request will succeed even if the game server is running on an instance in <code>DRAINING</code> status. To avoid this, first check the instance status by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameServerInstances.html\">DescribeGameServerInstances</a> .</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Locates an available game server and temporarily reserves it to host gameplay and players. This operation is called from a game client or client service (such as a matchmaker) to request hosting resources for a new game session. In response, Amazon GameLift FleetIQ locates an available game server, places it in <code>CLAIMED</code> status for 60 seconds, and returns connection information that players can use to connect to the game server. </p> <p>To claim a game server, identify a game server group. You can also specify a game server ID, although this approach bypasses Amazon GameLift FleetIQ placement optimization. Optionally, include game data to pass to the game server at the start of a game session, such as a game map or player information. Filter options may be included to further restrict how a game server is chosen, such as only allowing game servers on <code>ACTIVE</code> instances to be claimed.</p> <p>When a game server is successfully claimed, connection information is returned. A claimed game server's utilization status remains <code>AVAILABLE</code> while the claim status is set to <code>CLAIMED</code> for up to 60 seconds. This time period gives the game server time to update its status to <code>UTILIZED</code> after players join. If the game server's status is not updated within 60 seconds, the game server reverts to unclaimed status and is available to be claimed by another request. The claim time period is a fixed value and is not configurable.</p> <p>If you try to claim a specific game server, this request will fail in the following cases:</p> <ul> <li> <p>If the game server utilization status is <code>UTILIZED</code>.</p> </li> <li> <p>If the game server claim status is <code>CLAIMED</code>.</p> </li> <li> <p>If the game server is running on an instance in <code>DRAINING</code> status and provided filter option does not allow placing on <code>DRAINING</code> instances.</p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
     },
     "CreateAlias":{
       "name":"CreateAlias",
@@ -79,7 +79,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates a new Amazon GameLift build resource for your game server binary files. Combine game server binaries into a zip file for use with Amazon GameLift. </p> <important> <p>When setting up a new game build for Amazon GameLift, we recommend using the CLI command <b> <a href=\"https://docs.aws.amazon.com/cli/latest/reference/gamelift/upload-build.html\">upload-build</a> </b>. This helper command combines two tasks: (1) it uploads your build files from a file directory to a Amazon GameLift Amazon S3 location, and (2) it creates a new build resource.</p> </important> <p>You can use the operation in the following scenarios:</p> <ul> <li> <p>To create a new game build with build files that are in an Amazon S3 location under an Amazon Web Services account that you control. To use this option, you give Amazon GameLift access to the Amazon S3 bucket. With permissions in place, specify a build name, operating system, and the Amazon S3 storage location of your game build.</p> </li> <li> <p>To directly upload your build files to a Amazon GameLift Amazon S3 location. To use this option, specify a build name and operating system. This operation creates a new build resource and also returns an Amazon S3 location with temporary access credentials. Use the credentials to manually upload your build files to the specified Amazon S3 location. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html\">Uploading Objects</a> in the <i>Amazon S3 Developer Guide</i>. After you upload build files to the Amazon GameLift Amazon S3 location, you can't update them. </p> </li> </ul> <p>If successful, this operation creates a new build resource with a unique build ID and places it in <code>INITIALIZED</code> status. A build must be in <code>READY</code> status before you can create fleets with it.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\">Uploading Your Game</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-cli-uploading.html#gamelift-build-cli-uploading-create-build\"> Create a Build with Files in Amazon S3</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p>Creates a new Amazon GameLift build resource for your game server binary files. Combine game server binaries into a zip file for use with Amazon GameLift. </p> <important> <p>When setting up a new game build for Amazon GameLift, we recommend using the CLI command <b> <a href=\"https://docs.aws.amazon.com/cli/latest/reference/gamelift/upload-build.html\">upload-build</a> </b>. This helper command combines two tasks: (1) it uploads your build files from a file directory to an Amazon GameLift Amazon S3 location, and (2) it creates a new build resource.</p> </important> <p>You can use the <code>CreateBuild</code> operation in the following scenarios:</p> <ul> <li> <p>Create a new game build with build files that are in an Amazon S3 location under an Amazon Web Services account that you control. To use this option, you give Amazon GameLift access to the Amazon S3 bucket. With permissions in place, specify a build name, operating system, and the Amazon S3 storage location of your game build.</p> </li> <li> <p>Upload your build files to a Amazon GameLift Amazon S3 location. To use this option, specify a build name and operating system. This operation creates a new build resource and also returns an Amazon S3 location with temporary access credentials. Use the credentials to manually upload your build files to the specified Amazon S3 location. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html\">Uploading Objects</a> in the <i>Amazon S3 Developer Guide</i>. After you upload build files to the Amazon GameLift Amazon S3 location, you can't update them. </p> </li> </ul> <p>If successful, this operation creates a new build resource with a unique build ID and places it in <code>INITIALIZED</code> status. A build must be in <code>READY</code> status before you can create fleets with it.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\">Uploading Your Game</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-cli-uploading.html#gamelift-build-cli-uploading-create-build\"> Create a Build with Files in Amazon S3</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateFleet":{
       "name":"CreateFleet",
@@ -1079,7 +1079,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Retrieves the location of stored game session logs for a specified game session. When a game session is terminated, Amazon GameLift automatically stores the logs in Amazon S3 and retains them for 14 days. Use this URL to download the logs.</p> <note> <p>See the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_gamelift\">Amazon Web Services Service Limits</a> page for maximum log file sizes. Log files that exceed this limit are not saved.</p> </note> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p>Retrieves the location of stored game session logs for a specified game session on Amazon GameLift managed fleets. When a game session is terminated, Amazon GameLift automatically stores the logs in Amazon S3 and retains them for 14 days. Use this URL to download the logs.</p> <note> <p>See the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_gamelift\">Amazon Web Services Service Limits</a> page for maximum log file sizes. Log files that exceed this limit are not saved.</p> </note> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "GetInstanceAccess":{
       "name":"GetInstanceAccess",
@@ -1987,6 +1987,16 @@
         "GENERATED"
       ]
     },
+    "ClaimFilterOption":{
+      "type":"structure",
+      "members":{
+        "InstanceStatuses":{
+          "shape":"FilterInstanceStatuses",
+          "documentation":"<p>List of instance statuses that game servers may be claimed on. If provided, the list must contain the <code>ACTIVE</code> status.</p>"
+        }
+      },
+      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p> Filters which game servers may be claimed when calling <code>ClaimGameServer</code>. </p>"
+    },
     "ClaimGameServerInput":{
       "type":"structure",
       "required":["GameServerGroupName"],
@@ -2002,6 +2012,10 @@
         "GameServerData":{
           "shape":"GameServerData",
           "documentation":"<p>A set of custom game server properties, formatted as a single string value. This data is passed to a game client or service when it requests information on game servers. </p>"
+        },
+        "FilterOption":{
+          "shape":"ClaimFilterOption",
+          "documentation":"<p>Object that restricts how a claimed game server is chosen.</p>"
         }
       }
     },
@@ -2177,7 +2191,7 @@
         },
         "OperatingSystem":{
           "shape":"OperatingSystem",
-          "documentation":"<p>The operating system that you built the game server binaries to run on. This value determines the type of fleet resources that you can use for this build. If your game build contains multiple executables, they all must run on the same operating system. If an operating system isn't specified when creating a build, Amazon GameLift uses the default value (WINDOWS_2012). This value can't be changed later.</p>"
+          "documentation":"<p>The operating system that your game server binaries run on. This value determines the type of fleet resources that you use for this build. If your game build contains multiple executables, they all must run on the same operating system. You must specify a valid operating system in this request. There is no default value. You can't change a build's operating system later.</p> <note> <p>If you have active fleets using the Windows Server 2012 operating system, you can continue to create new builds using this OS until October 10, 2023, when Microsoft ends its support. All others must use Windows Server 2016 when creating new Windows-based builds.</p> </note>"
         },
         "Tags":{
           "shape":"TagList",
@@ -2478,7 +2492,7 @@
         },
         "TimeoutInSeconds":{
           "shape":"WholeNumber",
-          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status.</p>"
+          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status. By default, this property is set to <code>600</code>.</p>"
         },
         "PlayerLatencyPolicies":{
           "shape":"PlayerLatencyPolicyList",
@@ -4207,6 +4221,17 @@
       },
       "documentation":"<p>A list of fleet locations where a game session queue can place new game sessions. You can use a filter to temporarily turn off placements for specific locations. For queues that have multi-location fleets, you can use a filter configuration allow placement with some, but not all of these locations.</p>"
     },
+    "FilterInstanceStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "DRAINING"
+      ]
+    },
+    "FilterInstanceStatuses":{
+      "type":"list",
+      "member":{"shape":"FilterInstanceStatus"}
+    },
     "FleetAction":{
       "type":"string",
       "enum":["AUTO_SCALING"]
@@ -5083,7 +5108,7 @@
         },
         "TimeoutInSeconds":{
           "shape":"WholeNumber",
-          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status.</p>"
+          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status. By default, this property is set to <code>600</code>.</p>"
         },
         "PlayerLatencyPolicies":{
           "shape":"PlayerLatencyPolicyList",
@@ -7788,7 +7813,7 @@
         },
         "TimeoutInSeconds":{
           "shape":"WholeNumber",
-          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status.</p>"
+          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status. By default, this property is set to <code>600</code>.</p>"
         },
         "PlayerLatencyPolicies":{
           "shape":"PlayerLatencyPolicyList",
diff --git a/botocore/data/glue/2017-03-31/service-2.json b/botocore/data/glue/2017-03-31/service-2.json
index a2258af6b..2d16c3650 100644
--- a/botocore/data/glue/2017-03-31/service-2.json
+++ b/botocore/data/glue/2017-03-31/service-2.json
@@ -3420,6 +3420,10 @@
       "type":"list",
       "member":{"shape":"Action"}
     },
+    "AdditionalOptionKeys":{
+      "type":"string",
+      "enum":["performanceTuning.caching"]
+    },
     "AdditionalOptions":{
       "type":"map",
       "key":{"shape":"EnclosedInStringProperty"},
@@ -3518,14 +3522,14 @@
       "members":{
         "Key":{
           "shape":"GenericString",
-          "documentation":"<p>The key when specifying a key-value pair.</p>"
+          "documentation":"<p>The key for the additional connection option.</p>"
         },
         "Value":{
           "shape":"GenericString",
-          "documentation":"<p>The value when specifying a key-value pair.</p>"
+          "documentation":"<p>The value for the additional connection option.</p>"
         }
       },
-      "documentation":"<p>Specifies an Amazon Redshift data store.</p>"
+      "documentation":"<p>Specifies an optional value when connecting to the Redshift cluster.</p>"
     },
     "AmazonRedshiftAdvancedOptions":{
       "type":"list",
@@ -5369,6 +5373,10 @@
         "AmazonRedshiftTarget":{
           "shape":"AmazonRedshiftTarget",
           "documentation":"<p>Specifies a target that writes to a data target in Amazon Redshift.</p>"
+        },
+        "EvaluateDataQualityMultiFrame":{
+          "shape":"EvaluateDataQualityMultiFrame",
+          "documentation":"<p>Specifies your data quality evaluation criteria. Allows multiple input data and returns a collection of Dynamic Frames.</p>"
         }
       },
       "documentation":"<p> <code>CodeGenConfigurationNode</code> enumerates all valid Node types. One and only one of its member variables can be populated.</p>"
@@ -7674,6 +7682,16 @@
       "min":0,
       "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\r\\n\\t]*"
     },
+    "DQAdditionalOptions":{
+      "type":"map",
+      "key":{"shape":"AdditionalOptionKeys"},
+      "value":{"shape":"GenericString"}
+    },
+    "DQDLAliases":{
+      "type":"map",
+      "key":{"shape":"NodeName"},
+      "value":{"shape":"EnclosedInStringProperty"}
+    },
     "DQDLString":{
       "type":"string",
       "max":65536,
@@ -7970,6 +7988,10 @@
         "Result":{
           "shape":"DataQualityRuleResultStatus",
           "documentation":"<p>A pass or fail status for the rule.</p>"
+        },
+        "EvaluatedMetrics":{
+          "shape":"EvaluatedMetricsMap",
+          "documentation":"<p>A map of metrics associated with the evaluation of the rule.</p>"
         }
       },
       "documentation":"<p>Describes the result of the evaluation of a data quality rule.</p>"
@@ -8124,6 +8146,10 @@
         "DatabaseName":{
           "shape":"NameString",
           "documentation":"<p>The name of the database where the Glue table exists.</p>"
+        },
+        "CatalogId":{
+          "shape":"NameString",
+          "documentation":"<p>The catalog id where the Glue table exists.</p>"
         }
       },
       "documentation":"<p>An object representing an Glue table.</p>"
@@ -8139,6 +8165,11 @@
       },
       "documentation":"<p>A data source (an Glue table) for which you want data quality results.</p>"
     },
+    "DataSourceMap":{
+      "type":"map",
+      "key":{"shape":"NameString"},
+      "value":{"shape":"DataSource"}
+    },
     "Database":{
       "type":"structure",
       "required":["Name"],
@@ -9551,6 +9582,50 @@
       },
       "documentation":"<p>Specifies your data quality evaluation criteria.</p>"
     },
+    "EvaluateDataQualityMultiFrame":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Inputs",
+        "Ruleset"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the data quality evaluation.</p>"
+        },
+        "Inputs":{
+          "shape":"ManyInputs",
+          "documentation":"<p>The inputs of your data quality evaluation. The first input in this list is the primary data source.</p>"
+        },
+        "AdditionalDataSources":{
+          "shape":"DQDLAliases",
+          "documentation":"<p>The aliases of all data sources except primary.</p>"
+        },
+        "Ruleset":{
+          "shape":"DQDLString",
+          "documentation":"<p>The ruleset for your data quality evaluation.</p>"
+        },
+        "PublishingOptions":{
+          "shape":"DQResultsPublishingOptions",
+          "documentation":"<p>Options to configure how your results are published.</p>"
+        },
+        "AdditionalOptions":{
+          "shape":"DQAdditionalOptions",
+          "documentation":"<p>Options to configure runtime behavior of the transform.</p>"
+        },
+        "StopJobOnFailureOptions":{
+          "shape":"DQStopJobOnFailureOptions",
+          "documentation":"<p>Options to configure how your job will stop if your data quality evaluation fails.</p>"
+        }
+      },
+      "documentation":"<p>Specifies your data quality evaluation criteria.</p>"
+    },
+    "EvaluatedMetricsMap":{
+      "type":"map",
+      "key":{"shape":"NameString"},
+      "value":{"shape":"NullableDouble"}
+    },
     "EvaluationMetrics":{
       "type":"structure",
       "required":["TransformType"],
@@ -10590,6 +10665,10 @@
         "ResultIds":{
           "shape":"DataQualityResultIdList",
           "documentation":"<p>A list of result IDs for the data quality results for the run.</p>"
+        },
+        "AdditionalDataSources":{
+          "shape":"DataSourceMap",
+          "documentation":"<p>A map of reference strings to additional data sources you can specify for an evaluation run.</p>"
         }
       }
     },
@@ -17996,6 +18075,10 @@
         "RulesetNames":{
           "shape":"RulesetNames",
           "documentation":"<p>A list of ruleset names.</p>"
+        },
+        "AdditionalDataSources":{
+          "shape":"DataSourceMap",
+          "documentation":"<p>A map of reference strings to additional data sources you can specify for an evaluation run.</p>"
         }
       }
     },
diff --git a/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json b/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json
index a4975e3c4..49b8e17f1 100644
--- a/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json
+++ b/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json
@@ -552,7 +552,7 @@
       "members":{
         "EndpointType":{
           "shape":"ApiGatewayEndpointType",
-          "documentation":"<p>The type of endpoint to use for the API Gateway proxy. If no value is specified in the request, the value is set to <code>REGIONAL</code> by default.</p> <p>If the value is set to <code>PRIVATE</code> in the request, this creates a private API endpoint that is isolated from the public internet. The private endpoint can only be accessed by using Amazon Virtual Private Cloud (Amazon VPC) endpoints for Amazon API Gateway that have been granted access. </p>"
+          "documentation":"<p>The type of endpoint to use for the API Gateway proxy. If no value is specified in the request, the value is set to <code>REGIONAL</code> by default.</p> <p>If the value is set to <code>PRIVATE</code> in the request, this creates a private API endpoint that is isolated from the public internet. The private endpoint can only be accessed by using Amazon Virtual Private Cloud (Amazon VPC) interface endpoints for the Amazon API Gateway that has been granted access. For more information about creating a private connection with Refactor Spaces and interface endpoint (Amazon Web Services PrivateLink) availability, see <a href=\"https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/userguide/vpc-interface-endpoints.html\">Access Refactor Spaces using an interface endpoint (Amazon Web Services PrivateLink)</a>.</p>"
         },
         "StageName":{
           "shape":"StageName",
@@ -1761,6 +1761,10 @@
     "GetRouteResponse":{
       "type":"structure",
       "members":{
+        "AppendSourcePath":{
+          "shape":"Boolean",
+          "documentation":"<p>If set to <code>true</code>, this option appends the source path to the service URL endpoint.</p>"
+        },
         "ApplicationId":{
           "shape":"ApplicationId",
           "documentation":"<p>The ID of the application that the route belongs to. </p>"
@@ -1819,7 +1823,7 @@
         },
         "SourcePath":{
           "shape":"UriPath",
-          "documentation":"<p>The path to use to match traffic. Paths must start with <code>/</code> and are relative to the base of the application. </p>"
+          "documentation":"<p>This is the path that Refactor Spaces uses to match traffic. Paths must start with <code>/</code> and are relative to the base of the application. To use path parameters in the source path, add a variable in curly braces. For example, the resource path {user} represents a path parameter called 'user'.</p>"
         },
         "State":{
           "shape":"RouteState",
@@ -2380,6 +2384,10 @@
     "RouteSummary":{
       "type":"structure",
       "members":{
+        "AppendSourcePath":{
+          "shape":"Boolean",
+          "documentation":"<p>If set to <code>true</code>, this option appends the source path to the service URL endpoint.</p>"
+        },
         "ApplicationId":{
           "shape":"ApplicationId",
           "documentation":"<p>The unique identifier of the application. </p>"
@@ -2438,7 +2446,7 @@
         },
         "SourcePath":{
           "shape":"UriPath",
-          "documentation":"<p>The path to use to match traffic. Paths must start with <code>/</code> and are relative to the base of the application.</p>"
+          "documentation":"<p>This is the path that Refactor Spaces uses to match traffic. Paths must start with <code>/</code> and are relative to the base of the application. To use path parameters in the source path, add a variable in curly braces. For example, the resource path {user} represents a path parameter called 'user'.</p>"
         },
         "State":{
           "shape":"RouteState",
@@ -2786,7 +2794,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(/[a-zA-Z0-9._-]+)+$"
+      "pattern":"^(/([a-zA-Z0-9._:-]+|\\{[a-zA-Z0-9._:-]+\\}))+$"
     },
     "UriPathRouteInput":{
       "type":"structure",
@@ -2799,6 +2807,10 @@
           "shape":"RouteActivationState",
           "documentation":"<p>If set to <code>ACTIVE</code>, traffic is forwarded to this route’s service after the route is created. </p>"
         },
+        "AppendSourcePath":{
+          "shape":"Boolean",
+          "documentation":"<p>If set to <code>true</code>, this option appends the source path to the service URL endpoint.</p>"
+        },
         "IncludeChildPaths":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to match all subpaths of the given source path. If this value is <code>false</code>, requests must match the source path exactly before they are forwarded to this route's service. </p>"
@@ -2809,7 +2821,7 @@
         },
         "SourcePath":{
           "shape":"UriPath",
-          "documentation":"<p>The path to use to match traffic. Paths must start with <code>/</code> and are relative to the base of the application.</p>"
+          "documentation":"<p>This is the path that Refactor Spaces uses to match traffic. Paths must start with <code>/</code> and are relative to the base of the application. To use path parameters in the source path, add a variable in curly braces. For example, the resource path {user} represents a path parameter called 'user'.</p>"
         }
       },
       "documentation":"<p>The configuration for the URI path route type. </p>"
diff --git a/botocore/data/sagemaker/2017-07-24/service-2.json b/botocore/data/sagemaker/2017-07-24/service-2.json
index 3c3642805..5207c6880 100644
--- a/botocore/data/sagemaker/2017-07-24/service-2.json
+++ b/botocore/data/sagemaker/2017-07-24/service-2.json
@@ -1657,7 +1657,7 @@
       "errors":[
         {"shape":"ResourceNotFound"}
       ],
-      "documentation":"<p>Gets a description of a hyperparameter tuning job.</p>"
+      "documentation":"<p>Returns a description of a hyperparameter tuning job, depending on the fields selected. These fields can include the name, Amazon Resource Name (ARN), job status of your tuning job and more.</p>"
     },
     "DescribeImage":{
       "name":"DescribeImage",
@@ -5326,6 +5326,30 @@
         "Descending"
       ]
     },
+    "AutoParameter":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "ValueHint"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ParameterKey",
+          "documentation":"<p>The name of the hyperparameter to optimize using Autotune.</p>"
+        },
+        "ValueHint":{
+          "shape":"ParameterValue",
+          "documentation":"<p>An example value of the hyperparameter to optimize using Autotune.</p>"
+        }
+      },
+      "documentation":"<p>The name and an example value of the hyperparameter that you want to use in Autotune. If Automatic model tuning (AMT) determines that your hyperparameter is eligible for Autotune, an optimal hyperparameter range is selected for you.</p>"
+    },
+    "AutoParameters":{
+      "type":"list",
+      "member":{"shape":"AutoParameter"},
+      "max":100,
+      "min":0
+    },
     "AutoRollbackConfig":{
       "type":"structure",
       "members":{
@@ -5336,6 +5360,21 @@
       },
       "documentation":"<p>Automatic rollback configuration for handling endpoint deployment failures and recovery.</p>"
     },
+    "Autotune":{
+      "type":"structure",
+      "required":["Mode"],
+      "members":{
+        "Mode":{
+          "shape":"AutotuneMode",
+          "documentation":"<p>Set <code>Mode</code> to <code>Enabled</code> if you want to use Autotune.</p>"
+        }
+      },
+      "documentation":"<p>A flag to indicate if you want to use Autotune to automatically find optimal values for the following fields:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-ParameterRanges\">ParameterRanges</a>: The names and ranges of parameters that a hyperparameter tuning job can optimize.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ResourceLimits.html\">ResourceLimits</a>: The maximum resources that can be used for a training job. These resources include the maximum number of training jobs, the maximum runtime of a tuning job, and the maximum number of training jobs to run at the same time.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-TrainingJobEarlyStoppingType\">TrainingJobEarlyStoppingType</a>: A flag that specifies whether or not to use early stopping for training jobs launched by a hyperparameter tuning job.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-RetryStrategy\">RetryStrategy</a>: The number of times to retry a training job.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html\">Strategy</a>: Specifies how hyperparameter tuning chooses the combinations of hyperparameter values to use for the training jobs that it launches.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ConvergenceDetected.html\">ConvergenceDetected</a>: A flag to indicate that Automatic model tuning (AMT) has detected model convergence.</p> </li> </ul>"
+    },
+    "AutotuneMode":{
+      "type":"string",
+      "enum":["Enabled"]
+    },
     "AwsManagedHumanLoopRequestSource":{
       "type":"string",
       "enum":[
@@ -7920,6 +7959,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An array of key-value pairs. You can use tags to categorize your Amazon Web Services resources in different ways, for example, by purpose, owner, or environment. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a>.</p> <p>Tags that you specify for the tuning job are also added to all training jobs that the tuning job launches.</p>"
+        },
+        "Autotune":{
+          "shape":"Autotune",
+          "documentation":"<p>Configures SageMaker Automatic model tuning (AMT) to automatically find optimal parameters for the following fields:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-ParameterRanges\">ParameterRanges</a>: The names and ranges of parameters that a hyperparameter tuning job can optimize.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ResourceLimits.html\">ResourceLimits</a>: The maximum resources that can be used for a training job. These resources include the maximum number of training jobs, the maximum runtime of a tuning job, and the maximum number of training jobs to run at the same time.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-TrainingJobEarlyStoppingType\">TrainingJobEarlyStoppingType</a>: A flag that specifies whether or not to use early stopping for training jobs launched by a hyperparameter tuning job.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-RetryStrategy\">RetryStrategy</a>: The number of times to retry a training job.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html\">Strategy</a>: Specifies how hyperparameter tuning chooses the combinations of hyperparameter values to use for the training jobs that it launches.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ConvergenceDetected.html\">ConvergenceDetected</a>: A flag to indicate that Automatic model tuning (AMT) has detected model convergence.</p> </li> </ul>"
         }
       }
     },
@@ -12428,7 +12471,7 @@
       "members":{
         "HyperParameterTuningJobName":{
           "shape":"HyperParameterTuningJobName",
-          "documentation":"<p>The name of the tuning job.</p>"
+          "documentation":"<p>The name of the hyperparameter tuning job.</p>"
         },
         "HyperParameterTuningJobArn":{
           "shape":"HyperParameterTuningJobArn",
@@ -12490,7 +12533,11 @@
           "shape":"HyperParameterTuningJobCompletionDetails",
           "documentation":"<p>Tuning job completion information returned as the response from a hyperparameter tuning job. This information tells if your tuning job has or has not converged. It also includes the number of training jobs that have not improved model performance as evaluated against the objective function.</p>"
         },
-        "ConsumedResources":{"shape":"HyperParameterTuningJobConsumedResources"}
+        "ConsumedResources":{"shape":"HyperParameterTuningJobConsumedResources"},
+        "Autotune":{
+          "shape":"Autotune",
+          "documentation":"<p>A flag to indicate if autotune is enabled for the hyperparameter tuning job.</p>"
+        }
       }
     },
     "DescribeImageRequest":{
@@ -26477,6 +26524,10 @@
         "CategoricalParameterRanges":{
           "shape":"CategoricalParameterRanges",
           "documentation":"<p>The array of <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CategoricalParameterRange.html\">CategoricalParameterRange</a> objects that specify ranges of categorical hyperparameters that a hyperparameter tuning job searches.</p>"
+        },
+        "AutoParameters":{
+          "shape":"AutoParameters",
+          "documentation":"<p>A list containing hyperparameter names and example values to be used by Autotune to determine optimal ranges for your tuning job.</p>"
         }
       },
       "documentation":"<p>Specifies ranges of integer, continuous, and categorical hyperparameters that a hyperparameter tuning job searches. The hyperparameter tuning job launches training jobs with hyperparameter values within these ranges to find the combination of values that result in the training job with the best performance as measured by the objective metric of the hyperparameter tuning job.</p> <note> <p>The maximum number of items specified for <code>Array Members</code> refers to the maximum number of hyperparameters for each range and also the maximum for the hyperparameter tuning job itself. That is, the sum of the number of hyperparameters for all the ranges can't exceed the maximum number specified.</p> </note>"
diff --git a/botocore/docs/translator.py b/botocore/docs/translator.py
index aabf36be9..0b0a30893 100644
--- a/botocore/docs/translator.py
+++ b/botocore/docs/translator.py
@@ -10,6 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from docutils import nodes
 from sphinx.locale import admonitionlabels
 from sphinx.writers.html5 import HTML5Translator as SphinxHTML5Translator
 
@@ -17,15 +18,8 @@ from sphinx.writers.html5 import HTML5Translator as SphinxHTML5Translator
 class BotoHTML5Translator(SphinxHTML5Translator):
     """Extension of Sphinx's ``HTML5Translator`` for Botocore documentation."""
 
-    STRONG_TO_H3_HEADINGS = [
-        "Example",
-        "Examples",
-        "Exceptions",
-        "Request Syntax",
-        "Response Structure",
-        "Response Syntax",
-        "Structure",
-        "Syntax",
+    IGNORE_IMPLICIT_HEADINGS = [
+        '[REQUIRED]',
     ]
 
     def visit_admonition(self, node, name=""):
@@ -39,24 +33,30 @@ class BotoHTML5Translator(SphinxHTML5Translator):
             )
             self.body.append(title)
 
-    def visit_strong(self, node):
-        """Visit a strong HTML element.
+    def is_implicit_heading(self, node):
+        """Determines if a node is an implicit heading.
 
-        Opens the h3 tag for a specific set of words/phrases and opens the
-        strong tag for all others.
+        An implicit heading is represented by a paragraph node whose only
+        child is a strong node with text that isnt in `IGNORE_IMPLICIT_HEADINGS`.
         """
-        if len(node) > 0 and node[0] in self.STRONG_TO_H3_HEADINGS:
-            self.body.append(self.starttag(node, "h3", ""))
-        else:
-            self.body.append(self.starttag(node, "strong", ""))
+        return (
+            len(node) == 1
+            and isinstance(node[0], nodes.strong)
+            and len(node[0]) == 1
+            and isinstance(node[0][0], nodes.Text)
+            and node[0][0].astext() not in self.IGNORE_IMPLICIT_HEADINGS
+        )
 
-    def depart_strong(self, node):
-        """Depart a strong HTML element.
+    def visit_paragraph(self, node):
+        """Visit a paragraph HTML element.
 
-        Closes the h3 tag for a specific set of words/phrases and closes the
-        strong tag for all others.
+        Replaces implicit headings with an h3 tag and defers to default
+        behavior for normal paragraph elements.
         """
-        if node[0] in self.STRONG_TO_H3_HEADINGS:
-            self.body.append("</h3>")
+        if self.is_implicit_heading(node):
+            text = node[0][0]
+            self.body.append(f'<h3>{text}</h3>\n')
+            # Do not visit the current nodes children or call its depart method.
+            raise nodes.SkipNode
         else:
-            self.body.append("</strong>")
+            super().visit_paragraph(node)
diff --git a/botocore/handlers.py b/botocore/handlers.py
index 3014123f9..9546c6112 100644
--- a/botocore/handlers.py
+++ b/botocore/handlers.py
@@ -1137,6 +1137,14 @@ def customize_endpoint_resolver_builtins(
         builtins[EndpointResolverBuiltins.AWS_S3_USE_GLOBAL_ENDPOINT] = True
 
 
+def remove_content_type_header_for_presigning(request, **kwargs):
+    if (
+        request.context.get('is_presign_request') is True
+        and 'Content-Type' in request.headers
+    ):
+        del request.headers['Content-Type']
+
+
 # This is a list of (event_name, handler).
 # When a Session is created, everything in this list will be
 # automatically registered with that Session.
@@ -1240,6 +1248,10 @@ BUILTIN_HANDLERS = [
     ('before-parameter-build.route53', fix_route53_ids),
     ('before-parameter-build.glacier', inject_account_id),
     ('before-sign.s3', remove_arn_from_signing_path),
+    (
+        'before-sign.polly.SynthesizeSpeech',
+        remove_content_type_header_for_presigning,
+    ),
     ('after-call.s3.ListObjects', decode_list_object),
     ('after-call.s3.ListObjectsV2', decode_list_object_v2),
     ('after-call.s3.ListObjectVersions', decode_list_object_versions),
diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css
index 357d1ec0d..5be72283d 100644
--- a/docs/source/_static/css/custom.css
+++ b/docs/source/_static/css/custom.css
@@ -31,7 +31,53 @@ h1, code, li {
 .sidebar-logo{
     padding: 20% 15%;
 }
-
+/* Hides a div by default. */
+.show-div-sm {
+    display: none;
+}
+/* Hides a div by default. */
+.show-div-md {
+    display: none;
+}
+/* Positions items starting from the right. */
+.justify-content-right {
+    justify-content: right;
+}
+/* Positions items starting from the left. */
+.justify-content-left {
+    justify-content: left;
+}
+/* Hides the sidebar and prevents keyboard users from focusing on elements. */
+.hide-sidebar {
+    visibility: hidden;
+}
+/* Hides the icon by default and applies relevant styling. */
+.nav-close-icon{
+    color: var(--color-foreground-secondary);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+}
+/* Safeguard for ensuring menus are always visible on larger screens. */
+@media (min-width: 82em) {
+    .hide-sidebar {
+        visibility: visible;
+    }
+}
+/* We only want to show the close-icon on medium-small screens. */
+@media (max-width: 67em) {
+    /* Displays a div on a small screen. */
+    .show-div-sm {
+        display: flex;
+    }
+}
+@media (max-width: 82em) {
+     /* Displays a div on a medium screen. */
+    .show-div-md {
+        display: flex;
+    }
+}
 /* Apply furo styled admonition titles for <h3>. */
 h3.admonition-title {
   position: relative;
diff --git a/docs/source/_static/js/custom.js b/docs/source/_static/js/custom.js
index 7d876350c..ebc1d59f3 100644
--- a/docs/source/_static/js/custom.js
+++ b/docs/source/_static/js/custom.js
@@ -100,10 +100,82 @@ function makeCodeBlocksScrollable() {
 		codeCell.tabIndex = 0;
 	});
 }
+// Determines which of the two table-of-contents menu labels is visible.
+function determineVisibleTocOpenMenu() {
+  const mediaQuery = window.matchMedia('(max-width: 67em)');
+  return mediaQuery.matches ? 'toc-menu-open-sm' : 'toc-menu-open-md';
+}
+
+// A mapping of current to next focus id's. For example, We want a corresponsing
+// menu's close button to be highlighted after a menu is opened with a keyboard.
+const NEXT_FOCUS_ID_MAP = {
+  'nav-menu-open': 'nav-menu-close',
+  'nav-menu-close': 'nav-menu-open',
+  'toc-menu-open-sm': 'toc-menu-close',
+  'toc-menu-open-md': 'toc-menu-close',
+  'toc-menu-close': determineVisibleTocOpenMenu(),
+};
+
+// Toggles the visibility of a sidebar menu to prevent keyboard focus on hidden elements.
+function toggleSidebarMenuVisibility(elementQuery, inputQuery) {
+  const sidebarElement = document.querySelector(elementQuery);
+  const sidebarInput = document.querySelector(inputQuery);
+  sidebarInput.addEventListener('change', () => {
+    setTimeout(
+      () => {
+        sidebarElement.classList.toggle('hide-sidebar', !sidebarInput.checked);
+      },
+      sidebarInput.checked ? 0 : 250,
+    );
+  });
+  window.matchMedia('(max-width: 67em)').addEventListener('change', (event) => {
+    NEXT_FOCUS_ID_MAP['toc-menu-close'] = determineVisibleTocOpenMenu();
+    if (!event.matches) {
+      document
+        .querySelector('.sidebar-drawer')
+        .classList.remove('hide-sidebar');
+    }
+  });
+  window.matchMedia('(max-width: 82em)').addEventListener('change', (event) => {
+    if (!event.matches) {
+      document.querySelector('.toc-drawer').classList.remove('hide-sidebar');
+    }
+  });
+}
+
+// Activates labels when a user focuses on them and clicks "Enter".
+// Also highlights the next appropriate input label.
+function activateLabelOnEnter() {
+  const labels = document.querySelectorAll('label');
+  labels.forEach((element) => {
+	element.setAttribute('tabindex', '0');
+    element.addEventListener('keypress', (event) => {
+      if (event.key === 'Enter') {
+        const targetId = element.getAttribute('for');
+        document.getElementById(targetId).click();
+        const nextFocusId = NEXT_FOCUS_ID_MAP[element.id];
+        if (nextFocusId) {
+          // Timeout is needed to let the label become visible.
+          setTimeout(() => {
+            document.getElementById(nextFocusId).focus();
+          }, 250);
+        }
+      }
+    });
+  });
+}
+
+// Improves accessibility for keyboard-only users.
+function setupKeyboardFriendlyNavigation() {
+  activateLabelOnEnter();
+  toggleSidebarMenuVisibility('.toc-drawer', '#__toc');
+  toggleSidebarMenuVisibility('.sidebar-drawer', '#__navigation');
+}
 // Functions to run after the DOM loads.
 function runAfterDOMLoads() {
 	expandSubMenu();
 	makeCodeBlocksScrollable();
+	setupKeyboardFriendlyNavigation();
 }
 // Run a function after the DOM loads.
 function ready(fn) {
diff --git a/docs/source/_templates/page.html b/docs/source/_templates/page.html
index 21e623cc1..e15a8c8d0 100644
--- a/docs/source/_templates/page.html
+++ b/docs/source/_templates/page.html
@@ -11,110 +11,241 @@ furnished to do so, subject to the following conditions:
 
 {%- extends "!page.html" %}
 
-{% block footer %}
-<div class="related-pages">
-    {% if next -%}
-    <a class="next-page" href="{{ next.link }}">
-        <div class="page-info">
-        <div class="context">
-            <span>{{ _("Next") }}</span>
-        </div>
-        <div class="title">{{ next.title }}</div>
-        </div>
-        <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-    </a>
-    {%- endif %}
-    {% if prev -%}
-    <a class="prev-page" href="{{ prev.link }}">
-        <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-        <div class="page-info">
-        <div class="context">
-            <span>{{ _("Previous") }}</span>
-        </div>
-        {% if prev.link == pathto(master_doc) %}
-        <div class="title">{{ _("Home") }}</div>
-        {% else %}
-        <div class="title">{{ prev.title }}</div>
-        {% endif %}
-        </div>
-    </a>
-    {%- endif %}
+{% block body -%}
+<script>
+    document.body.dataset.theme = localStorage.getItem("theme") || "auto";
+</script>
+{% include "partials/icons.html" %}
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+    <symbol id="svg-close" viewBox="0 0 24 24">
+        <title>Close Menu</title>
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke="currentColor"
+          stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
+            <line x1="2" y1="22" x2="22" y2="2"/>
+            <line x1="2" y1="2" x2="22" y2="22"/>
+        </svg>
+    </symbol>
+</svg>
+
+<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
+<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
+<label class="overlay sidebar-overlay" for="__navigation">
+  <div class="visually-hidden">Hide navigation sidebar</div>
+</label>
+<label class="overlay toc-overlay" for="__toc">
+  <div class="visually-hidden">Hide table of contents sidebar</div>
+</label>
+
+{% if theme_announcement -%}
+<div class="announcement">
+  <aside class="announcement-content">
+    {% block announcement %} {{ theme_announcement }} {% endblock announcement %}
+  </aside>
 </div>
-<div class="bottom-of-page">
-    <div class="left-details">
-    {%- if show_copyright %}
-    <div class="copyright">
-        {%- if hasdoc('copyright') %}
-        {% trans path=pathto('copyright'), copyright=copyright|e -%}
-            <a href="{{ path }}">Copyright</a> &#169; {{ copyright }}
-        {%- endtrans %}
-        {%- else %}
-        {% trans copyright=copyright|e -%}
-            Copyright &#169; {{ copyright }}
-        {%- endtrans %}
-        {%- endif %}
+{%- endif %}
+
+<div class="page">
+  <header class="mobile-header">
+    <div class="header-left">
+      <label class="nav-overlay-icon" id="nav-menu-open" for="__navigation" tabindex="0">
+        <div class="visually-hidden">Toggle site navigation sidebar</div>
+        <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
+      </label>
     </div>
-    {%- endif %}
-    {% trans %}Made with {% endtrans -%}
-    {%- if show_sphinx -%}
-    {% trans %}<a href="https://www.sphinx-doc.org/">Sphinx</a> and {% endtrans -%}
-    <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-    {% endif -%}
-    {% trans %}
-    <a href="https://github.com/pradyunsg/furo">Furo</a>
-    {% endtrans %}
-    {%- if last_updated -%}
-    <div class="last-updated">
-        {% trans last_updated=last_updated|e -%}
-        Last updated on {{ last_updated }}
-        {%- endtrans -%}
+    <div class="header-center">
+      <a href="{{ pathto(master_doc) }}"><div class="brand">{{ docstitle if docstitle else project }}</div></a>
     </div>
-    {%- endif %}
-
-    {# start of AWS modification of Furo template #}
-    <div class="legal-info">
-        <script type="text/javascript" src="{{ pathto('_static/shortbreadv1.js',1 ) }}"></script>
-        <script type="text/javascript">
-                const shortbread = AWSCShortbread({
-                    domain: ".amazonaws.com",
-    });
-                shortbread.checkForCookieConsent();
-        </script>
-        <a href="http://aws.amazon.com/privacy">Privacy</a> | <a href="http://aws.amazon.com/terms">Site Terms</a> | <a
-            href="#" onclick="shortbread.customizeCookies();">Cookie preferences</a>
+    <div class="header-right">
+      <div class="theme-toggle-container theme-toggle-header">
+        <button class="theme-toggle">
+          <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+          <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+          <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+          <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+        </button>
+      </div>
+      <label class="toc-overlay-icon toc-header-icon{% if furo_hide_toc %} no-toc{% endif %}" id="toc-menu-open-sm" for="__toc" tabindex="0">
+        <div class="visually-hidden">Toggle table of contents sidebar</div>
+        <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+      </label>
     </div>
-    {# end of AWS modification of Furo template #}
-
+  </header>
+  <aside class="sidebar-drawer">
+    <div class="sidebar-container">
+      {% block left_sidebar %}
+      <div class="sidebar-sticky">
+        {%- for sidebar_section in sidebars %}
+          {%- include sidebar_section %}
+        {%- endfor %}
+      </div>
+      {% endblock left_sidebar %}
     </div>
-    <div class="right-details">
-    {% if theme_footer_icons or READTHEDOCS -%}
-    <div class="icons">
-        {% if theme_footer_icons -%}
-        {% for icon_dict in theme_footer_icons -%}
-        <a class="muted-link {{ icon_dict.class }}" href="{{ icon_dict.url }}" aria-label="{{ icon_dict.name }}">
-        {{- icon_dict.html -}}
+  </aside>
+  <div class="main">
+    <div class="content">
+      <div class="article-container">
+        <a href="#" class="back-to-top muted-link">
+          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+            <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
+          </svg>
+          <span>{% trans %}Back to top{% endtrans %}</span>
         </a>
-        {% endfor %}
-        {%- else -%}
-        {#- Show Read the Docs project -#}
-        {%- if READTHEDOCS and slug -%}
-        <a class="muted-link" href="https://readthedocs.org/projects/{{ slug }}" aria-label="On Read the Docs">
-        <svg x="0px" y="0px" viewBox="-125 217 360 360" xml:space="preserve">
-            <path fill="currentColor" d="M39.2,391.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3 c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2 c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,391.3,40.4,391.1,39.2,391.3z M39.2,353.6c-4.2,0.6-7.1,4.4-6.5,8.5 c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4 c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,353.6,40.4,353.4,39.2,353.6z M39.2,315.9 c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8 c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9 C41.7,315.9,40.4,315.8,39.2,315.9z M39.2,278.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7 c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6 c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,278.2,40.4,278.1,39.2,278.3z M-13.6,238.5c-39.6,0.3-54.3,12.5-54.3,12.5v295.7 c0,0,14.4-12.4,60.8-10.5s55.9,18.2,112.9,19.3s71.3-8.8,71.3-8.8l0.8-301.4c0,0-25.6,7.3-75.6,7.7c-49.9,0.4-61.9-12.7-107.7-14.2 C-8.2,238.6-10.9,238.5-13.6,238.5z M19.5,257.8c0,0,24,7.9,68.3,10.1c37.5,1.9,75-3.7,75-3.7v267.9c0,0-19,10-66.5,6.6 C59.5,536.1,19,522.1,19,522.1L19.5,257.8z M-3.6,264.8c4.2,0,7.7,3.4,7.7,7.7c0,4.2-3.4,7.7-7.7,7.7c0,0-12.4,0.1-20,0.8 c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,0,0,0,0c0,0,11.3-6,27-7.5 C-16,264.9-3.6,264.8-3.6,264.8z M-11,302.6c4.2-0.1,7.4,0,7.4,0c4.2,0.5,7.2,4.3,6.7,8.5c-0.4,3.5-3.2,6.3-6.7,6.7 c0,0-12.4,0.1-20,0.8c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5 C-20.5,302.9-15.2,302.7-11,302.6z M-3.6,340.2c4.2,0,7.7,3.4,7.7,7.7s-3.4,7.7-7.7,7.7c0,0-12.4-0.1-20,0.7 c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5C-16,340.1-3.6,340.2-3.6,340.2z" />
-        </svg>
-        </a>
-        {%- endif -%}
-        {#- Show GitHub repository home -#}
-        {%- if READTHEDOCS and display_github and github_user != "None" and github_repo != "None" -%}
-        <a class="muted-link" href="https://github.com/{{ github_user }}/{{ github_repo }}" aria-label="On GitHub">
-        <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
-            <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
-        </svg>
-        </a>
-        {%- endif -%}
-        {%- endif %}
-    </div>
-    {%- endif %}
+        <div class="content-icon-container">
+          {% if theme_top_of_page_button == "edit" -%}
+          {%- include "components/edit-this-page.html" with context -%}
+          {%- elif theme_top_of_page_button != None -%}
+          {{ warning("Got an unsupported value for 'top_of_page_button'") }}
+          {%- endif -%}
+          {#- Theme toggle -#}
+          <div class="theme-toggle-container theme-toggle-content">
+            <button class="theme-toggle">
+              <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
+              <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
+              <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
+              <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
+            </button>
+          </div>
+          <label class="toc-overlay-icon toc-content-icon{% if furo_hide_toc %} no-toc{% endif %}" id="toc-menu-open-md" for="__toc" tabindex="0">
+            <div class="visually-hidden">Toggle table of contents sidebar</div>
+            <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
+          </label>
+        </div>
+        <article role="main">
+          {% block content %}{{ body }}{% endblock %}
+        </article>
+      </div>
+      <footer>
+        {% block footer %}
+        <div class="related-pages">
+          {% if next -%}
+            <a class="next-page" href="{{ next.link }}">
+              <div class="page-info">
+                <div class="context">
+                  <span>{{ _("Next") }}</span>
+                </div>
+                <div class="title">{{ next.title }}</div>
+              </div>
+              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+            </a>
+          {%- endif %}
+          {% if prev -%}
+            <a class="prev-page" href="{{ prev.link }}">
+              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
+              <div class="page-info">
+                <div class="context">
+                  <span>{{ _("Previous") }}</span>
+                </div>
+                {% if prev.link == pathto(master_doc) %}
+                <div class="title">{{ _("Home") }}</div>
+                {% else %}
+                <div class="title">{{ prev.title }}</div>
+                {% endif %}
+              </div>
+            </a>
+          {%- endif %}
+        </div>
+        <div class="bottom-of-page">
+          <div class="left-details">
+            {%- if show_copyright %}
+            <div class="copyright">
+              {%- if hasdoc('copyright') %}
+                {% trans path=pathto('copyright'), copyright=copyright|e -%}
+                  <a href="{{ path }}">Copyright</a> &#169; {{ copyright }}
+                {%- endtrans %}
+              {%- else %}
+                {% trans copyright=copyright|e -%}
+                  Copyright &#169; {{ copyright }}
+                {%- endtrans %}
+              {%- endif %}
+            </div>
+            {%- endif %}
+            {% trans %}Made with {% endtrans -%}
+            {%- if show_sphinx -%}
+            {% trans %}<a href="https://www.sphinx-doc.org/">Sphinx</a> and {% endtrans -%}
+            <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
+            {% endif -%}
+            {% trans %}
+            <a href="https://github.com/pradyunsg/furo">Furo</a>
+            {% endtrans %}
+            {%- if last_updated -%}
+            <div class="last-updated">
+              {% trans last_updated=last_updated|e -%}
+                Last updated on {{ last_updated }}
+              {%- endtrans -%}
+            </div>
+            {%- endif %}
+            {# start of AWS modification of Furo template #}
+            <div class="legal-info">
+                <script type="text/javascript" src="{{ pathto('_static/shortbreadv1.js',1 ) }}"></script>
+                <script type="text/javascript">
+                        const shortbread = AWSCShortbread({
+                            domain: ".amazonaws.com",
+            });
+                        shortbread.checkForCookieConsent();
+                </script>
+                <a href="http://aws.amazon.com/privacy">Privacy</a> | <a href="http://aws.amazon.com/terms">Site Terms</a> | <a
+                    href="#" onclick="shortbread.customizeCookies();">Cookie preferences</a>
+            </div>
+            {# end of AWS modification of Furo template #}
+          </div>
+          <div class="right-details">
+            {% if theme_footer_icons or READTHEDOCS -%}
+            <div class="icons">
+              {% if theme_footer_icons -%}
+              {% for icon_dict in theme_footer_icons -%}
+              <a class="muted-link {{ icon_dict.class }}" href="{{ icon_dict.url }}" aria-label="{{ icon_dict.name }}">
+                {{- icon_dict.html -}}
+              </a>
+              {% endfor %}
+              {%- else -%}
+              {#- Show Read the Docs project -#}
+              {%- if READTHEDOCS and slug -%}
+              <a class="muted-link" href="https://readthedocs.org/projects/{{ slug }}" aria-label="On Read the Docs">
+                <svg x="0px" y="0px" viewBox="-125 217 360 360" xml:space="preserve">
+                  <path fill="currentColor" d="M39.2,391.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3 c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2 c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,391.3,40.4,391.1,39.2,391.3z M39.2,353.6c-4.2,0.6-7.1,4.4-6.5,8.5 c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4 c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,353.6,40.4,353.4,39.2,353.6z M39.2,315.9 c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8 c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9 C41.7,315.9,40.4,315.8,39.2,315.9z M39.2,278.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7 c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6 c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,278.2,40.4,278.1,39.2,278.3z M-13.6,238.5c-39.6,0.3-54.3,12.5-54.3,12.5v295.7 c0,0,14.4-12.4,60.8-10.5s55.9,18.2,112.9,19.3s71.3-8.8,71.3-8.8l0.8-301.4c0,0-25.6,7.3-75.6,7.7c-49.9,0.4-61.9-12.7-107.7-14.2 C-8.2,238.6-10.9,238.5-13.6,238.5z M19.5,257.8c0,0,24,7.9,68.3,10.1c37.5,1.9,75-3.7,75-3.7v267.9c0,0-19,10-66.5,6.6 C59.5,536.1,19,522.1,19,522.1L19.5,257.8z M-3.6,264.8c4.2,0,7.7,3.4,7.7,7.7c0,4.2-3.4,7.7-7.7,7.7c0,0-12.4,0.1-20,0.8 c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,0,0,0,0c0,0,11.3-6,27-7.5 C-16,264.9-3.6,264.8-3.6,264.8z M-11,302.6c4.2-0.1,7.4,0,7.4,0c4.2,0.5,7.2,4.3,6.7,8.5c-0.4,3.5-3.2,6.3-6.7,6.7 c0,0-12.4,0.1-20,0.8c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5 C-20.5,302.9-15.2,302.7-11,302.6z M-3.6,340.2c4.2,0,7.7,3.4,7.7,7.7s-3.4,7.7-7.7,7.7c0,0-12.4-0.1-20,0.7 c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5C-16,340.1-3.6,340.2-3.6,340.2z" />
+                </svg>
+              </a>
+              {%- endif -%}
+              {#- Show GitHub repository home -#}
+              {%- if READTHEDOCS and display_github and github_user != "None" and github_repo != "None" -%}
+              <a class="muted-link" href="https://github.com/{{ github_user }}/{{ github_repo }}" aria-label="On GitHub">
+                <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
+                  <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
+                </svg>
+              </a>
+              {%- endif -%}
+              {%- endif %}
+            </div>
+            {%- endif %}
+          </div>
+        </div>
+        {% endblock footer %}
+      </footer>
     </div>
+    <aside class="toc-drawer{% if furo_hide_toc %} no-toc{% endif %}">
+      {% block right_sidebar %}
+      {% if not furo_hide_toc %}
+      <div class="toc-sticky toc-scroll">
+        <div class="sidebar-div show-div-md justify-content-left">
+            <label class="nav-close-icon" id="toc-menu-close" for="__toc" tabindex="0">
+                <div class="visually-hidden">Toggle site table of content right sidebar</div>
+                <i class="icon"><svg><use href="#svg-close"></use></svg></i>
+            </label>
+        </div>
+        <div class="toc-title-container">
+          <span class="toc-title">
+            {{ _("On this page") }}
+          </span>
+        </div>
+        <div class="toc-tree-container">
+          <div class="toc-tree">
+            {{ toc }}
+          </div>
+        </div>
+      </div>
+      {% endif %}
+      {% endblock right_sidebar %}
+    </aside>
+  </div>
 </div>
-{% endblock footer %}
+{%- endblock %}
diff --git a/docs/source/_templates/sidebar/close-icon.html b/docs/source/_templates/sidebar/close-icon.html
new file mode 100644
index 000000000..f767d9b9c
--- /dev/null
+++ b/docs/source/_templates/sidebar/close-icon.html
@@ -0,0 +1,6 @@
+<div class="sidebar-div show-div-sm justify-content-right">
+    <label class="nav-close-icon" id="nav-menu-close" for="__navigation" tabindex="0">
+        <div class="visually-hidden">Toggle site navigation sidebar</div>
+        <i class="icon"><svg><use href="#svg-close"></use></svg></i>
+    </label>
+</div>
diff --git a/docs/source/conf.py b/docs/source/conf.py
index e27043acb..3019c5607 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -59,7 +59,7 @@ copyright = f'{current_year}, Amazon Web Services, Inc'
 # The short X.Y version.
 version = '1.29.1'
 # The full version, including alpha/beta/rc tags.
-release = '1.29.140'
+release = '1.29.141'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -169,6 +169,7 @@ html_js_files = [
 html_show_sourcelink = False
 html_sidebars = {
     "**": [
+        "sidebar/close-icon.html",
         "sidebar/brand.html",
         "sidebar/search.html",
         "sidebar/scroll-start.html",


Test patch:
diff --git a/tests/functional/endpoint-rules/codepipeline/endpoint-tests-1.json b/tests/functional/endpoint-rules/codepipeline/endpoint-tests-1.json
index ceec040eb..ef8ca7819 100644
--- a/tests/functional/endpoint-rules/codepipeline/endpoint-tests-1.json
+++ b/tests/functional/endpoint-rules/codepipeline/endpoint-tests-1.json
@@ -1,42 +1,42 @@
 {
     "testCases": [
         {
-            "documentation": "For region ap-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.ap-south-1.api.aws"
+                    "url": "https://codepipeline.ap-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-south-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "ap-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.ap-south-1.amazonaws.com"
+                    "url": "https://codepipeline.ap-northeast-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-south-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.ap-south-1.api.aws"
+                    "url": "https://codepipeline.ap-northeast-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-south-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "ap-northeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -48,1217 +48,546 @@
             },
             "params": {
                 "Region": "ap-south-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-south-1.api.aws"
+                    "url": "https://codepipeline.ap-southeast-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "ap-southeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-south-1.amazonaws.com"
+                    "url": "https://codepipeline.ap-southeast-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-south-1.api.aws"
+                    "url": "https://codepipeline.ca-central-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "ca-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-south-1.amazonaws.com"
+                    "url": "https://codepipeline-fips.ca-central-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "ca-central-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.us-gov-east-1.api.aws"
+                    "url": "https://codepipeline.eu-central-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "eu-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://codepipeline.eu-north-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "eu-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-gov-east-1.api.aws"
+                    "url": "https://codepipeline.eu-south-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "eu-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-gov-east-1.amazonaws.com"
+                    "url": "https://codepipeline.eu-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ca-central-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.ca-central-1.api.aws"
+                    "url": "https://codepipeline.eu-west-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ca-central-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "eu-west-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.ca-central-1.amazonaws.com"
+                    "url": "https://codepipeline.eu-west-3.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ca-central-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "eu-west-3",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.ca-central-1.api.aws"
+                    "url": "https://codepipeline.sa-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ca-central-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "sa-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.ca-central-1.amazonaws.com"
+                    "url": "https://codepipeline.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ca-central-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-central-1.api.aws"
+                    "url": "https://codepipeline-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-central-1.amazonaws.com"
+                    "url": "https://codepipeline.us-east-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-east-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-central-1.api.aws"
+                    "url": "https://codepipeline-fips.us-east-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-east-2",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-central-1.amazonaws.com"
+                    "url": "https://codepipeline.us-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.us-west-1.api.aws"
+                    "url": "https://codepipeline-fips.us-west-1.amazonaws.com"
                 }
             },
             "params": {
                 "Region": "us-west-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.us-west-1.amazonaws.com"
+                    "url": "https://codepipeline.us-west-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-west-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-west-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-west-1.api.aws"
+                    "url": "https://codepipeline-fips.us-west-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-west-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-west-2",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-west-1.amazonaws.com"
+                    "url": "https://codepipeline-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-west-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.us-west-2.api.aws"
+                    "url": "https://codepipeline.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-west-2",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.us-west-2.amazonaws.com"
+                    "url": "https://codepipeline.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-2",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-west-2.api.aws"
+                    "url": "https://codepipeline.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-2",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-west-2.amazonaws.com"
+                    "url": "https://codepipeline-fips.cn-north-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-2",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region af-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.af-south-1.api.aws"
+                    "url": "https://codepipeline-fips.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "af-south-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region af-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.af-south-1.amazonaws.com"
+                    "url": "https://codepipeline.cn-north-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "af-south-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.af-south-1.api.aws"
+                    "url": "https://codepipeline.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "af-south-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.af-south-1.amazonaws.com"
+                    "url": "https://codepipeline-fips.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "af-south-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-north-1.api.aws"
+                    "url": "https://codepipeline-fips.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-north-1.amazonaws.com"
+                    "url": "https://codepipeline-fips.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-north-1.api.aws"
+                    "url": "https://codepipeline.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-north-1.amazonaws.com"
+                    "url": "https://codepipeline.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.eu-west-3.api.aws"
-                }
+                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-west-3.amazonaws.com"
+                    "url": "https://codepipeline-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.eu-west-3.api.aws"
-                }
+                "error": "DualStack is enabled but this partition does not support DualStack"
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.eu-west-3.amazonaws.com"
+                    "url": "https://codepipeline.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.eu-west-2.api.aws"
-                }
+                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
             },
             "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline-fips.eu-west-2.amazonaws.com"
+                    "url": "https://codepipeline-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.eu-west-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.eu-west-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.eu-west-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-northeast-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-northeast-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-northeast-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-northeast-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region me-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.me-south-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "me-south-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region me-south-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.me-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "me-south-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.me-south-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "me-south-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.me-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "me-south-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.sa-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.sa-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.sa-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.sa-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.us-gov-west-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.us-gov-west-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-southeast-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-southeast-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-southeast-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-southeast-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.us-east-1.amazonaws.com"
-                }
+                "error": "DualStack is enabled but this partition does not support DualStack"
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-east-1.api.aws"
+                    "url": "https://codepipeline.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://codepipeline.us-east-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
                 "Region": "us-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.us-east-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.us-east-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.cn-northwest-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-northwest-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline-fips.cn-northwest-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-northwest-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.cn-northwest-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-northwest-1",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://codepipeline.cn-northwest-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-northwest-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": false,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -1269,8 +598,8 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": true,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -1281,10 +610,16 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": true,
                 "UseFIPS": false,
+                "UseDualStack": true,
                 "Endpoint": "https://example.com"
             }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
         }
     ],
     "version": "1.0"
diff --git a/tests/unit/test_signers.py b/tests/unit/test_signers.py
index 5b05c7fea..92a3d5da3 100644
--- a/tests/unit/test_signers.py
+++ b/tests/unit/test_signers.py
@@ -13,6 +13,7 @@
 import datetime
 import json
 
+import pytest
 from dateutil.tz import tzutc
 
 import botocore
@@ -39,6 +40,13 @@ from botocore.signers import (
 from tests import assert_url_equal, mock, unittest
 
 
+@pytest.fixture
+def polly_client():
+    session = botocore.session.get_session()
+    session.set_credentials('key', 'secret')
+    return session.create_client('polly', region_name='us-west-2')
+
+
 class BaseSignerTest(unittest.TestCase):
     def setUp(self):
         self.credentials = Credentials('key', 'secret')
@@ -1168,3 +1176,23 @@ class TestGenerateDBAuthToken(BaseSignerTest):
         self.assertIn(region, result)
         # The hostname won't be changed even if a different region is specified
         self.assertIn(hostname, result)
+
+
+@pytest.mark.parametrize(
+    'request_method',
+    ['GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'DELETE', None],
+)
+def test_generate_presigned_url_content_type_removal_for_polly(
+    polly_client,
+    request_method,
+):
+    url = polly_client.generate_presigned_url(
+        'synthesize_speech',
+        Params={
+            'OutputFormat': 'mp3',
+            'Text': 'Hello world!',
+            'VoiceId': 'Joanna',
+        },
+        HttpMethod=request_method,
+    )
+    assert 'content-type' not in url.lower()