Repository: aws/aws-sdk-go
Pull request #3194 (2020-03-09 21:52:15)

aws/session: Support Shared Config Role Duration Config Option
Adds support for the `duration_seconds` shared config option for assume role credential provider.


Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 24e2380c2..b25d1ebc1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,21 @@
+Release v1.29.21 (2020-03-10)
+===
+
+### Service Client Updates
+* `service/ec2`: Updates service API and documentation
+  * Documentation updates for EC2
+* `service/iotevents`: Updates service API and documentation
+* `service/marketplacecommerceanalytics`: Updates service documentation
+  * Change the disbursement data set to look past 31 days instead until the beginning of the month.
+* `service/serverlessrepo`: Updates service API and documentation
+
+### SDK Enhancements
+* `aws/credentials`: Clarify `token` usage in `NewStaticCredentials` documentation.
+  * Related to [#3162](https://github.com/aws/aws-sdk-go/issues/3162).
+* `service/s3/s3manager`: Improve memory allocation behavior by replacing sync.Pool with custom pool implementation ([#3183](https://github.com/aws/aws-sdk-go/pull/3183))
+  * Improves memory allocations that occur when the provided `io.Reader` to upload does not satisfy both the `io.ReaderAt` and `io.ReadSeeker` interfaces.
+  * Fixes [#3075](https://github.com/aws/aws-sdk-go/issues/3075)
+
 Release v1.29.20 (2020-03-09)
 ===
 
diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md
index de4535194..8a1927a39 100644
--- a/CHANGELOG_PENDING.md
+++ b/CHANGELOG_PENDING.md
@@ -1,7 +1,5 @@
 ### SDK Features
 
 ### SDK Enhancements
-* `aws/credentials`: Clarify `token` usage in `NewStaticCredentials` documentation.
-    * Related to [#3162](https://github.com/aws/aws-sdk-go/issues/3162).
 
 ### SDK Bugs
diff --git a/aws/session/credentials.go b/aws/session/credentials.go
index cc64e24f1..fe6dac1f4 100644
--- a/aws/session/credentials.go
+++ b/aws/session/credentials.go
@@ -3,6 +3,7 @@ package session
 import (
 	"fmt"
 	"os"
+	"time"
 
 	"github.com/aws/aws-sdk-go/aws"
 	"github.com/aws/aws-sdk-go/aws/awserr"
@@ -206,7 +207,14 @@ func credsFromAssumeRole(cfg aws.Config,
 		sharedCfg.RoleARN,
 		func(opt *stscreds.AssumeRoleProvider) {
 			opt.RoleSessionName = sharedCfg.RoleSessionName
-			opt.Duration = sessOpts.AssumeRoleDuration
+
+			if sessOpts.AssumeRoleDuration == 0 &&
+				sharedCfg.AssumeRoleDuration != nil &&
+				*sharedCfg.AssumeRoleDuration/time.Minute > 15 {
+				opt.Duration = *sharedCfg.AssumeRoleDuration
+			} else if sessOpts.AssumeRoleDuration != 0 {
+				opt.Duration = sessOpts.AssumeRoleDuration
+			}
 
 			// Assume role with external ID
 			if len(sharedCfg.ExternalID) > 0 {
diff --git a/aws/session/shared_config.go b/aws/session/shared_config.go
index a8ed88076..680805a38 100644
--- a/aws/session/shared_config.go
+++ b/aws/session/shared_config.go
@@ -2,6 +2,7 @@ package session
 
 import (
 	"fmt"
+	"time"
 
 	"github.com/aws/aws-sdk-go/aws/awserr"
 	"github.com/aws/aws-sdk-go/aws/credentials"
@@ -16,12 +17,13 @@ const (
 	sessionTokenKey = `aws_session_token`     // optional
 
 	// Assume Role Credentials group
-	roleArnKey          = `role_arn`          // group required
-	sourceProfileKey    = `source_profile`    // group required (or credential_source)
-	credentialSourceKey = `credential_source` // group required (or source_profile)
-	externalIDKey       = `external_id`       // optional
-	mfaSerialKey        = `mfa_serial`        // optional
-	roleSessionNameKey  = `role_session_name` // optional
+	roleArnKey             = `role_arn`          // group required
+	sourceProfileKey       = `source_profile`    // group required (or credential_source)
+	credentialSourceKey    = `credential_source` // group required (or source_profile)
+	externalIDKey          = `external_id`       // optional
+	mfaSerialKey           = `mfa_serial`        // optional
+	roleSessionNameKey     = `role_session_name` // optional
+	roleDurationSecondsKey = "duration_seconds"  // optional
 
 	// CSM options
 	csmEnabledKey  = `csm_enabled`
@@ -73,10 +75,11 @@ type sharedConfig struct {
 	CredentialProcess    string
 	WebIdentityTokenFile string
 
-	RoleARN         string
-	RoleSessionName string
-	ExternalID      string
-	MFASerial       string
+	RoleARN            string
+	RoleSessionName    string
+	ExternalID         string
+	MFASerial          string
+	AssumeRoleDuration *time.Duration
 
 	SourceProfileName string
 	SourceProfile     *sharedConfig
@@ -274,6 +277,11 @@ func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile, e
 		updateString(&cfg.CredentialSource, section, credentialSourceKey)
 		updateString(&cfg.Region, section, regionKey)
 
+		if section.Has(roleDurationSecondsKey) {
+			d := time.Duration(section.Int(roleDurationSecondsKey)) * time.Second
+			cfg.AssumeRoleDuration = &d
+		}
+
 		if v := section.String(stsRegionalEndpointSharedKey); len(v) != 0 {
 			sre, err := endpoints.GetSTSRegionalEndpoint(v)
 			if err != nil {
diff --git a/aws/version.go b/aws/version.go
index c3c3b2b2a..fc907e402 100644
--- a/aws/version.go
+++ b/aws/version.go
@@ -5,4 +5,4 @@ package aws
 const SDKName = "aws-sdk-go"
 
 // SDKVersion is the version of this SDK
-const SDKVersion = "1.29.20"
+const SDKVersion = "1.29.21"
diff --git a/models/apis/ec2/2016-11-15/api-2.json b/models/apis/ec2/2016-11-15/api-2.json
index 4cfbd156c..43677263a 100755
--- a/models/apis/ec2/2016-11-15/api-2.json
+++ b/models/apis/ec2/2016-11-15/api-2.json
@@ -3927,7 +3927,7 @@
     "AllocationIdList":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"AllocationId",
         "locationName":"AllocationId"
       }
     },
@@ -5075,7 +5075,7 @@
       "required":["ExportTaskId"],
       "members":{
         "ExportTaskId":{
-          "shape":"ExportTaskId",
+          "shape":"ExportVmTaskId",
           "locationName":"exportTaskId"
         }
       }
@@ -5349,7 +5349,7 @@
     "CapacityReservationIdSet":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"CapacityReservationId",
         "locationName":"item"
       }
     },
@@ -5596,6 +5596,7 @@
         "UploadStart":{"shape":"DateTime"}
       }
     },
+    "ClientVpnAssociationId":{"type":"string"},
     "ClientVpnAuthentication":{
       "type":"structure",
       "members":{
@@ -5925,7 +5926,7 @@
     "ClientVpnSecurityGroupIdSet":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"SecurityGroupId",
         "locationName":"item"
       }
     },
@@ -5982,7 +5983,7 @@
     "CoipPoolIdSet":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"CoipPoolId",
         "locationName":"item"
       }
     },
@@ -6600,7 +6601,7 @@
       "type":"structure",
       "members":{
         "FleetId":{
-          "shape":"FleetIdentifier",
+          "shape":"FleetId",
           "locationName":"fleetId"
         },
         "Errors":{
@@ -7512,7 +7513,7 @@
       ],
       "members":{
         "TransitGatewayId":{"shape":"TransitGatewayId"},
-        "PeerTransitGatewayId":{"shape":"String"},
+        "PeerTransitGatewayId":{"shape":"TransitAssociationGatewayId"},
         "PeerAccountId":{"shape":"String"},
         "PeerRegion":{"shape":"String"},
         "TagSpecifications":{
@@ -8130,7 +8131,7 @@
           "locationName":"error"
         },
         "FleetId":{
-          "shape":"FleetIdentifier",
+          "shape":"FleetId",
           "locationName":"fleetId"
         }
       }
@@ -8154,7 +8155,7 @@
           "locationName":"previousFleetState"
         },
         "FleetId":{
-          "shape":"FleetIdentifier",
+          "shape":"FleetId",
           "locationName":"fleetId"
         }
       }
@@ -9780,7 +9781,7 @@
         "EventType":{"shape":"FleetEventType"},
         "MaxResults":{"shape":"Integer"},
         "NextToken":{"shape":"String"},
-        "FleetId":{"shape":"FleetIdentifier"},
+        "FleetId":{"shape":"FleetId"},
         "StartTime":{"shape":"DateTime"}
       }
     },
@@ -9800,7 +9801,7 @@
           "locationName":"nextToken"
         },
         "FleetId":{
-          "shape":"FleetIdentifier",
+          "shape":"FleetId",
           "locationName":"fleetId"
         },
         "StartTime":{
@@ -9816,7 +9817,7 @@
         "DryRun":{"shape":"Boolean"},
         "MaxResults":{"shape":"Integer"},
         "NextToken":{"shape":"String"},
-        "FleetId":{"shape":"FleetIdentifier"},
+        "FleetId":{"shape":"FleetId"},
         "Filters":{
           "shape":"FilterList",
           "locationName":"Filter"
@@ -9835,7 +9836,7 @@
           "locationName":"nextToken"
         },
         "FleetId":{
-          "shape":"FleetIdentifier",
+          "shape":"FleetId",
           "locationName":"fleetId"
         }
       }
@@ -12250,7 +12251,7 @@
       ],
       "members":{
         "Attribute":{"shape":"VpcAttributeName"},
-        "VpcId":{"shape":"String"},
+        "VpcId":{"shape":"VpcId"},
         "DryRun":{
           "shape":"Boolean",
           "locationName":"dryRun"
@@ -13060,7 +13061,7 @@
       ],
       "members":{
         "ClientVpnEndpointId":{"shape":"ClientVpnEndpointId"},
-        "AssociationId":{"shape":"String"},
+        "AssociationId":{"shape":"ClientVpnAssociationId"},
         "DryRun":{"shape":"Boolean"}
       }
     },
@@ -14164,7 +14165,7 @@
     "ExportTaskIdStringList":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"ExportTaskId",
         "locationName":"ExportTaskId"
       }
     },
@@ -14272,6 +14273,7 @@
         }
       }
     },
+    "ExportVmTaskId":{"type":"string"},
     "FailedQueuedPurchaseDeletion":{
       "type":"structure",
       "members":{
@@ -14344,7 +14346,7 @@
           "locationName":"createTime"
         },
         "FleetId":{
-          "shape":"FleetIdentifier",
+          "shape":"FleetId",
           "locationName":"fleetId"
         },
         "FleetState":{
@@ -14432,11 +14434,11 @@
         "termination"
       ]
     },
+    "FleetId":{"type":"string"},
     "FleetIdSet":{
       "type":"list",
-      "member":{"shape":"FleetIdentifier"}
+      "member":{"shape":"FleetId"}
     },
-    "FleetIdentifier":{"type":"string"},
     "FleetLaunchTemplateConfig":{
       "type":"structure",
       "members":{
@@ -16347,7 +16349,7 @@
           "locationName":"privateIpAddress"
         },
         "SubnetId":{
-          "shape":"String",
+          "shape":"SubnetId",
           "locationName":"subnetId"
         },
         "UserData":{
@@ -18680,7 +18682,7 @@
         "Encrypted":{"shape":"Boolean"},
         "DeleteOnTermination":{"shape":"Boolean"},
         "Iops":{"shape":"Integer"},
-        "KmsKeyId":{"shape":"String"},
+        "KmsKeyId":{"shape":"KmsKeyId"},
         "SnapshotId":{"shape":"SnapshotId"},
         "VolumeSize":{"shape":"Integer"},
         "VolumeType":{"shape":"VolumeType"}
@@ -19792,7 +19794,7 @@
       "members":{
         "DryRun":{"shape":"Boolean"},
         "ExcessCapacityTerminationPolicy":{"shape":"FleetExcessCapacityTerminationPolicy"},
-        "FleetId":{"shape":"FleetIdentifier"},
+        "FleetId":{"shape":"FleetId"},
         "TargetCapacitySpecification":{"shape":"TargetCapacitySpecificationRequest"}
       }
     },
@@ -24369,13 +24371,13 @@
           "shape":"InstanceIpv6AddressList",
           "locationName":"Ipv6Address"
         },
-        "KernelId":{"shape":"String"},
+        "KernelId":{"shape":"KernelId"},
         "KeyName":{"shape":"KeyPairName"},
         "MaxCount":{"shape":"Integer"},
         "MinCount":{"shape":"Integer"},
         "Monitoring":{"shape":"RunInstancesMonitoringEnabled"},
         "Placement":{"shape":"Placement"},
-        "RamdiskId":{"shape":"String"},
+        "RamdiskId":{"shape":"RamdiskId"},
         "SecurityGroupIds":{
           "shape":"SecurityGroupIdStringList",
           "locationName":"SecurityGroupId"
@@ -24384,7 +24386,7 @@
           "shape":"SecurityGroupStringList",
           "locationName":"SecurityGroup"
         },
-        "SubnetId":{"shape":"String"},
+        "SubnetId":{"shape":"SubnetId"},
         "UserData":{"shape":"String"},
         "AdditionalInfo":{
           "shape":"String",
@@ -26608,7 +26610,7 @@
       "required":["ClientVpnEndpointId"],
       "members":{
         "ClientVpnEndpointId":{"shape":"ClientVpnEndpointId"},
-        "ConnectionId":{"shape":"String"},
+        "ConnectionId":{"shape":"VpnConnectionId"},
         "Username":{"shape":"String"},
         "DryRun":{"shape":"Boolean"}
       }
@@ -26984,6 +26986,7 @@
         "ALL"
       ]
     },
+    "TransitAssociationGatewayId":{"type":"string"},
     "TransitGateway":{
       "type":"structure",
       "members":{
@@ -27316,7 +27319,7 @@
     "TransitGatewayMulticastDomainIdStringList":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"TransitGatewayMulticastDomainId",
         "locationName":"item"
       }
     },
@@ -27683,7 +27686,7 @@
     "TransitGatewayRouteTableIdStringList":{
       "type":"list",
       "member":{
-        "shape":"String",
+        "shape":"TransitGatewayRouteTableId",
         "locationName":"item"
       }
     },
diff --git a/models/apis/ec2/2016-11-15/docs-2.json b/models/apis/ec2/2016-11-15/docs-2.json
index 330b48881..d70b1fbf2 100755
--- a/models/apis/ec2/2016-11-15/docs-2.json
+++ b/models/apis/ec2/2016-11-15/docs-2.json
@@ -288,7 +288,7 @@
     "ExportClientVpnClientCertificateRevocationList": "<p>Downloads the client certificate revocation list for the specified Client VPN endpoint.</p>",
     "ExportClientVpnClientConfiguration": "<p>Downloads the contents of the Client VPN endpoint configuration file for the specified Client VPN endpoint. The Client VPN endpoint configuration file includes the Client VPN endpoint and certificate information clients need to establish a connection with the Client VPN endpoint.</p>",
     "ExportImage": "<p>Exports an Amazon Machine Image (AMI) to a VM file. For more information, see <a href=\"https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html\">Exporting a VM Directory from an Amazon Machine Image (AMI)</a> in the <i>VM Import/Export User Guide</i>.</p>",
-    "ExportTransitGatewayRoutes": "<p>Exports routes from the specified transit gateway route table to the specified S3 bucket. By default, all routes are exported. Alternatively, you can filter by CIDR range.</p>",
+    "ExportTransitGatewayRoutes": "<p>Exports routes from the specified transit gateway route table to the specified S3 bucket. By default, all routes are exported. Alternatively, you can filter by CIDR range.</p> <p>The routes are saved to the specified bucket in a JSON file. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables\">Export Route Tables to Amazon S3</a> in <i>Transit Gateways</i>.</p>",
     "GetAssociatedIpv6PoolCidrs": "<p>Gets information about the IPv6 CIDR block associations for a specified IPv6 address pool.</p>",
     "GetCapacityReservationUsage": "<p>Gets usage information about a Capacity Reservation. If the Capacity Reservation is shared, it shows usage information for the Capacity Reservation owner and each AWS account that is currently using the shared capacity. If the Capacity Reservation is not shared, it shows only the Capacity Reservation owner's usage.</p>",
     "GetCoipPoolUsage": "<p>Describes the allocations from the specified customer-owned address pool.</p>",
@@ -311,7 +311,7 @@
     "ImportKeyPair": "<p>Imports the public key from an RSA key pair that you created with a third-party tool. Compare this with <a>CreateKeyPair</a>, in which AWS creates the key pair and gives the keys to you (AWS keeps a copy of the public key). With ImportKeyPair, you create the key pair and give AWS just the public key. The private key is never transferred between you and AWS.</p> <p>For more information about key pairs, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html\">Key Pairs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
     "ImportSnapshot": "<p>Imports a disk into an EBS snapshot.</p>",
     "ImportVolume": "<p>Creates an import volume task using metadata from the specified disk image.For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/importing-your-volumes-into-amazon-ebs.html\">Importing Disks to Amazon EBS</a>.</p> <p>For information about the import manifest referenced by this API action, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html\">VM Import Manifest</a>.</p>",
-    "ModifyAvailabilityZoneGroup": "<p>Enables or disables a Zone Group for your account. To use Local Zones, you must first enable the Zone Group.</p>",
+    "ModifyAvailabilityZoneGroup": "<p>Enables or disables an Availability Zone group for your account.</p> <p>Use <a href=\"https://docs.aws.amazon.com/AWSEC2ApiDocReef/build/server-root/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html\">describe-availability-zones</a> to view the value for <code>GroupName</code>.</p>",
     "ModifyCapacityReservation": "<p>Modifies a Capacity Reservation's capacity and the conditions under which it is to be released. You cannot change a Capacity Reservation's instance type, EBS optimization, instance store settings, platform, Availability Zone, or instance eligibility. If you need to modify any of these attributes, we recommend that you cancel the Capacity Reservation, and then create a new one with the required attributes.</p>",
     "ModifyClientVpnEndpoint": "<p>Modifies the specified Client VPN endpoint. Modifying the DNS server resets existing client connections.</p>",
     "ModifyDefaultCreditSpecification": "<p>Modifies the default credit option for CPU usage of burstable performance instances. The default credit option is set at the account level per AWS Region, and is specified per instance family. All new burstable performance instances in the account launch using the default credit option.</p> <p> <code>ModifyDefaultCreditSpecification</code> is an asynchronous operation, which works at an AWS Region level and modifies the credit option for each Availability Zone. All zones in a Region are updated within five minutes. But if instances are launched during this operation, they might not get the new credit option until the zone is updated. To verify whether the update has occurred, you can call <code>GetDefaultCreditSpecification</code> and check <code>DefaultCreditSpecification</code> for updates.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html\">Burstable Performance Instances</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
@@ -373,7 +373,7 @@
     "ReplaceRouteTableAssociation": "<p>Changes the route table associated with a given subnet, internet gateway, or virtual private gateway in a VPC. After the operation completes, the subnet or gateway uses the routes in the new route table. For more information about route tables, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html\">Route Tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p> <p>You can also use this operation to change which table is the main route table in the VPC. Specify the main route table's association ID and the route table ID of the new main route table.</p>",
     "ReplaceTransitGatewayRoute": "<p>Replaces the specified route in the specified transit gateway route table.</p>",
     "ReportInstanceStatus": "<p>Submits feedback about the status of an instance. The instance must be in the <code>running</code> state. If your experience with the instance differs from the instance status returned by <a>DescribeInstanceStatus</a>, use <a>ReportInstanceStatus</a> to report your experience with the instance. Amazon EC2 collects this information to improve the accuracy of status checks.</p> <p>Use of this action does not change the value returned by <a>DescribeInstanceStatus</a>.</p>",
-    "RequestSpotFleet": "<p>Creates a Spot Fleet request.</p> <p>The Spot Fleet request specifies the total target capacity and the On-Demand target capacity. Amazon EC2 calculates the difference between the total capacity and On-Demand capacity, and launches the difference as Spot capacity.</p> <p>You can submit a single request that includes multiple launch specifications that vary by instance type, AMI, Availability Zone, or subnet.</p> <p>By default, the Spot Fleet requests Spot Instances in the Spot Instance pool where the price per unit is the lowest. Each launch specification can include its own instance weighting that reflects the value of the instance type to your application workload.</p> <p>Alternatively, you can specify that the Spot Fleet distribute the target capacity across the Spot pools included in its launch specifications. By ensuring that the Spot Instances in your Spot Fleet are in different Spot pools, you can improve the availability of your fleet.</p> <p>You can specify tags for the Spot Fleet and Spot Instances. You cannot tag other resource types in a Spot Fleet request because only the <code>spot-fleet-request</code> and <code>instance</code> resource types are supported.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html\">Spot Fleet Requests</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>",
+    "RequestSpotFleet": "<p>Creates a Spot Fleet request.</p> <p>The Spot Fleet request specifies the total target capacity and the On-Demand target capacity. Amazon EC2 calculates the difference between the total capacity and On-Demand capacity, and launches the difference as Spot capacity.</p> <p>You can submit a single request that includes multiple launch specifications that vary by instance type, AMI, Availability Zone, or subnet.</p> <p>By default, the Spot Fleet requests Spot Instances in the Spot Instance pool where the price per unit is the lowest. Each launch specification can include its own instance weighting that reflects the value of the instance type to your application workload.</p> <p>Alternatively, you can specify that the Spot Fleet distribute the target capacity across the Spot pools included in its launch specifications. By ensuring that the Spot Instances in your Spot Fleet are in different Spot pools, you can improve the availability of your fleet.</p> <p>You can specify tags for the Spot Fleet request and instances launched by the fleet. You cannot tag other resource types in a Spot Fleet request because only the <code>spot-fleet-request</code> and <code>instance</code> resource types are supported.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html\">Spot Fleet Requests</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>",
     "RequestSpotInstances": "<p>Creates a Spot Instance request.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html\">Spot Instance Requests</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>",
     "ResetEbsDefaultKmsKeyId": "<p>Resets the default customer master key (CMK) for EBS encryption for your account in this Region to the AWS managed CMK for EBS.</p> <p>After resetting the default CMK to the AWS managed CMK, you can continue to encrypt by a customer managed CMK by specifying it when you create the volume. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html\">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
     "ResetFpgaImageAttribute": "<p>Resets the specified attribute of the specified Amazon FPGA Image (AFI) to its default value. You can only reset the load permission attribute.</p>",
@@ -393,7 +393,7 @@
     "SendDiagnosticInterrupt": "<p>Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger a <i>kernel panic</i> (on Linux instances), or a <i>blue screen</i>/<i>stop error</i> (on Windows instances). For instances based on Intel and AMD processors, the interrupt is received as a <i>non-maskable interrupt</i> (NMI).</p> <p>In general, the operating system crashes and reboots when a kernel panic or stop error is triggered. The operating system can also be configured to perform diagnostic tasks, such as generating a memory dump file, loading a secondary kernel, or obtaining a call trace.</p> <p>Before sending a diagnostic interrupt to your instance, ensure that its operating system is configured to perform the required diagnostic tasks.</p> <p>For more information about configuring your operating system to generate a crash dump when a kernel panic or stop error occurs, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html\">Send a Diagnostic Interrupt</a> (Linux instances) or <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/diagnostic-interrupt.html\">Send a Diagnostic Interrupt</a> (Windows instances).</p>",
     "StartInstances": "<p>Starts an Amazon EBS-backed instance that you've previously stopped.</p> <p>Instances that use Amazon EBS volumes as their root devices can be quickly stopped and started. When an instance is stopped, the compute resources are released and you are not billed for instance usage. However, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. You can restart your instance at any time. Every time you start your Windows instance, Amazon EC2 charges you for a full instance hour. If you stop and restart your Windows instance, a new instance hour begins and Amazon EC2 charges you for another full instance hour even if you are still within the same 60-minute period when it was stopped. Every time you start your Linux instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage.</p> <p>Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM.</p> <p>Performing this operation on an instance that uses an instance store as its root device returns an error.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html\">Stopping Instances</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
     "StartVpcEndpointServicePrivateDnsVerification": "<p>Initiates the verification process to prove that the service provider owns the private DNS name domain for the endpoint service.</p> <p>The service provider must successfully perform the verification before the consumer can use the name to access the service.</p> <p>Before the service provider runs this command, they must add a record to the DNS server. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/ndpoint-services-dns-validation.html#add-dns-txt-record\">Adding a TXT Record to Your Domain's DNS Server </a> in the <i>Amazon VPC User Guide</i>.</p>",
-    "StopInstances": "<p>Stops an Amazon EBS-backed instance.</p> <p>You can use the Stop action to hibernate an instance if the instance is <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#enabling-hibernation\">enabled for hibernation</a> and it meets the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites\">hibernation prerequisites</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html\">Hibernate Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>We don't charge usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. Every time you start your Windows instance, Amazon EC2 charges you for a full instance hour. If you stop and restart your Windows instance, a new instance hour begins and Amazon EC2 charges you for another full instance hour even if you are still within the same 60-minute period when it was stopped. Every time you start your Linux instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage.</p> <p>You can't hibernate Spot Instances, and you can't stop or hibernate instance store-backed instances. For information about using hibernation for Spot Instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances\">Hibernating Interrupted Spot Instances</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs.</p> <p>Stopping and hibernating an instance is different to rebooting or terminating it. For example, when you stop or hibernate an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, hibernating, and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance Lifecycle</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshooting Stopping Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
+    "StopInstances": "<p>Stops an Amazon EBS-backed instance.</p> <p>You can use the Stop action to hibernate an instance if the instance is <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#enabling-hibernation\">enabled for hibernation</a> and it meets the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites\">hibernation prerequisites</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html\">Hibernate Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>We don't charge usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. Every time you start your Windows instance, Amazon EC2 charges you for a full instance hour. If you stop and restart your Windows instance, a new instance hour begins and Amazon EC2 charges you for another full instance hour even if you are still within the same 60-minute period when it was stopped. Every time you start your Linux instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage.</p> <p>You can't stop or hibernate instance store-backed instances. You can't use the Stop action to hibernate Spot Instances, but you can specify that Amazon EC2 should hibernate Spot Instances when they are interrupted. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances\">Hibernating Interrupted Spot Instances</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs.</p> <p>Stopping and hibernating an instance is different to rebooting or terminating it. For example, when you stop or hibernate an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, hibernating, and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance Lifecycle</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshooting Stopping Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
     "TerminateClientVpnConnections": "<p>Terminates active Client VPN endpoint connections. This action can be used to terminate a specific client connection, or up to five connections established by a specific user.</p>",
     "TerminateInstances": "<p>Shuts down the specified instances. This operation is idempotent; if you terminate an instance more than once, each call succeeds. </p> <p>If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated.</p> <p>Terminated instances remain visible after termination (for approximately one hour).</p> <p>By default, Amazon EC2 deletes all EBS volumes that were attached when the instance launched. Volumes attached after instance launch continue running.</p> <p>You can stop, start, and terminate EBS-backed instances. You can only terminate instance store-backed instances. What happens to an instance differs if you stop it or terminate it. For example, when you stop an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, any attached EBS volumes with the <code>DeleteOnTermination</code> block device mapping parameter set to <code>true</code> are automatically deleted. For more information about the differences between stopping and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance Lifecycle</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>For more information about troubleshooting, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html\">Troubleshooting Terminating Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>",
     "UnassignIpv6Addresses": "<p>Unassigns one or more IPv6 addresses from a network interface.</p>",
@@ -560,6 +560,7 @@
     "AllocationId": {
       "base": null,
       "refs": {
+        "AllocationIdList$member": null,
         "AssociateAddressRequest$AllocationId": "<p>[EC2-VPC] The allocation ID. This is required for EC2-VPC.</p>",
         "CreateNatGatewayRequest$AllocationId": "<p>The allocation ID of an Elastic IP address to associate with the NAT gateway. If the Elastic IP address is associated with another resource, you must first disassociate it.</p>",
         "ReleaseAddressRequest$AllocationId": "<p>[EC2-VPC] The allocation ID. Required for EC2-VPC.</p>"
@@ -1836,6 +1837,7 @@
       "base": null,
       "refs": {
         "CancelCapacityReservationRequest$CapacityReservationId": "<p>The ID of the Capacity Reservation to be cancelled.</p>",
+        "CapacityReservationIdSet$member": null,
         "CapacityReservationTarget$CapacityReservationId": "<p>The ID of the Capacity Reservation.</p>",
         "GetCapacityReservationUsageRequest$CapacityReservationId": "<p>The ID of the Capacity Reservation.</p>",
         "ModifyCapacityReservationRequest$CapacityReservationId": "<p>The ID of the Capacity Reservation.</p>"
@@ -2013,6 +2015,12 @@
         "ImportSnapshotRequest$ClientData": "<p>The client-specific data.</p>"
       }
     },
+    "ClientVpnAssociationId": {
+      "base": null,
+      "refs": {
+        "DisassociateClientVpnTargetNetworkRequest$AssociationId": "<p>The ID of the target network association.</p>"
+      }
+    },
     "ClientVpnAuthentication": {
       "base": "<p>Describes the authentication methods used by a Client VPN endpoint. Client VPN supports Active Directory and mutual authentication. For more information, see <a href=\"https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication\">Authentication</a> in the <i>AWS Client VPN Administrator Guide</i>.</p>",
       "refs": {
@@ -2191,6 +2199,7 @@
       "base": null,
       "refs": {
         "CoipPool$PoolId": "<p>The ID of the address pool.</p>",
+        "CoipPoolIdSet$member": null,
         "GetCoipPoolUsageRequest$PoolId": "<p>The ID of the address pool.</p>"
       }
     },
@@ -5804,7 +5813,7 @@
     "ExportTaskId": {
       "base": null,
       "refs": {
-        "CancelExportTaskRequest$ExportTaskId": "<p>The ID of the export task. This is the ID returned by <code>CreateInstanceExportTask</code>.</p>"
+        "ExportTaskIdStringList$member": null
       }
     },
     "ExportTaskIdStringList": {
@@ -5860,6 +5869,12 @@
       "refs": {
       }
     },
+    "ExportVmTaskId": {
+      "base": null,
+      "refs": {
+        "CancelExportTaskRequest$ExportTaskId": "<p>The ID of the export task. This is the ID returned by <code>CreateInstanceExportTask</code>.</p>"
+      }
+    },
     "FailedQueuedPurchaseDeletion": {
       "base": "<p>Describes a Reserved Instance whose queued purchase was not deleted.</p>",
       "refs": {
@@ -5892,7 +5907,7 @@
         "DescribeAddressesRequest$Filters": "<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>allocation-id</code> - [EC2-VPC] The allocation ID for the address.</p> </li> <li> <p> <code>association-id</code> - [EC2-VPC] The association ID for the address.</p> </li> <li> <p> <code>domain</code> - Indicates whether the address is for use in EC2-Classic (<code>standard</code>) or in a VPC (<code>vpc</code>).</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance the address is associated with, if any.</p> </li> <li> <p> <code>network-border-group</code> - The location from where the IP address is advertised.</p> </li> <li> <p> <code>network-interface-id</code> - [EC2-VPC] The ID of the network interface that the address is associated with, if any.</p> </li> <li> <p> <code>network-interface-owner-id</code> - The AWS account ID of the owner.</p> </li> <li> <p> <code>private-ip-address</code> - [EC2-VPC] The private IP address associated with the Elastic IP address.</p> </li> <li> <p> <code>public-ip</code> - The Elastic IP address.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> </ul>",
         "DescribeAvailabilityZonesRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>group-name</code> - For Availability Zones, use the Region name. For Local Zones, use the name of the group associated with the Local Zone (for example, <code>us-west-2-lax-1</code>).</p> </li> <li> <p> <code>message</code> - The Availability Zone or Local Zone message.</p> </li> <li> <p> <code>opt-in-status</code> - The opt in status (<code>opted-in</code>, and <code>not-opted-in</code> | <code>opt-in-not-required</code>).</p> </li> <li> <p> <code>region-name</code> - The name of the Region for the Availability Zone or Local Zone (for example, <code>us-east-1</code>).</p> </li> <li> <p> <code>state</code> - The state of the Availability Zone or Local Zone (<code>available</code> | <code>information</code> | <code>impaired</code> | <code>unavailable</code>).</p> </li> <li> <p> <code>zone-id</code> - The ID of the Availability Zone (for example, <code>use1-az1</code>) or the Local Zone (for example, use <code>usw2-lax1-az1</code>).</p> </li> <li> <p> <code>zone-name</code> - The name of the Availability Zone (for example, <code>us-east-1a</code>) or the Local Zone (for example, use <code>us-west-2-lax-1a</code>).</p> </li> </ul>",
         "DescribeBundleTasksRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>bundle-id</code> - The ID of the bundle task.</p> </li> <li> <p> <code>error-code</code> - If the task failed, the error code returned.</p> </li> <li> <p> <code>error-message</code> - If the task failed, the error message returned.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> <li> <p> <code>progress</code> - The level of task completion, as a percentage (for example, 20%).</p> </li> <li> <p> <code>s3-bucket</code> - The Amazon S3 bucket to store the AMI.</p> </li> <li> <p> <code>s3-prefix</code> - The beginning of the AMI name.</p> </li> <li> <p> <code>start-time</code> - The time the task started (for example, 2013-09-15T17:15:20.000Z).</p> </li> <li> <p> <code>state</code> - The state of the task (<code>pending</code> | <code>waiting-for-shutdown</code> | <code>bundling</code> | <code>storing</code> | <code>cancelling</code> | <code>complete</code> | <code>failed</code>).</p> </li> <li> <p> <code>update-time</code> - The time of the most recent update for the task.</p> </li> </ul>",
-        "DescribeCapacityReservationsRequest$Filters": "<p>One or more filters.</p>",
+        "DescribeCapacityReservationsRequest$Filters": "<p>One or more filters.</p> <ul> <li> <p> <code>instance-type</code> - The type of instance for which the Capacity Reservation reserves capacity.</p> </li> <li> <p> <code>owner-id</code> - The ID of the AWS account that owns the Capacity Reservation.</p> </li> <li> <p> <code>availability-zone-id</code> - The Availability Zone ID of the Capacity Reservation.</p> </li> <li> <p> <code>instance-platform</code> - The type of operating system for which the Capacity Reservation reserves capacity.</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone ID of the Capacity Reservation.</p> </li> <li> <p> <code>tenancy</code> - Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p> <ul> <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other AWS accounts.</p> </li> <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single AWS account.</p> </li> </ul> </li> <li> <p> <code>state</code> - The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p> <ul> <li> <p> <code>active</code>- The Capacity Reservation is active and the capacity is available for your use.</p> </li> <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your request. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>cancelled</code> - The Capacity Reservation was manually cancelled. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li> <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request might fail due to invalid request parameters, capacity constraints, or instance limit constraints. Failed requests are retained for 60 minutes.</p> </li> </ul> </li> <li> <p> <code>end-date</code> - The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to expired when it reaches its end date and time.</p> </li> <li> <p> <code>end-date-type</code> - Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p> <ul> <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it.</p> </li> <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time.</p> </li> </ul> </li> <li> <p> <code>instance-match-criteria</code> - Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p> <ul> <li> <p> <code>open</code> - The Capacity Reservation accepts all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes launch into the Capacity Reservation automatically without specifying any additional parameters.</p> </li> <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity.</p> </li> </ul> </li> </ul>",
         "DescribeClassicLinkInstancesRequest$Filters": "<p>One or more filters.</p> <ul> <li> <p> <code>group-id</code> - The ID of a VPC security group that's associated with the instance.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC to which the instance is linked.</p> <p> <code>vpc-id</code> - The ID of the VPC that the instance is linked to.</p> </li> </ul>",
         "DescribeClientVpnAuthorizationRulesRequest$Filters": "<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>description</code> - The description of the authorization rule.</p> </li> <li> <p> <code>destination-cidr</code> - The CIDR of the network to which the authorization rule applies.</p> </li> <li> <p> <code>group-id</code> - The ID of the Active Directory group to which the authorization rule grants access.</p> </li> </ul>",
         "DescribeClientVpnConnectionsRequest$Filters": "<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>connection-id</code> - The ID of the connection.</p> </li> <li> <p> <code>username</code> - For Active Directory client authentication, the user name of the client who established the client connection.</p> </li> </ul>",
@@ -5921,8 +5936,8 @@
         "DescribeInstanceCreditSpecificationsRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> </ul>",
         "DescribeInstanceStatusRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>event.code</code> - The code for the scheduled event (<code>instance-reboot</code> | <code>system-reboot</code> | <code>system-maintenance</code> | <code>instance-retirement</code> | <code>instance-stop</code>).</p> </li> <li> <p> <code>event.description</code> - A description of the event.</p> </li> <li> <p> <code>event.instance-event-id</code> - The ID of the event whose date and time you are modifying.</p> </li> <li> <p> <code>event.not-after</code> - The latest end time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>event.not-before</code> - The earliest start time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>event.not-before-deadline</code> - The deadline for starting the event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The code for the instance state, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-status.reachability</code> - Filters on instance status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li> <li> <p> <code>instance-status.status</code> - The status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> <li> <p> <code>system-status.reachability</code> - Filters on system status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li> <li> <p> <code>system-status.status</code> - The system status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> </ul>",
         "DescribeInstanceTypeOfferingsRequest$Filters": "<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>location</code> - This depends on the location type. For example, if the location type is <code>region</code> (default), the location is the Region code (for example, <code>us-east-2</code>.)</p> </li> <li> <p> <code>instance-type</code> - The instance type.</p> </li> </ul>",
-        "DescribeInstanceTypesRequest$Filters": "<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>auto-recovery-supported</code> - Indicates whether auto recovery is supported. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>burstable-performance-supported</code> - Indicates whether it is a burstable performance instance type. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>free-tier-eligible</code> - Indicates whether the instance type is eligible to use in the free tier. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor used. (<code>nitro</code> | <code>xen</code>)</p> </li> <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li> <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li> <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks. (<code>hdd</code> | <code>ssd</code>)</p> </li> <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li> <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li> <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required. (<code>required</code> | <code>supported</code> | <code>unsupported</code>)</p> </li> <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li> <li> <p> <code>network-info.network-performance</code> - Describes the network performance.</p> </li> <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li> <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li> </ul>",
-        "DescribeInstancesRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2010-09-15T17:15:20.000Z</code>.</p> </li> <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li> <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li> <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li> <li> <p> <code>group-id</code> - The ID of the security group for the instance. EC2-Classic only.</p> </li> <li> <p> <code>group-name</code> - The name of the security group for the instance. EC2-Classic only.</p> </li> <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation. </p> </li> <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>).</p> </li> <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li> <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance or a Scheduled Instance (<code>spot</code> | <code>scheduled</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li> <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li> <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li> <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li> <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li> <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li> <li> <p> <code>launch-time</code> - The time when the instance was launched.</p> </li> <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li> <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The http metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li> <li> <p> <code>metadata-options.http-endpoint</code> - Enable or disable metadata access on http endpoint (<code>enabled</code> | <code>disabled</code>)</p> </li> <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li> <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li> <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li> <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li> <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li> <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li> <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li> <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li> <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li> <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li> <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li> <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li> <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li> <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li> <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by AWS.</p> </li> <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li> <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li> <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li> <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li> <li> <p> <code>owner-id</code> - The AWS account ID of the instance owner.</p> </li> <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li> <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li> <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li> <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li> <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance.</p> </li> <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li> <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li> <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows \"User Initiated [date]\" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li> <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console, Auto Scaling, and so on).</p> </li> <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li> <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li> <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li> <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li> <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li> <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li> </ul>",
+        "DescribeInstanceTypesRequest$Filters": "<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>auto-recovery-supported</code> - Indicates whether auto recovery is supported. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>burstable-performance-supported</code> - Indicates whether it is a burstable performance instance type. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized. (<code>supported</code> | <code>unsupported</code> | <code>default</code>)</p> </li> <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported. (<code>supported</code> | <code>unsupported</code>)</p> </li> <li> <p> <code>free-tier-eligible</code> - Indicates whether the instance type is eligible to use in the free tier. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor used. (<code>nitro</code> | <code>xen</code>)</p> </li> <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li> <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li> <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks. (<code>hdd</code> | <code>ssd</code>)</p> </li> <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li> <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li> <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required. (<code>required</code> | <code>supported</code> | <code>unsupported</code>)</p> </li> <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li> <li> <p> <code>network-info.network-performance</code> - Describes the network performance.</p> </li> <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li> <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li> </ul>",
+        "DescribeInstancesRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2010-09-15T17:15:20.000Z</code>.</p> </li> <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li> <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li> <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li> <li> <p> <code>group-id</code> - The ID of the security group for the instance. EC2-Classic only.</p> </li> <li> <p> <code>group-name</code> - The name of the security group for the instance. EC2-Classic only.</p> </li> <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation. </p> </li> <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>). The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p> </li> <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li> <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance or a Scheduled Instance (<code>spot</code> | <code>scheduled</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li> <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li> <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li> <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li> <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li> <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li> <li> <p> <code>launch-time</code> - The time when the instance was launched.</p> </li> <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li> <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The http metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li> <li> <p> <code>metadata-options.http-endpoint</code> - Enable or disable metadata access on http endpoint (<code>enabled</code> | <code>disabled</code>)</p> </li> <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li> <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li> <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li> <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li> <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li> <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li> <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li> <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li> <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li> <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li> <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li> <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li> <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li> <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li> <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by AWS.</p> </li> <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li> <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li> <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li> <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li> <li> <p> <code>owner-id</code> - The AWS account ID of the instance owner.</p> </li> <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li> <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li> <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li> <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li> <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance.</p> </li> <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li> <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li> <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows \"User Initiated [date]\" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li> <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console, Auto Scaling, and so on).</p> </li> <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li> <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li> <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li> <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li> <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li> <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li> </ul>",
         "DescribeInternetGatewaysRequest$Filters": "<p>One or more filters.</p> <ul> <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>available</code>). Present only if a VPC is attached.</p> </li> <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li> <li> <p> <code>internet-gateway-id</code> - The ID of the Internet gateway.</p> </li> <li> <p> <code>owner-id</code> - The ID of the AWS account that owns the internet gateway.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> </ul>",
         "DescribeIpv6PoolsRequest$Filters": "<p>One or more filters.</p> <ul> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> </ul>",
         "DescribeKeyPairsRequest$Filters": "<p>The filters.</p> <ul> <li> <p> <code>fingerprint</code> - The fingerprint of the key pair.</p> </li> <li> <p> <code>key-name</code> - The name of the key pair.</p> </li> </ul>",
@@ -5961,7 +5976,7 @@
         "DescribeTrafficMirrorTargetsRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>description</code>: The Traffic Mirror target description.</p> </li> <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li> <li> <p> <code>network-load-balancer-arn</code>: The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the session.</p> </li> <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li> <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li> </ul>",
         "DescribeTransitGatewayAttachmentsRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>association.state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li> <li> <p> <code>association.transit-gateway-route-table-id</code> - The ID of the route table for the transit gateway.</p> </li> <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li> <li> <p> <code>resource-owner-id</code> - The ID of the AWS account that owns the resource.</p> </li> <li> <p> <code>resource-type</code> - The resource type (<code>vpc</code> | <code>vpn</code>).</p> </li> <li> <p> <code>state</code> - The state of the attachment (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li> <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li> <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li> <li> <p> <code>transit-gateway-owner-id</code> - The ID of the AWS account that owns the transit gateway.</p> </li> </ul>",
         "DescribeTransitGatewayMulticastDomainsRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>state</code> - The state of the transit gateway multicast domain. Valid values are <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>.</p> </li> <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li> <li> <p> <code>transit-gateway-multicast-domain-id</code> - The ID of the transit gateway multicast domain.</p> </li> </ul>",
-        "DescribeTransitGatewayPeeringAttachmentsRequest$Filters": "<p>One or more filters.</p>",
+        "DescribeTransitGatewayPeeringAttachmentsRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the transit gateway attachment.</p> </li> <li> <p> <code>local-owner-id</code> - The ID of your AWS account.</p> </li> <li> <p> <code>remote-owner-id</code> - The ID of the AWS account in the remote Region that owns the transit gateway.</p> </li> <li> <p> <code>state</code> - The state of the peering attachment (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li> <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li> </ul>",
         "DescribeTransitGatewayRouteTablesRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>default-association-route-table</code> - Indicates whether this is the default association route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>default-propagation-route-table</code> - Indicates whether this is the default propagation route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>state</code> - The state of the attachment (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li> <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li> <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li> </ul>",
         "DescribeTransitGatewayVpcAttachmentsRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>state</code> - The state of the attachment (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li> <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li> <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li> </ul>",
         "DescribeTransitGatewaysRequest$Filters": "<p>One or more filters. The possible values are:</p> <ul> <li> <p> <code>options.propagation-default-route-table-id</code> - The ID of the default propagation route table.</p> </li> <li> <p> <code>options.amazon-side-asn</code> - The private ASN for the Amazon side of a BGP session.</p> </li> <li> <p> <code>options.association-default-route-table-id</code> - The ID of the default association route table.</p> </li> <li> <p> <code>options.auto-accept-shared-attachments</code> - Indicates whether there is automatic acceptance of attachment requests (<code>enable</code> | <code>disable</code>).</p> </li> <li> <p> <code>options.default-route-table-association</code> - Indicates whether resource attachments are automatically associated with the default association route table (<code>enable</code> | <code>disable</code>).</p> </li> <li> <p> <code>options.default-route-table-propagation</code> - Indicates whether resource attachments automatically propagate routes to the default propagation route table (<code>enable</code> | <code>disable</code>).</p> </li> <li> <p> <code>options.dns-support</code> - Indicates whether DNS support is enabled (<code>enable</code> | <code>disable</code>).</p> </li> <li> <p> <code>options.vpn-ecmp-support</code> - Indicates whether Equal Cost Multipath Protocol support is enabled (<code>enable</code> | <code>disable</code>).</p> </li> <li> <p> <code>owner-id</code> - The ID of the AWS account that owns the transit gateway.</p> </li> <li> <p> <code>state</code> - The state of the attachment (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li> <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li> </ul>",
@@ -6024,14 +6039,7 @@
         "ModifyFleetRequest$ExcessCapacityTerminationPolicy": "<p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>"
       }
     },
-    "FleetIdSet": {
-      "base": null,
-      "refs": {
-        "DeleteFleetsRequest$FleetIds": "<p>The IDs of the EC2 Fleets.</p>",
-        "DescribeFleetsRequest$FleetIds": "<p>The ID of the EC2 Fleets.</p>"
-      }
-    },
-    "FleetIdentifier": {
+    "FleetId": {
       "base": null,
       "refs": {
         "CreateFleetResult$FleetId": "<p>The ID of the EC2 Fleet.</p>",
@@ -6046,6 +6054,13 @@
         "ModifyFleetRequest$FleetId": "<p>The ID of the EC2 Fleet.</p>"
       }
     },
+    "FleetIdSet": {
+      "base": null,
+      "refs": {
+        "DeleteFleetsRequest$FleetIds": "<p>The IDs of the EC2 Fleets.</p>",
+        "DescribeFleetsRequest$FleetIds": "<p>The ID of the EC2 Fleets.</p>"
+      }
+    },
     "FleetLaunchTemplateConfig": {
       "base": "<p>Describes a launch template and overrides.</p>",
       "refs": {
@@ -6698,7 +6713,7 @@
       "base": null,
       "refs": {
         "Image$Hypervisor": "<p>The hypervisor type of the image.</p>",
-        "Instance$Hypervisor": "<p>The hypervisor type of the instance.</p>"
+        "Instance$Hypervisor": "<p>The hypervisor type of the instance. The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p>"
       }
     },
     "IKEVersionsList": {
@@ -8013,6 +8028,7 @@
         "RegisterImageRequest$KernelId": "<p>The ID of the kernel.</p>",
         "RequestLaunchTemplateData$KernelId": "<p>The ID of the kernel.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\">User Provided Kernels</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </important>",
         "RequestSpotLaunchSpecification$KernelId": "<p>The ID of the kernel.</p>",
+        "RunInstancesRequest$KernelId": "<p>The ID of the kernel.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\"> PV-GRUB</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </important>",
         "ScheduledInstancesLaunchSpecification$KernelId": "<p>The ID of the kernel.</p>"
       }
     },
@@ -8071,6 +8087,7 @@
         "ImportImageRequest$KmsKeyId": "<p>An identifier for the symmetric AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted AMI. This parameter is only required if you want to use a non-default CMK; if this parameter is not specified, the default CMK for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p> <p>The CMK identifier may be provided in any of the following formats: </p> <ul> <li> <p>Key ID</p> </li> <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the CMK, the AWS account ID of the CMK owner, the <code>alias</code> namespace, and then the CMK alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li> <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the CMK, the AWS account ID of the CMK owner, the <code>key</code> namespace, and then the CMK ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li> <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the CMK, the AWS account ID of the CMK owner, the <code>alias</code> namespace, and then the CMK alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li> </ul> <p>AWS parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p> <p>The specified CMK must exist in the Region that the AMI is being copied to.</p> <p>Amazon EBS does not support asymmetric CMKs.</p>",
         "ImportSnapshotRequest$KmsKeyId": "<p>An identifier for the symmetric AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted snapshot. This parameter is only required if you want to use a non-default CMK; if this parameter is not specified, the default CMK for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p> <p>The CMK identifier may be provided in any of the following formats: </p> <ul> <li> <p>Key ID</p> </li> <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the CMK, the AWS account ID of the CMK owner, the <code>alias</code> namespace, and then the CMK alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li> <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the CMK, the AWS account ID of the CMK owner, the <code>key</code> namespace, and then the CMK ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li> <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the CMK, the AWS account ID of the CMK owner, the <code>alias</code> namespace, and then the CMK alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li> </ul> <p>AWS parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p> <p>The specified CMK must exist in the Region that the snapshot is being copied to.</p> <p>Amazon EBS does not support asymmetric CMKs.</p>",
         "LaunchTemplateEbsBlockDevice$KmsKeyId": "<p>The ARN of the AWS Key Management Service (AWS KMS) CMK used for encryption.</p>",
+        "LaunchTemplateEbsBlockDeviceRequest$KmsKeyId": "<p>The ARN of the symmetric AWS Key Management Service (AWS KMS) CMK used for encryption.</p>",
         "ModifyEbsDefaultKmsKeyIdRequest$KmsKeyId": "<p>The identifier of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, your AWS managed CMK for EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p> <p>You can specify the CMK using any of the following:</p> <ul> <li> <p>Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li> <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li> <li> <p>Key ARN. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li> <li> <p>Alias ARN. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li> </ul> <p>AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p> <p>Amazon EBS does not support asymmetric CMKs.</p>"
       }
     },
@@ -8906,7 +8923,7 @@
     "ModifyAvailabilityZoneOptInStatus": {
       "base": null,
       "refs": {
-        "ModifyAvailabilityZoneGroupRequest$OptInStatus": "<p>Indicates whether to enable or disable Zone Group membership. The valid values are <code>opted-in</code>.</p>"
+        "ModifyAvailabilityZoneGroupRequest$OptInStatus": "<p>Indicates whether to enable or disable membership. The valid values are <code>opted-in</code>. You must contact <a href=\"https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services\">AWS Support</a> to disable an Availability Zone group.</p>"
       }
     },
     "ModifyCapacityReservationRequest": {
@@ -10353,6 +10370,7 @@
         "RegisterImageRequest$RamdiskId": "<p>The ID of the RAM disk.</p>",
         "RequestLaunchTemplateData$RamDiskId": "<p>The ID of the RAM disk.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\">User Provided Kernels</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </important>",
         "RequestSpotLaunchSpecification$RamdiskId": "<p>The ID of the RAM disk.</p>",
+        "RunInstancesRequest$RamdiskId": "<p>The ID of the RAM disk to select. Some kernels require additional drivers at launch. Check the kernel requirements for information about whether you need to specify a RAM disk. To find kernel requirements, go to the AWS Resource Center and search for the kernel ID.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\"> PV-GRUB</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </important>",
         "ScheduledInstancesLaunchSpecification$RamdiskId": "<p>The ID of the RAM disk.</p>"
       }
     },
@@ -10887,7 +10905,7 @@
       "refs": {
         "LaunchTemplateTagSpecification$ResourceType": "<p>The type of resource.</p>",
         "LaunchTemplateTagSpecificationRequest$ResourceType": "<p>The type of resource to tag. Currently, the resource types that support tagging on creation are <code>instance</code> and <code>volume</code>. To tag a resource after it has been created, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html\">CreateTags</a>.</p>",
-        "SpotFleetTagSpecification$ResourceType": "<p>The type of resource. Currently, the only resource types that are supported are <code>spot-fleet-request</code> and <code>instance</code>.</p>",
+        "SpotFleetTagSpecification$ResourceType": "<p>The type of resource. Currently, the only resource type that is supported is <code>instance</code>. To tag the Spot Fleet request on creation, use the <code>TagSpecifications</code> parameter in <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetRequestConfigData.html\"> <code>SpotFleetRequestConfigData</code> </a>.</p>",
         "TagDescription$ResourceType": "<p>The resource type.</p>",
         "TagSpecification$ResourceType": "<p>The type of resource to tag. Currently, the resource types that support tagging on creation are: <code>capacity-reservation</code> | <code>client-vpn-endpoint</code> | <code>dedicated-host</code> | <code>fleet</code> | <code>fpga-image</code> | <code>instance</code> | <code>key-pair</code> | <code>launch-template</code> | <code>spot-fleet-request</code> | <code>placement-group</code> | <code>snapshot</code> | <code>traffic-mirror-filter</code> | <code>traffic-mirror-session</code> | <code>traffic-mirror-target</code> | <code>transit-gateway</code> | <code>transit-gateway-attachment</code> | <code>transit-gateway-route-table</code> | <code>vpc-endpoint</code> (for interface VPC endpoints)| <code>vpc-endpoint-service</code> (for gateway VPC endpoints) | <code>volume</code> | <code>vpc-flow-log</code>.</p> <p>To tag a resource after it has been created, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html\">CreateTags</a>.</p>"
       }
@@ -11275,6 +11293,7 @@
       "refs": {
         "AuthorizeSecurityGroupEgressRequest$GroupId": "<p>The ID of the security group.</p>",
         "AuthorizeSecurityGroupIngressRequest$GroupId": "<p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>",
+        "ClientVpnSecurityGroupIdSet$member": null,
         "DeleteSecurityGroupRequest$GroupId": "<p>The ID of the security group. Required for a nondefault VPC.</p>",
         "GroupIds$member": null,
         "RequestSpotLaunchSpecificationSecurityGroupIdList$member": null,
@@ -11812,7 +11831,7 @@
         "AdvertiseByoipCidrRequest$Cidr": "<p>The address range, in CIDR notation. This must be the exact range that you provisioned. You can't advertise only a portion of the provisioned range.</p>",
         "AllocateAddressRequest$Address": "<p>[EC2-VPC] The Elastic IP address to recover or an IPv4 address from an address pool.</p>",
         "AllocateAddressRequest$PublicIpv4Pool": "<p>The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool. To specify a specific address from the address pool, use the <code>Address</code> parameter instead.</p>",
-        "AllocateAddressRequest$NetworkBorderGroup": "<p>The location from which the IP address is advertised. Use this parameter to limit the address to this location.</p> <p>Use <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html\">DescribeVpcs</a> to view the network border groups.</p> <note> <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 classic, you will receive an <code>InvalidParameterCombination</code> error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html\">Error Codes</a>.</p> </note>",
+        "AllocateAddressRequest$NetworkBorderGroup": "<p>The location from which the IP address is advertised. Use this parameter to limit the address to this location.</p> <p>A network border group is a unique set of Availability Zones or Local Zones from where AWS advertises IP addresses and limits the addresses to the group. IP addresses cannot move between network border groups.</p> <p>Use <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html\">DescribeAvailabilityZones</a> to view the network border groups.</p> <note> <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 classic, you will receive an <code>InvalidParameterCombination</code> error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html\">Error Codes</a>.</p> </note>",
         "AllocateAddressRequest$CustomerOwnedIpv4Pool": "<p>The ID of a customer-owned address pool. Use this parameter to let Amazon EC2 select an address from the address pool. Alternatively, specify a specific address from the address pool.</p>",
         "AllocateAddressResult$PublicIp": "<p>The Elastic IP address.</p>",
         "AllocateAddressResult$AllocationId": "<p>[EC2-VPC] The ID that AWS assigns to represent the allocation of the Elastic IP address for use with instances in a VPC.</p>",
@@ -11824,7 +11843,6 @@
         "AllocateHostsRequest$ClientToken": "<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">How to Ensure Idempotency</a>.</p>",
         "AllocateHostsRequest$InstanceType": "<p>Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only.</p> <p>If you want the Dedicated Hosts to support multiple instance types in a specific instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>",
         "AllocateHostsRequest$InstanceFamily": "<p>Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family.</p> <p>If you want the Dedicated Hosts to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>",
-        "AllocationIdList$member": null,
         "AllowedPrincipal$Principal": "<p>The Amazon Resource Name (ARN) of the principal.</p>",
         "AssignIpv6AddressesResult$NetworkInterfaceId": "<p>The ID of the network interface.</p>",
         "AssignPrivateIpAddressesResult$NetworkInterfaceId": "<p>The ID of the network interface.</p>",
@@ -11896,7 +11914,6 @@
         "CapacityReservation$AvailabilityZoneId": "<p>The Availability Zone ID of the Capacity Reservation.</p>",
         "CapacityReservation$InstanceType": "<p>The type of instance for which the Capacity Reservation reserves capacity.</p>",
         "CapacityReservation$AvailabilityZone": "<p>The Availability Zone in which the capacity is reserved.</p>",
-        "CapacityReservationIdSet$member": null,
         "CapacityReservationTargetResponse$CapacityReservationId": "<p>The ID of the Capacity Reservation.</p>",
         "CertificateAuthentication$ClientRootCertificateChain": "<p>The ARN of the client certificate. </p>",
         "CertificateAuthenticationRequest$ClientRootCertificateChainArn": "<p>The ARN of the client certificate. The certificate must be signed by a certificate authority (CA) and it must be provisioned in AWS Certificate Manager (ACM).</p>",
@@ -11938,12 +11955,10 @@
         "ClientVpnRoute$Origin": "<p>Indicates how the route was associated with the Client VPN endpoint. <code>associate</code> indicates that the route was automatically added when the target network was associated with the Client VPN endpoint. <code>add-route</code> indicates that the route was manually added using the <b>CreateClientVpnRoute</b> action.</p>",
         "ClientVpnRoute$Description": "<p>A brief description of the route.</p>",
         "ClientVpnRouteStatus$Message": "<p>A message about the status of the Client VPN endpoint route, if applicable.</p>",
-        "ClientVpnSecurityGroupIdSet$member": null,
         "CoipAddressUsage$AllocationId": "<p>The allocation ID of the address.</p>",
         "CoipAddressUsage$AwsAccountId": "<p>The AWS account ID.</p>",
         "CoipAddressUsage$AwsService": "<p>The AWS service.</p>",
         "CoipAddressUsage$CoIp": "<p>The customer-owned IP address.</p>",
-        "CoipPoolIdSet$member": null,
         "ConfirmProductInstanceRequest$ProductCode": "<p>The product code. This must be a product code that you own.</p>",
         "ConfirmProductInstanceResult$OwnerId": "<p>The AWS account ID of the instance owner. This is only present if the product code is attached to the instance.</p>",
         "ConnectionLogOptions$CloudwatchLogGroup": "<p>The name of the CloudWatch Logs log group.</p>",
@@ -12056,7 +12071,6 @@
         "CreateTrafficMirrorTargetRequest$Description": "<p>The description of the Traffic Mirror target.</p>",
         "CreateTrafficMirrorTargetRequest$ClientToken": "<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">How to Ensure Idempotency</a>.</p>",
         "CreateTrafficMirrorTargetResult$ClientToken": "<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">How to Ensure Idempotency</a>.</p>",
-        "CreateTransitGatewayPeeringAttachmentRequest$PeerTransitGatewayId": "<p>The ID of the peer transit gateway with which to create the peering attachment.</p>",
         "CreateTransitGatewayPeeringAttachmentRequest$PeerAccountId": "<p>The AWS account ID of the owner of the peer transit gateway.</p>",
         "CreateTransitGatewayPeeringAttachmentRequest$PeerRegion": "<p>The Region where the peer transit gateway is located.</p>",
         "CreateTransitGatewayRequest$Description": "<p>A description of the transit gateway.</p>",
@@ -12251,7 +12265,6 @@
         "DescribeVolumesModificationsResult$NextToken": "<p>Token for pagination, null if there are no more results </p>",
         "DescribeVolumesRequest$NextToken": "<p>The <code>NextToken</code> value returned from a previous paginated <code>DescribeVolumes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</p>",
         "DescribeVolumesResult$NextToken": "<p>The <code>NextToken</code> value to include in a future <code>DescribeVolumes</code> request. When the results of a <code>DescribeVolumes</code> request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
-        "DescribeVpcAttributeRequest$VpcId": "<p>The ID of the VPC.</p>",
         "DescribeVpcAttributeResult$VpcId": "<p>The ID of the VPC.</p>",
         "DescribeVpcEndpointConnectionNotificationsRequest$NextToken": "<p>The token to request the next page of results.</p>",
         "DescribeVpcEndpointConnectionNotificationsResult$NextToken": "<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
@@ -12285,7 +12298,6 @@
         "DisableFastSnapshotRestoreSuccessItem$OwnerId": "<p>The ID of the AWS account that owns the snapshot.</p>",
         "DisableFastSnapshotRestoreSuccessItem$OwnerAlias": "<p>The alias of the snapshot owner.</p>",
         "DisassociateAddressRequest$PublicIp": "<p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>",
-        "DisassociateClientVpnTargetNetworkRequest$AssociationId": "<p>The ID of the target network association.</p>",
         "DisassociateClientVpnTargetNetworkResult$AssociationId": "<p>The ID of the target network association.</p>",
         "DisassociateSubnetCidrBlockResult$SubnetId": "<p>The ID of the subnet.</p>",
         "DisassociateVpcCidrBlockResult$VpcId": "<p>The ID of the VPC.</p>",
@@ -12347,7 +12359,6 @@
         "ExportTask$Description": "<p>A description of the resource being exported.</p>",
         "ExportTask$ExportTaskId": "<p>The ID of the export task.</p>",
         "ExportTask$StatusMessage": "<p>The status message related to the export task.</p>",
-        "ExportTaskIdStringList$member": null,
         "ExportTaskS3Location$S3Bucket": "<p>The destination S3 bucket.</p>",
         "ExportTaskS3Location$S3Prefix": "<p>The prefix (logical hierarchy) in the bucket.</p>",
         "ExportTaskS3LocationRequest$S3Bucket": "<p>The destination S3 bucket.</p>",
@@ -12501,7 +12512,6 @@
         "ImportImageTask$StatusMessage": "<p>A descriptive status message for the import image task.</p>",
         "ImportInstanceLaunchSpecification$AdditionalInfo": "<p>Reserved.</p>",
         "ImportInstanceLaunchSpecification$PrivateIpAddress": "<p>[EC2-VPC] An available IP address from the IP address range of the subnet.</p>",
-        "ImportInstanceLaunchSpecification$SubnetId": "<p>[EC2-VPC] The ID of the subnet in which to launch the instance.</p>",
         "ImportInstanceRequest$Description": "<p>A description for the instance being imported.</p>",
         "ImportInstanceTaskDetails$Description": "<p>A description of the task.</p>",
         "ImportInstanceTaskDetails$InstanceId": "<p>The ID of the instance.</p>",
@@ -12621,7 +12631,6 @@
         "LaunchTemplateBlockDeviceMappingRequest$DeviceName": "<p>The device name (for example, /dev/sdh or xvdh).</p>",
         "LaunchTemplateBlockDeviceMappingRequest$VirtualName": "<p>The virtual device name (ephemeralN). Instance store volumes are numbered starting from 0. An instance type with 2 available instance store volumes can specify mappings for ephemeral0 and ephemeral1. The number of available instance store volumes depends on the instance type. After you connect to the instance, you must mount the volume.</p>",
         "LaunchTemplateBlockDeviceMappingRequest$NoDevice": "<p>Suppresses the specified device included in the block device mapping of the AMI.</p>",
-        "LaunchTemplateEbsBlockDeviceRequest$KmsKeyId": "<p>The ARN of the symmetric AWS Key Management Service (AWS KMS) CMK used for encryption.</p>",
         "LaunchTemplateElasticInferenceAccelerator$Type": "<p> The type of elastic inference accelerator. The possible values are eia1.medium, eia1.large, and eia1.xlarge. </p>",
         "LaunchTemplateElasticInferenceAcceleratorResponse$Type": "<p> The type of elastic inference accelerator. The possible values are eia1.medium, eia1.large, and eia1.xlarge. </p>",
         "LaunchTemplateIamInstanceProfileSpecification$Arn": "<p>The Amazon Resource Name (ARN) of the instance profile.</p>",
@@ -12676,7 +12685,7 @@
         "LocalGatewayVirtualInterface$LocalAddress": "<p>The local address.</p>",
         "LocalGatewayVirtualInterface$PeerAddress": "<p>The peer address.</p>",
         "LocalGatewayVirtualInterfaceGroup$LocalGatewayId": "<p>The ID of the local gateway.</p>",
-        "ModifyAvailabilityZoneGroupRequest$GroupName": "<p>The names of the Zone Group.</p>",
+        "ModifyAvailabilityZoneGroupRequest$GroupName": "<p>The name of the Availability Zone Group.</p>",
         "ModifyClientVpnEndpointRequest$ServerCertificateArn": "<p>The ARN of the server certificate to be used. The server certificate must be provisioned in AWS Certificate Manager (ACM).</p>",
         "ModifyClientVpnEndpointRequest$Description": "<p>A brief description of the Client VPN endpoint.</p>",
         "ModifyDefaultCreditSpecificationRequest$CpuCredits": "<p>The credit option for CPU usage of the instance family.</p> <p>Valid Values: <code>standard</code> | <code>unlimited</code> </p>",
@@ -12925,12 +12934,9 @@
         "RouteTableAssociation$SubnetId": "<p>The ID of the subnet. A subnet ID is not returned for an implicit association.</p>",
         "RouteTableAssociation$GatewayId": "<p>The ID of the internet gateway or virtual private gateway.</p>",
         "RouteTableAssociationState$StatusMessage": "<p>The status message, if applicable.</p>",
-        "RunInstancesRequest$KernelId": "<p>The ID of the kernel.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\"> PV-GRUB</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </important>",
-        "RunInstancesRequest$RamdiskId": "<p>The ID of the RAM disk to select. Some kernels require additional drivers at launch. Check the kernel requirements for information about whether you need to specify a RAM disk. To find kernel requirements, go to the AWS Resource Center and search for the kernel ID.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\"> PV-GRUB</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </important>",
-        "RunInstancesRequest$SubnetId": "<p>[EC2-VPC] The ID of the subnet to launch the instance into.</p> <p>If you specify a network interface, you must specify any subnets as part of the network interface.</p>",
         "RunInstancesRequest$UserData": "<p>The user data to make available to the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html\">Running Commands on Your Linux Instance at Launch</a> (Linux) and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data\">Adding User Data</a> (Windows). If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB.</p>",
         "RunInstancesRequest$AdditionalInfo": "<p>Reserved.</p>",
-        "RunInstancesRequest$ClientToken": "<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring Idempotency</a>.</p> <p>Constraints: Maximum 64 ASCII characters</p>",
+        "RunInstancesRequest$ClientToken": "<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring Idempotency</a>.</p> <p>Constraints: Maximum 64 ASCII characters</p>",
         "RunInstancesRequest$PrivateIpAddress": "<p>[EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.</p> <p>Only one private IP address can be designated as primary. You can't specify this option if you've specified the option to designate a private IP address as the primary IP address in a network interface specification. You cannot specify this option if you're launching more than one instance in the request.</p> <p>You cannot specify this option and the network interfaces option in the same request.</p>",
         "RunScheduledInstancesRequest$ClientToken": "<p>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring Idempotency</a>.</p>",
         "S3Storage$AWSAccessKeyId": "<p>The access key ID of the owner of the bucket. Before you specify a value for your access key ID, review and follow the guidance in <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html\">Best Practices for Managing AWS Access Keys</a>.</p>",
@@ -13088,7 +13094,6 @@
         "TargetNetwork$VpcId": "<p>The ID of the VPC in which the target network (subnet) is located.</p>",
         "TargetNetwork$TargetNetworkId": "<p>The ID of the subnet specified as the target network.</p>",
         "TargetNetwork$ClientVpnEndpointId": "<p>The ID of the Client VPN endpoint with which the target network is associated.</p>",
-        "TerminateClientVpnConnectionsRequest$ConnectionId": "<p>The ID of the client connection to be terminated.</p>",
         "TerminateClientVpnConnectionsRequest$Username": "<p>The name of the user who initiated the connection. Use this option to terminate all active connections for the specified user. This option can only be used if the user has established up to five connections.</p>",
         "TerminateClientVpnConnectionsResult$ClientVpnEndpointId": "<p>The ID of the Client VPN endpoint.</p>",
         "TerminateClientVpnConnectionsResult$Username": "<p>The user who established the terminated client connections.</p>",
@@ -13134,7 +13139,6 @@
         "TransitGatewayMulticastDomainAssociations$TransitGatewayMulticastDomainId": "<p>The ID of the transit gateway multicast domain.</p>",
         "TransitGatewayMulticastDomainAssociations$TransitGatewayAttachmentId": "<p>The ID of the transit gateway attachment.</p>",
         "TransitGatewayMulticastDomainAssociations$ResourceId": "<p>The ID of the resource.</p>",
-        "TransitGatewayMulticastDomainIdStringList$member": null,
         "TransitGatewayMulticastGroup$GroupIpAddress": "<p>The IP address assigned to the transit gateway multicast group.</p>",
         "TransitGatewayMulticastGroup$TransitGatewayAttachmentId": "<p>The ID of the transit gateway attachment.</p>",
         "TransitGatewayMulticastGroup$SubnetId": "<p>The ID of the subnet.</p>",
@@ -13156,7 +13160,6 @@
         "TransitGatewayRouteTable$TransitGatewayId": "<p>The ID of the transit gateway.</p>",
         "TransitGatewayRouteTableAssociation$TransitGatewayAttachmentId": "<p>The ID of the attachment.</p>",
         "TransitGatewayRouteTableAssociation$ResourceId": "<p>The ID of the resource.</p>",
-        "TransitGatewayRouteTableIdStringList$member": null,
         "TransitGatewayRouteTablePropagation$TransitGatewayAttachmentId": "<p>The ID of the attachment.</p>",
         "TransitGatewayRouteTablePropagation$ResourceId": "<p>The ID of the resource.</p>",
         "TransitGatewayVpcAttachment$TransitGatewayAttachmentId": "<p>The ID of the attachment.</p>",
@@ -13309,10 +13312,12 @@
         "DeleteClientVpnRouteRequest$TargetVpcSubnetId": "<p>The ID of the target subnet used by the route.</p>",
         "DeleteSubnetRequest$SubnetId": "<p>The ID of the subnet.</p>",
         "FleetLaunchTemplateOverridesRequest$SubnetId": "<p>The IDs of the subnets in which to launch the instances. Separate multiple subnet IDs using commas (for example, <code>subnet-1234abcdeexample1, subnet-0987cdef6example2</code>). A request of type <code>instant</code> can have only one subnet ID.</p>",
+        "ImportInstanceLaunchSpecification$SubnetId": "<p>[EC2-VPC] The ID of the subnet in which to launch the instance.</p>",
         "LaunchTemplateInstanceNetworkInterfaceSpecification$SubnetId": "<p>The ID of the subnet for the network interface.</p>",
         "LaunchTemplateInstanceNetworkInterfaceSpecificationRequest$SubnetId": "<p>The ID of the subnet for the network interface.</p>",
         "ModifySubnetAttributeRequest$SubnetId": "<p>The ID of the subnet.</p>",
         "RequestSpotLaunchSpecification$SubnetId": "<p>The IDs of the subnets in which to launch the instance. To specify multiple subnets, separate them using commas; for example, \"subnet-1234abcdeexample1, subnet-0987cdef6example2\".</p>",
+        "RunInstancesRequest$SubnetId": "<p>[EC2-VPC] The ID of the subnet to launch the instance into.</p> <p>If you specify a network interface, you must specify any subnets as part of the network interface.</p>",
         "ScheduledInstancesLaunchSpecification$SubnetId": "<p>The ID of the subnet in which to launch the instances.</p>",
         "ScheduledInstancesNetworkInterface$SubnetId": "<p>The ID of the subnet.</p>",
         "SubnetIdStringList$member": null,
@@ -13506,7 +13511,7 @@
         "CreateVpcEndpointRequest$TagSpecifications": "<p>The tags to associate with the endpoint.</p>",
         "CreateVpcEndpointServiceConfigurationRequest$TagSpecifications": "<p>The tags to associate with the service.</p>",
         "RunInstancesRequest$TagSpecifications": "<p>The tags to apply to the resources during launch. You can only tag instances and volumes on launch. The specified tags are applied to all instances or volumes that are created during launch. To tag a resource after it has been created, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html\">CreateTags</a>.</p>",
-        "SpotFleetRequestConfigData$TagSpecifications": "<p>The key-value pair for tagging the Spot Fleet request on creation. The value for <code>ResourceType</code> must be <code>spot-fleet-request</code>, otherwise the Spot Fleet request fails. To tag instances at launch, specify the tags in the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template\">launch template</a>. For information about tagging after launch, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources\">Tagging Your Resources</a>.</p>"
+        "SpotFleetRequestConfigData$TagSpecifications": "<p>The key-value pair for tagging the Spot Fleet request on creation. The value for <code>ResourceType</code> must be <code>spot-fleet-request</code>, otherwise the Spot Fleet request fails. To tag instances at launch, specify the tags in the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template\">launch template</a> (valid only if you use <code>LaunchTemplateConfigs</code>) or in the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetTagSpecification.html\"> <code>SpotFleetTagSpecification</code> </a> (valid only if you use <code>LaunchSpecifications</code>). For information about tagging after launch, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources\">Tagging Your Resources</a>.</p>"
       }
     },
     "TaggableResourceId": {
@@ -13854,6 +13859,12 @@
         "FlowLog$TrafficType": "<p>The type of traffic captured for the flow log.</p>"
       }
     },
+    "TransitAssociationGatewayId": {
+      "base": null,
+      "refs": {
+        "CreateTransitGatewayPeeringAttachmentRequest$PeerTransitGatewayId": "<p>The ID of the peer transit gateway with which to create the peering attachment.</p>"
+      }
+    },
     "TransitGateway": {
       "base": "<p>Describes a transit gateway.</p>",
       "refs": {
@@ -14061,7 +14072,8 @@
         "GetTransitGatewayMulticastDomainAssociationsRequest$TransitGatewayMulticastDomainId": "<p>The ID of the transit gateway multicast domain.</p>",
         "RegisterTransitGatewayMulticastGroupMembersRequest$TransitGatewayMulticastDomainId": "<p>The ID of the transit gateway multicast domain.</p>",
         "RegisterTransitGatewayMulticastGroupSourcesRequest$TransitGatewayMulticastDomainId": "<p>The ID of the transit gateway multicast domain.</p>",
-        "SearchTransitGatewayMulticastGroupsRequest$TransitGatewayMulticastDomainId": "<p>The ID of the transit gateway multicast domain.</p>"
+        "SearchTransitGatewayMulticastGroupsRequest$TransitGatewayMulticastDomainId": "<p>The ID of the transit gateway multicast domain.</p>",
+        "TransitGatewayMulticastDomainIdStringList$member": null
       }
     },
     "TransitGatewayMulticastDomainIdStringList": {
@@ -14226,7 +14238,8 @@
         "GetTransitGatewayRouteTablePropagationsRequest$TransitGatewayRouteTableId": "<p>The ID of the transit gateway route table.</p>",
         "ReplaceTransitGatewayRouteRequest$TransitGatewayRouteTableId": "<p>The ID of the route table.</p>",
         "SearchTransitGatewayRoutesRequest$TransitGatewayRouteTableId": "<p>The ID of the transit gateway route table.</p>",
-        "TransitGatewayAssociation$TransitGatewayRouteTableId": "<p>The ID of the transit gateway route table.</p>"
+        "TransitGatewayAssociation$TransitGatewayRouteTableId": "<p>The ID of the transit gateway route table.</p>",
+        "TransitGatewayRouteTableIdStringList$member": null
       }
     },
     "TransitGatewayRouteTableIdStringList": {
@@ -14969,6 +14982,7 @@
         "CreateVpcPeeringConnectionRequest$VpcId": "<p>The ID of the requester VPC. You must specify this parameter in the request.</p>",
         "DeleteVpcRequest$VpcId": "<p>The ID of the VPC.</p>",
         "DescribeStaleSecurityGroupsRequest$VpcId": "<p>The ID of the VPC.</p>",
+        "DescribeVpcAttributeRequest$VpcId": "<p>The ID of the VPC.</p>",
         "DetachClassicLinkVpcRequest$VpcId": "<p>The ID of the VPC to which the instance is linked.</p>",
         "DetachInternetGatewayRequest$VpcId": "<p>The ID of the VPC.</p>",
         "DetachVpnGatewayRequest$VpcId": "<p>The ID of the VPC.</p>",
@@ -15097,6 +15111,7 @@
         "ModifyVpnConnectionRequest$VpnConnectionId": "<p>The ID of the VPN connection.</p>",
         "ModifyVpnTunnelCertificateRequest$VpnConnectionId": "<p>The ID of the AWS Site-to-Site VPN connection.</p>",
         "ModifyVpnTunnelOptionsRequest$VpnConnectionId": "<p>The ID of the AWS Site-to-Site VPN connection.</p>",
+        "TerminateClientVpnConnectionsRequest$ConnectionId": "<p>The ID of the client connection to be terminated.</p>",
         "VpnConnectionIdStringList$member": null
       }
     },
diff --git a/models/apis/iotevents/2018-07-27/api-2.json b/models/apis/iotevents/2018-07-27/api-2.json
index 170ea5db7..f48884642 100644
--- a/models/apis/iotevents/2018-07-27/api-2.json
+++ b/models/apis/iotevents/2018-07-27/api-2.json
@@ -904,7 +904,11 @@
         "targetArn":{"shape":"AmazonResourceName"}
       }
     },
-    "Seconds":{"type":"integer"},
+    "Seconds":{
+      "type":"integer",
+      "max":31622400,
+      "min":1
+    },
     "ServiceUnavailableException":{
       "type":"structure",
       "members":{
@@ -916,13 +920,15 @@
     },
     "SetTimerAction":{
       "type":"structure",
-      "required":[
-        "timerName",
-        "seconds"
-      ],
+      "required":["timerName"],
       "members":{
         "timerName":{"shape":"TimerName"},
-        "seconds":{"shape":"Seconds"}
+        "seconds":{
+          "shape":"Seconds",
+          "deprecated":true,
+          "deprecatedMessage":"seconds is deprecated. You can use durationExpression for SetTimerAction. The value of seconds can be used as a string expression for durationExpression."
+        },
+        "durationExpression":{"shape":"VariableValue"}
       }
     },
     "SetVariableAction":{
diff --git a/models/apis/iotevents/2018-07-27/docs-2.json b/models/apis/iotevents/2018-07-27/docs-2.json
index e6164cffc..840281e18 100644
--- a/models/apis/iotevents/2018-07-27/docs-2.json
+++ b/models/apis/iotevents/2018-07-27/docs-2.json
@@ -524,7 +524,7 @@
       }
     },
     "ResetTimerAction": {
-      "base": "<p>Information needed to reset the timer.</p>",
+      "base": "<p>Information required to reset the timer. The timer is reset to the previously evaluated result of the duration. </p>",
       "refs": {
         "Action$resetTimer": "<p>Information needed to reset the timer.</p>"
       }
@@ -553,7 +553,7 @@
     "Seconds": {
       "base": null,
       "refs": {
-        "SetTimerAction$seconds": "<p>The number of seconds until the timer expires. The minimum value is 60 seconds to ensure accuracy. The maximum value is 31622400 seconds. </p>"
+        "SetTimerAction$seconds": "<p>The number of seconds until the timer expires. The minimum value is 60 seconds to ensure accuracy.</p>"
       }
     },
     "ServiceUnavailableException": {
@@ -720,7 +720,7 @@
     "UseBase64": {
       "base": null,
       "refs": {
-        "SqsAction$useBase64": "<p>Set this to TRUE if you want the data to be base-64 encoded before it is written to the queue. Otherwise, set this to FALSE.</p>"
+        "SqsAction$useBase64": "<p>Set this to TRUE if you want the data to be base-64 encoded before it is written to the queue.</p>"
       }
     },
     "VariableName": {
@@ -732,6 +732,7 @@
     "VariableValue": {
       "base": null,
       "refs": {
+        "SetTimerAction$durationExpression": "<p>The duration of the timer, in seconds. You can use a string expression that includes numbers, variables (<code>$variable.&lt;variable-name&gt;</code>), and input values (<code>$input.&lt;input-name&gt;.&lt;path-to-datum&gt;</code>) as the duration. The range of the duration is 1-31622400 seconds. To ensure accuracy, the minimum duration is 60 seconds. The evaluated result of the duration is rounded down to the nearest whole number. </p>",
         "SetVariableAction$value": "<p>The new value of the variable.</p>"
       }
     },
diff --git a/models/apis/marketplacecommerceanalytics/2015-07-01/docs-2.json b/models/apis/marketplacecommerceanalytics/2015-07-01/docs-2.json
index 39846aaea..e33cd41cb 100644
--- a/models/apis/marketplacecommerceanalytics/2015-07-01/docs-2.json
+++ b/models/apis/marketplacecommerceanalytics/2015-07-01/docs-2.json
@@ -16,7 +16,7 @@
     "DataSetPublicationDate": {
       "base": null,
       "refs": {
-        "GenerateDataSetRequest$dataSetPublicationDate": "The date a data set was published. For daily data sets, provide a date with day-level granularity for the desired day. For weekly data sets, provide a date with day-level granularity within the desired week (the day value will be ignored). For monthly data sets, provide a date with month-level granularity for the desired month (the day value will be ignored)."
+        "GenerateDataSetRequest$dataSetPublicationDate": "The date a data set was published. For daily data sets, provide a date with day-level granularity for the desired day. For monthly data sets except those with prefix disbursed_amount, provide a date with month-level granularity for the desired month (the day value will be ignored). For data sets with prefix disbursed_amount, provide a date with day-level granularity for the desired day. For these data sets we will look backwards in time over the range of 31 days until the first data set is found (the latest one)."
       }
     },
     "DataSetRequestId": {
diff --git a/models/apis/serverlessrepo/2017-09-08/api-2.json b/models/apis/serverlessrepo/2017-09-08/api-2.json
index 357133739..136911422 100644
--- a/models/apis/serverlessrepo/2017-09-08/api-2.json
+++ b/models/apis/serverlessrepo/2017-09-08/api-2.json
@@ -306,6 +306,28 @@
         "shape" : "ForbiddenException"
       } ]
     },
+    "UnshareApplication" : {
+      "name" : "UnshareApplication",
+      "http" : {
+        "method" : "POST",
+        "requestUri" : "/applications/{applicationId}/unshare",
+        "responseCode" : 204
+      },
+      "input" : {
+        "shape" : "UnshareApplicationRequest"
+      },
+      "errors" : [ {
+        "shape" : "NotFoundException"
+      }, {
+        "shape" : "TooManyRequestsException"
+      }, {
+        "shape" : "BadRequestException"
+      }, {
+        "shape" : "InternalServerErrorException"
+      }, {
+        "shape" : "ForbiddenException"
+      } ]
+    },
     "UpdateApplication" : {
       "name" : "UpdateApplication",
       "http" : {
@@ -452,6 +474,10 @@
           "shape" : "__listOf__string",
           "locationName" : "actions"
         },
+        "PrincipalOrgIDs" : {
+          "shape" : "__listOf__string",
+          "locationName" : "principalOrgIDs"
+        },
         "Principals" : {
           "shape" : "__listOf__string",
           "locationName" : "principals"
@@ -1542,6 +1568,31 @@
         "httpStatusCode" : 429
       }
     },
+    "UnshareApplicationInput" : {
+      "type" : "structure",
+      "members" : {
+        "OrganizationId" : {
+          "shape" : "__string",
+          "locationName" : "organizationId"
+        }
+      },
+      "required" : [ "OrganizationId" ]
+    },
+    "UnshareApplicationRequest" : {
+      "type" : "structure",
+      "members" : {
+        "ApplicationId" : {
+          "shape" : "__string",
+          "location" : "uri",
+          "locationName" : "applicationId"
+        },
+        "OrganizationId" : {
+          "shape" : "__string",
+          "locationName" : "organizationId"
+        }
+      },
+      "required" : [ "ApplicationId", "OrganizationId" ]
+    },
     "UpdateApplicationInput" : {
       "type" : "structure",
       "members" : {
diff --git a/models/apis/serverlessrepo/2017-09-08/docs-2.json b/models/apis/serverlessrepo/2017-09-08/docs-2.json
index d9860e228..dbadc1498 100644
--- a/models/apis/serverlessrepo/2017-09-08/docs-2.json
+++ b/models/apis/serverlessrepo/2017-09-08/docs-2.json
@@ -14,6 +14,7 @@
     "ListApplicationVersions" : "<p>Lists versions for the specified application.</p>",
     "ListApplications" : "<p>Lists applications owned by the requester.</p>",
     "PutApplicationPolicy" : "<p>Sets the permission policy for an application. For the list of actions supported for this operation, see\n <a href=\"https://docs.aws.amazon.com/serverlessrepo/latest/devguide/access-control-resource-based.html#application-permissions\">Application \n Permissions</a>\n .</p>",
+    "UnshareApplication" : "<p>Unshares an application from an AWS Organization.</p><p>This operation can be called only from the organization's master account.</p>",
     "UpdateApplication" : "<p>Updates the specified application.</p>"
   },
   "shapes" : {
@@ -145,6 +146,10 @@
       "base" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>",
       "refs" : { }
     },
+    "UnshareApplicationInput" : {
+      "base" : "<p>Unshare application request.</p>",
+      "refs" : { }
+    },
     "UpdateApplicationInput" : {
       "base" : "<p>Update the application request.</p>",
       "refs" : { }
@@ -238,6 +243,7 @@
       "refs" : {
         "Application$Labels" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>",
         "ApplicationPolicyStatement$Actions" : "<p>For the list of actions supported for this operation, see <a href=\"https://docs.aws.amazon.com/serverlessrepo/latest/devguide/access-control-resource-based.html#application-permissions\">Application \n Permissions</a>.</p>",
+        "ApplicationPolicyStatement$PrincipalOrgIDs" : "<p>An array of PrinciplalOrgIDs, which corresponds to AWS IAM <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#principal-org-id\">aws:PrincipalOrgID</a> global condition key.</p>",
         "ApplicationPolicyStatement$Principals" : "<p>An array of AWS account IDs, or * to make the application public.</p>",
         "ApplicationSummary$Labels" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>",
         "CreateApplicationInput$Labels" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>",
@@ -334,6 +340,7 @@
         "TemplateDetails$TemplateUrl" : "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>",
         "TooManyRequestsException$ErrorCode" : "<p>429</p>",
         "TooManyRequestsException$Message" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>",
+        "UnshareApplicationInput$OrganizationId" : "<p>The AWS Organization ID to unshare the application from.</p>",
         "UpdateApplicationInput$Author" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>",
         "UpdateApplicationInput$Description" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>",
         "UpdateApplicationInput$HomePageUrl" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>",
diff --git a/service/ec2/api.go b/service/ec2/api.go
index cfcfb3e6c..318a89c53 100644
--- a/service/ec2/api.go
+++ b/service/ec2/api.go
@@ -27359,6 +27359,10 @@ func (c *EC2) ExportTransitGatewayRoutesRequest(input *ExportTransitGatewayRoute
 // S3 bucket. By default, all routes are exported. Alternatively, you can filter
 // by CIDR range.
 //
+// The routes are saved to the specified bucket in a JSON file. For more information,
+// see Export Route Tables to Amazon S3 (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables)
+// in Transit Gateways.
+//
 // Returns awserr.Error for service API and SDK errors. Use runtime type assertions
 // with awserr.Error's Code and Message methods to get detailed information about
 // the error.
@@ -29439,8 +29443,10 @@ func (c *EC2) ModifyAvailabilityZoneGroupRequest(input *ModifyAvailabilityZoneGr
 
 // ModifyAvailabilityZoneGroup API operation for Amazon Elastic Compute Cloud.
 //
-// Enables or disables a Zone Group for your account. To use Local Zones, you
-// must first enable the Zone Group.
+// Enables or disables an Availability Zone group for your account.
+//
+// Use describe-availability-zones (https://docs.aws.amazon.com/AWSEC2ApiDocReef/build/server-root/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html)
+// to view the value for GroupName.
 //
 // Returns awserr.Error for service API and SDK errors. Use runtime type assertions
 // with awserr.Error's Code and Message methods to get detailed information about
@@ -34618,9 +34624,9 @@ func (c *EC2) RequestSpotFleetRequest(input *RequestSpotFleetInput) (req *reques
 // ensuring that the Spot Instances in your Spot Fleet are in different Spot
 // pools, you can improve the availability of your fleet.
 //
-// You can specify tags for the Spot Fleet and Spot Instances. You cannot tag
-// other resource types in a Spot Fleet request because only the spot-fleet-request
-// and instance resource types are supported.
+// You can specify tags for the Spot Fleet request and instances launched by
+// the fleet. You cannot tag other resource types in a Spot Fleet request because
+// only the spot-fleet-request and instance resource types are supported.
 //
 // For more information, see Spot Fleet Requests (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html)
 // in the Amazon EC2 User Guide for Linux Instances.
@@ -36411,9 +36417,10 @@ func (c *EC2) StopInstancesRequest(input *StopInstancesInput) (req *request.Requ
 // your Linux instance, Amazon EC2 charges a one-minute minimum for instance
 // usage, and thereafter charges per second for instance usage.
 //
-// You can't hibernate Spot Instances, and you can't stop or hibernate instance
-// store-backed instances. For information about using hibernation for Spot
-// Instances, see Hibernating Interrupted Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances)
+// You can't stop or hibernate instance store-backed instances. You can't use
+// the Stop action to hibernate Spot Instances, but you can specify that Amazon
+// EC2 should hibernate Spot Instances when they are interrupted. For more information,
+// see Hibernating Interrupted Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances)
 // in the Amazon Elastic Compute Cloud User Guide.
 //
 // When you stop or hibernate an instance, we shut it down. You can restart
@@ -37837,7 +37844,11 @@ type AllocateAddressInput struct {
 	// The location from which the IP address is advertised. Use this parameter
 	// to limit the address to this location.
 	//
-	// Use DescribeVpcs (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
+	// A network border group is a unique set of Availability Zones or Local Zones
+	// from where AWS advertises IP addresses and limits the addresses to the group.
+	// IP addresses cannot move between network border groups.
+	//
+	// Use DescribeAvailabilityZones (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html)
 	// to view the network border groups.
 	//
 	// You cannot use a network border group with EC2 Classic. If you attempt this
@@ -55367,6 +55378,57 @@ type DescribeCapacityReservationsInput struct {
 	DryRun *bool `type:"boolean"`
 
 	// One or more filters.
+	//
+	//    * instance-type - The type of instance for which the Capacity Reservation
+	//    reserves capacity.
+	//
+	//    * owner-id - The ID of the AWS account that owns the Capacity Reservation.
+	//
+	//    * availability-zone-id - The Availability Zone ID of the Capacity Reservation.
+	//
+	//    * instance-platform - The type of operating system for which the Capacity
+	//    Reservation reserves capacity.
+	//
+	//    * availability-zone - The Availability Zone ID of the Capacity Reservation.
+	//
+	//    * tenancy - Indicates the tenancy of the Capacity Reservation. A Capacity
+	//    Reservation can have one of the following tenancy settings: default -
+	//    The Capacity Reservation is created on hardware that is shared with other
+	//    AWS accounts. dedicated - The Capacity Reservation is created on single-tenant
+	//    hardware that is dedicated to a single AWS account.
+	//
+	//    * state - The current state of the Capacity Reservation. A Capacity Reservation
+	//    can be in one of the following states: active- The Capacity Reservation
+	//    is active and the capacity is available for your use. expired - The Capacity
+	//    Reservation expired automatically at the date and time specified in your
+	//    request. The reserved capacity is no longer available for your use. cancelled
+	//    - The Capacity Reservation was manually cancelled. The reserved capacity
+	//    is no longer available for your use. pending - The Capacity Reservation
+	//    request was successful but the capacity provisioning is still pending.
+	//    failed - The Capacity Reservation request has failed. A request might
+	//    fail due to invalid request parameters, capacity constraints, or instance
+	//    limit constraints. Failed requests are retained for 60 minutes.
+	//
+	//    * end-date - The date and time at which the Capacity Reservation expires.
+	//    When a Capacity Reservation expires, the reserved capacity is released
+	//    and you can no longer launch instances into it. The Capacity Reservation's
+	//    state changes to expired when it reaches its end date and time.
+	//
+	//    * end-date-type - Indicates the way in which the Capacity Reservation
+	//    ends. A Capacity Reservation can have one of the following end types:
+	//    unlimited - The Capacity Reservation remains active until you explicitly
+	//    cancel it. limited - The Capacity Reservation expires automatically at
+	//    a specified date and time.
+	//
+	//    * instance-match-criteria - Indicates the type of instance launches that
+	//    the Capacity Reservation accepts. The options include: open - The Capacity
+	//    Reservation accepts all instances that have matching attributes (instance
+	//    type, platform, and Availability Zone). Instances that have matching attributes
+	//    launch into the Capacity Reservation automatically without specifying
+	//    any additional parameters. targeted - The Capacity Reservation only accepts
+	//    instances that have matching attributes (instance type, platform, and
+	//    Availability Zone), and explicitly target the Capacity Reservation. This
+	//    ensures that only permitted instances can use the reserved capacity.
 	Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"`
 
 	// The maximum number of results to return for the request in a single page.
@@ -59821,10 +59883,10 @@ type DescribeInstanceTypesInput struct {
 	//    generation instance type of an instance family. (true | false)
 	//
 	//    * ebs-info.ebs-optimized-support - Indicates whether the instance type
-	//    is EBS-optimized. (true | false)
+	//    is EBS-optimized. (supported | unsupported | default)
 	//
 	//    * ebs-info.encryption-support - Indicates whether EBS encryption is supported.
-	//    (true | false)
+	//    (supported | unsupported)
 	//
 	//    * free-tier-eligible - Indicates whether the instance type is eligible
 	//    to use in the free tier. (true | false)
@@ -60030,7 +60092,8 @@ type DescribeInstancesInput struct {
 	//    * host-id - The ID of the Dedicated Host on which the instance is running,
 	//    if applicable.
 	//
-	//    * hypervisor - The hypervisor type of the instance (ovm | xen).
+	//    * hypervisor - The hypervisor type of the instance (ovm | xen). The value
+	//    xen is used for both Xen and Nitro hypervisors.
 	//
 	//    * iam-instance-profile.arn - The instance profile associated with the
 	//    instance. Specified as an ARN.
@@ -66283,7 +66346,20 @@ type DescribeTransitGatewayPeeringAttachmentsInput struct {
 	// it is UnauthorizedOperation.
 	DryRun *bool `type:"boolean"`
 
-	// One or more filters.
+	// One or more filters. The possible values are:
+	//
+	//    * transit-gateway-attachment-id - The ID of the transit gateway attachment.
+	//
+	//    * local-owner-id - The ID of your AWS account.
+	//
+	//    * remote-owner-id - The ID of the AWS account in the remote Region that
+	//    owns the transit gateway.
+	//
+	//    * state - The state of the peering attachment (available | deleted | deleting
+	//    | failed | modifying | pendingAcceptance | pending | rollingBack | rejected
+	//    | rejecting).
+	//
+	//    * transit-gateway-id - The ID of the transit gateway.
 	Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"`
 
 	// The maximum number of results to return with a single call. To retrieve the
@@ -78989,7 +79065,8 @@ type Instance struct {
 	// Indicates whether the instance is enabled for hibernation.
 	HibernationOptions *HibernationOptions `locationName:"hibernationOptions" type:"structure"`
 
-	// The hypervisor type of the instance.
+	// The hypervisor type of the instance. The value xen is used for both Xen and
+	// Nitro hypervisors.
 	Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"`
 
 	// The IAM instance profile associated with the instance, if applicable.
@@ -84471,13 +84548,14 @@ type ModifyAvailabilityZoneGroupInput struct {
 	// it is UnauthorizedOperation.
 	DryRun *bool `type:"boolean"`
 
-	// The names of the Zone Group.
+	// The name of the Availability Zone Group.
 	//
 	// GroupName is a required field
 	GroupName *string `type:"string" required:"true"`
 
-	// Indicates whether to enable or disable Zone Group membership. The valid values
-	// are opted-in.
+	// Indicates whether to enable or disable membership. The valid values are opted-in.
+	// You must contact AWS Support (https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services)
+	// to disable an Availability Zone group.
 	//
 	// OptInStatus is a required field
 	OptInStatus *string `type:"string" required:"true" enum:"ModifyAvailabilityZoneOptInStatus"`
@@ -97451,7 +97529,10 @@ type RunInstancesInput struct {
 	CapacityReservationSpecification *CapacityReservationSpecification `type:"structure"`
 
 	// Unique, case-sensitive identifier you provide to ensure the idempotency of
-	// the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html).
+	// the request. If you do not specify a client token, a randomly generated token
+	// is used for the request to ensure idempotency.
+	//
+	// For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html).
 	//
 	// Constraints: Maximum 64 ASCII characters
 	ClientToken *string `locationName:"clientToken" type:"string"`
@@ -101174,8 +101255,11 @@ type SpotFleetRequestConfigData struct {
 	// The key-value pair for tagging the Spot Fleet request on creation. The value
 	// for ResourceType must be spot-fleet-request, otherwise the Spot Fleet request
 	// fails. To tag instances at launch, specify the tags in the launch template
-	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template).
-	// For information about tagging after launch, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources).
+	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template)
+	// (valid only if you use LaunchTemplateConfigs) or in the SpotFleetTagSpecification
+	// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetTagSpecification.html)
+	// (valid only if you use LaunchSpecifications). For information about tagging
+	// after launch, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources).
 	TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"`
 
 	// The number of units to request for the Spot Fleet. You can choose to set
@@ -101395,8 +101479,9 @@ func (s *SpotFleetRequestConfigData) SetValidUntil(v time.Time) *SpotFleetReques
 type SpotFleetTagSpecification struct {
 	_ struct{} `type:"structure"`
 
-	// The type of resource. Currently, the only resource types that are supported
-	// are spot-fleet-request and instance.
+	// The type of resource. Currently, the only resource type that is supported
+	// is instance. To tag the Spot Fleet request on creation, use the TagSpecifications
+	// parameter in SpotFleetRequestConfigData (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetRequestConfigData.html).
 	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`
 
 	// The tags.
diff --git a/service/iotevents/api.go b/service/iotevents/api.go
index 5dd9219ab..24481d95d 100644
--- a/service/iotevents/api.go
+++ b/service/iotevents/api.go
@@ -4002,7 +4002,8 @@ func (s PutLoggingOptionsOutput) GoString() string {
 	return s.String()
 }
 
-// Information needed to reset the timer.
+// Information required to reset the timer. The timer is reset to the previously
+// evaluated result of the duration.
 type ResetTimerAction struct {
 	_ struct{} `type:"structure"`
 
@@ -4324,11 +4325,19 @@ func (s ServiceUnavailableException) RequestID() string {
 type SetTimerAction struct {
 	_ struct{} `type:"structure"`
 
+	// The duration of the timer, in seconds. You can use a string expression that
+	// includes numbers, variables ($variable.<variable-name>), and input values
+	// ($input.<input-name>.<path-to-datum>) as the duration. The range of the duration
+	// is 1-31622400 seconds. To ensure accuracy, the minimum duration is 60 seconds.
+	// The evaluated result of the duration is rounded down to the nearest whole
+	// number.
+	DurationExpression *string `locationName:"durationExpression" min:"1" type:"string"`
+
 	// The number of seconds until the timer expires. The minimum value is 60 seconds
-	// to ensure accuracy. The maximum value is 31622400 seconds.
+	// to ensure accuracy.
 	//
-	// Seconds is a required field
-	Seconds *int64 `locationName:"seconds" type:"integer" required:"true"`
+	// Deprecated: seconds is deprecated. You can use durationExpression for SetTimerAction. The value of seconds can be used as a string expression for durationExpression.
+	Seconds *int64 `locationName:"seconds" min:"1" deprecated:"true" type:"integer"`
 
 	// The name of the timer.
 	//
@@ -4349,8 +4358,11 @@ func (s SetTimerAction) GoString() string {
 // Validate inspects the fields of the type to determine if they are valid.
 func (s *SetTimerAction) Validate() error {
 	invalidParams := request.ErrInvalidParams{Context: "SetTimerAction"}
-	if s.Seconds == nil {
-		invalidParams.Add(request.NewErrParamRequired("Seconds"))
+	if s.DurationExpression != nil && len(*s.DurationExpression) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("DurationExpression", 1))
+	}
+	if s.Seconds != nil && *s.Seconds < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("Seconds", 1))
 	}
 	if s.TimerName == nil {
 		invalidParams.Add(request.NewErrParamRequired("TimerName"))
@@ -4365,6 +4377,12 @@ func (s *SetTimerAction) Validate() error {
 	return nil
 }
 
+// SetDurationExpression sets the DurationExpression field's value.
+func (s *SetTimerAction) SetDurationExpression(v string) *SetTimerAction {
+	s.DurationExpression = &v
+	return s
+}
+
 // SetSeconds sets the Seconds field's value.
 func (s *SetTimerAction) SetSeconds(v int64) *SetTimerAction {
 	s.Seconds = &v
@@ -4447,7 +4465,7 @@ type SqsAction struct {
 	QueueUrl *string `locationName:"queueUrl" type:"string" required:"true"`
 
 	// Set this to TRUE if you want the data to be base-64 encoded before it is
-	// written to the queue. Otherwise, set this to FALSE.
+	// written to the queue.
 	UseBase64 *bool `locationName:"useBase64" type:"boolean"`
 }
 
diff --git a/service/marketplacecommerceanalytics/api.go b/service/marketplacecommerceanalytics/api.go
index 9343443ac..1c5cbf803 100644
--- a/service/marketplacecommerceanalytics/api.go
+++ b/service/marketplacecommerceanalytics/api.go
@@ -257,10 +257,12 @@ type GenerateDataSetInput struct {
 	CustomerDefinedValues map[string]*string `locationName:"customerDefinedValues" min:"1" type:"map"`
 
 	// The date a data set was published. For daily data sets, provide a date with
-	// day-level granularity for the desired day. For weekly data sets, provide
-	// a date with day-level granularity within the desired week (the day value
-	// will be ignored). For monthly data sets, provide a date with month-level
-	// granularity for the desired month (the day value will be ignored).
+	// day-level granularity for the desired day. For monthly data sets except those
+	// with prefix disbursed_amount, provide a date with month-level granularity
+	// for the desired month (the day value will be ignored). For data sets with
+	// prefix disbursed_amount, provide a date with day-level granularity for the
+	// desired day. For these data sets we will look backwards in time over the
+	// range of 31 days until the first data set is found (the latest one).
 	//
 	// DataSetPublicationDate is a required field
 	DataSetPublicationDate *time.Time `locationName:"dataSetPublicationDate" type:"timestamp" required:"true"`
diff --git a/service/s3/s3manager/pool.go b/service/s3/s3manager/pool.go
new file mode 100644
index 000000000..05113286d
--- /dev/null
+++ b/service/s3/s3manager/pool.go
@@ -0,0 +1,244 @@
+package s3manager
+
+import (
+	"fmt"
+	"sync"
+
+	"github.com/aws/aws-sdk-go/aws"
+)
+
+type byteSlicePool interface {
+	Get(aws.Context) (*[]byte, error)
+	Put(*[]byte)
+	ModifyCapacity(int)
+	SliceSize() int64
+	Close()
+}
+
+type maxSlicePool struct {
+	// allocator is defined as a function pointer to allow
+	// for test cases to instrument custom tracers when allocations
+	// occur.
+	allocator sliceAllocator
+
+	slices         chan *[]byte
+	allocations    chan struct{}
+	capacityChange chan struct{}
+
+	max       int
+	sliceSize int64
+
+	mtx sync.RWMutex
+}
+
+func newMaxSlicePool(sliceSize int64) *maxSlicePool {
+	p := &maxSlicePool{sliceSize: sliceSize}
+	p.allocator = p.newSlice
+
+	return p
+}
+
+var errZeroCapacity = fmt.Errorf("get called on zero capacity pool")
+
+func (p *maxSlicePool) Get(ctx aws.Context) (*[]byte, error) {
+	// check if context is canceled before attempting to get a slice
+	// this ensures priority is given to the cancel case first
+	select {
+	case <-ctx.Done():
+		return nil, ctx.Err()
+	default:
+	}
+
+	p.mtx.RLock()
+
+	for {
+		select {
+		case bs, ok := <-p.slices:
+			p.mtx.RUnlock()
+			if !ok {
+				// attempt to get on a zero capacity pool
+				return nil, errZeroCapacity
+			}
+			return bs, nil
+		case _, ok := <-p.allocations:
+			p.mtx.RUnlock()
+			if !ok {
+				// attempt to get on a zero capacity pool
+				return nil, errZeroCapacity
+			}
+			return p.allocator(), nil
+		case <-ctx.Done():
+			p.mtx.RUnlock()
+			return nil, ctx.Err()
+		default:
+			// In the event that there are no slices or allocations available
+			// This prevents some deadlock situations that can occur around sync.RWMutex
+			// When a lock request occurs on ModifyCapacity, no new readers are allowed to acquire a read lock.
+			// By releasing the read lock here and waiting for a notification, we prevent a deadlock situation where
+			// Get could hold the read lock indefinitely waiting for capacity, ModifyCapacity is waiting for a write lock,
+			// and a Put is blocked trying to get a read-lock which is blocked by ModifyCapacity.
+
+			// Short-circuit if the pool capacity is zero.
+			if p.max == 0 {
+				p.mtx.RUnlock()
+				return nil, errZeroCapacity
+			}
+
+			// Since we will be releasing the read-lock we need to take the reference to the channel.
+			// Since channels are references we will still get notified if slices are added, or if
+			// the channel is closed due to a capacity modification. This specifically avoids a data race condition
+			// where ModifyCapacity both closes a channel and initializes a new one while we don't have a read-lock.
+			c := p.capacityChange
+
+			p.mtx.RUnlock()
+
+			select {
+			case _ = <-c:
+				p.mtx.RLock()
+			case <-ctx.Done():
+				return nil, ctx.Err()
+			}
+		}
+	}
+}
+
+func (p *maxSlicePool) Put(bs *[]byte) {
+	p.mtx.RLock()
+	defer p.mtx.RUnlock()
+
+	if p.max == 0 {
+		return
+	}
+
+	select {
+	case p.slices <- bs:
+		p.notifyCapacity()
+	default:
+		// If the new channel when attempting to add the slice then we drop the slice.
+		// The logic here is to prevent a deadlock situation if channel is already at max capacity.
+		// Allows us to reap allocations that are returned and are no longer needed.
+	}
+}
+
+func (p *maxSlicePool) ModifyCapacity(delta int) {
+	if delta == 0 {
+		return
+	}
+
+	p.mtx.Lock()
+	defer p.mtx.Unlock()
+
+	p.max += delta
+
+	if p.max == 0 {
+		p.empty()
+		return
+	}
+
+	if p.capacityChange != nil {
+		close(p.capacityChange)
+	}
+	p.capacityChange = make(chan struct{}, p.max)
+
+	origAllocations := p.allocations
+	p.allocations = make(chan struct{}, p.max)
+
+	newAllocs := len(origAllocations) + delta
+	for i := 0; i < newAllocs; i++ {
+		p.allocations <- struct{}{}
+	}
+
+	if origAllocations != nil {
+		close(origAllocations)
+	}
+
+	origSlices := p.slices
+	p.slices = make(chan *[]byte, p.max)
+	if origSlices == nil {
+		return
+	}
+
+	close(origSlices)
+	for bs := range origSlices {
+		select {
+		case p.slices <- bs:
+		default:
+			// If the new channel blocks while adding slices from the old channel
+			// then we drop the slice. The logic here is to prevent a deadlock situation
+			// if the new channel has a smaller capacity then the old.
+		}
+	}
+}
+
+func (p *maxSlicePool) notifyCapacity() {
+	select {
+	case p.capacityChange <- struct{}{}:
+	default:
+		// This *shouldn't* happen as the channel is both buffered to the max pool capacity size and is resized
+		// on capacity modifications. This is just a safety to ensure that a blocking situation can't occur.
+	}
+}
+
+func (p *maxSlicePool) SliceSize() int64 {
+	return p.sliceSize
+}
+
+func (p *maxSlicePool) Close() {
+	p.mtx.Lock()
+	defer p.mtx.Unlock()
+	p.empty()
+}
+
+func (p *maxSlicePool) empty() {
+	p.max = 0
+
+	if p.capacityChange != nil {
+		close(p.capacityChange)
+		p.capacityChange = nil
+	}
+
+	if p.allocations != nil {
+		close(p.allocations)
+		for range p.allocations {
+			// drain channel
+		}
+		p.allocations = nil
+	}
+
+	if p.slices != nil {
+		close(p.slices)
+		for range p.slices {
+			// drain channel
+		}
+		p.slices = nil
+	}
+}
+
+func (p *maxSlicePool) newSlice() *[]byte {
+	bs := make([]byte, p.sliceSize)
+	return &bs
+}
+
+type returnCapacityPoolCloser struct {
+	byteSlicePool
+	returnCapacity int
+}
+
+func (n *returnCapacityPoolCloser) ModifyCapacity(delta int) {
+	if delta > 0 {
+		n.returnCapacity = -1 * delta
+	}
+	n.byteSlicePool.ModifyCapacity(delta)
+}
+
+func (n *returnCapacityPoolCloser) Close() {
+	if n.returnCapacity < 0 {
+		n.byteSlicePool.ModifyCapacity(n.returnCapacity)
+	}
+}
+
+type sliceAllocator func() *[]byte
+
+var newByteSlicePool = func(sliceSize int64) byteSlicePool {
+	return newMaxSlicePool(sliceSize)
+}
diff --git a/service/s3/s3manager/upload.go b/service/s3/s3manager/upload.go
index 5b6199fb4..8ed2975d8 100644
--- a/service/s3/s3manager/upload.go
+++ b/service/s3/s3manager/upload.go
@@ -366,6 +366,7 @@ func (u *uploader) upload() (*UploadOutput, error) {
 	if err := u.init(); err != nil {
 		return nil, awserr.New("ReadRequestBody", "unable to initialize upload", err)
 	}
+	defer u.cfg.partPool.Close()
 
 	if u.cfg.PartSize < MinUploadPartSize {
 		msg := fmt.Sprintf("part size must be at least %d bytes", MinUploadPartSize)
@@ -404,8 +405,13 @@ func (u *uploader) init() error {
 
 	// If PartSize was changed or partPool was never setup then we need to allocated a new pool
 	// so that we return []byte slices of the correct size
-	if u.cfg.partPool == nil || u.cfg.partPool.Size() != u.cfg.PartSize {
+	poolCap := u.cfg.Concurrency + 1
+	if u.cfg.partPool == nil || u.cfg.partPool.SliceSize() != u.cfg.PartSize {
 		u.cfg.partPool = newByteSlicePool(u.cfg.PartSize)
+		u.cfg.partPool.ModifyCapacity(poolCap)
+	} else {
+		u.cfg.partPool = &returnCapacityPoolCloser{byteSlicePool: u.cfg.partPool}
+		u.cfg.partPool.ModifyCapacity(poolCap)
 	}
 
 	return nil
@@ -441,10 +447,6 @@ func (u *uploader) initSize() error {
 // does not need to be wrapped in a mutex because nextReader is only called
 // from the main thread.
 func (u *uploader) nextReader() (io.ReadSeeker, int, func(), error) {
-	type readerAtSeeker interface {
-		io.ReaderAt
-		io.ReadSeeker
-	}
 	switch r := u.in.Body.(type) {
 	case readerAtSeeker:
 		var err error
@@ -476,7 +478,11 @@ func (u *uploader) nextReader() (io.ReadSeeker, int, func(), error) {
 		return reader, int(n), cleanup, err
 
 	default:
-		part := u.cfg.partPool.Get()
+		part, err := u.cfg.partPool.Get(u.ctx)
+		if err != nil {
+			return nil, 0, func() {}, err
+		}
+
 		n, err := readFillBuf(r, *part)
 		u.readerPos += int64(n)
 
@@ -764,40 +770,7 @@ func (u *multiuploader) complete() *s3.CompleteMultipartUploadOutput {
 	return resp
 }
 
-type byteSlicePool interface {
-	Get() *[]byte
-	Put(*[]byte)
-	Size() int64
-}
-
-type partPool struct {
-	partSize int64
-	sync.Pool
-}
-
-func (p *partPool) Get() *[]byte {
-	return p.Pool.Get().(*[]byte)
-}
-
-func (p *partPool) Put(b *[]byte) {
-	p.Pool.Put(b)
-}
-
-func (p *partPool) Size() int64 {
-	return p.partSize
-}
-
-func newPartPool(partSize int64) *partPool {
-	p := &partPool{partSize: partSize}
-
-	p.New = func() interface{} {
-		bs := make([]byte, p.partSize)
-		return &bs
-	}
-
-	return p
-}
-
-var newByteSlicePool = func(partSize int64) byteSlicePool {
-	return newPartPool(partSize)
+type readerAtSeeker interface {
+	io.ReaderAt
+	io.ReadSeeker
 }
diff --git a/service/serverlessapplicationrepository/api.go b/service/serverlessapplicationrepository/api.go
index 32f6c86b8..1bad4cd42 100644
--- a/service/serverlessapplicationrepository/api.go
+++ b/service/serverlessapplicationrepository/api.go
@@ -1310,6 +1310,103 @@ func (c *ServerlessApplicationRepository) PutApplicationPolicyWithContext(ctx aw
 	return out, req.Send()
 }
 
+const opUnshareApplication = "UnshareApplication"
+
+// UnshareApplicationRequest generates a "aws/request.Request" representing the
+// client's request for the UnshareApplication operation. The "output" return
+// value will be populated with the request's response once the request completes
+// successfully.
+//
+// Use "Send" method on the returned Request to send the API call to the service.
+// the "output" return value is not valid until after Send returns without error.
+//
+// See UnshareApplication for more information on using the UnshareApplication
+// API call, and error handling.
+//
+// This method is useful when you want to inject custom logic or configuration
+// into the SDK's request lifecycle. Such as custom headers, or retry logic.
+//
+//
+//    // Example sending a request using the UnshareApplicationRequest method.
+//    req, resp := client.UnshareApplicationRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/serverlessrepo-2017-09-08/UnshareApplication
+func (c *ServerlessApplicationRepository) UnshareApplicationRequest(input *UnshareApplicationInput) (req *request.Request, output *UnshareApplicationOutput) {
+	op := &request.Operation{
+		Name:       opUnshareApplication,
+		HTTPMethod: "POST",
+		HTTPPath:   "/applications/{applicationId}/unshare",
+	}
+
+	if input == nil {
+		input = &UnshareApplicationInput{}
+	}
+
+	output = &UnshareApplicationOutput{}
+	req = c.newRequest(op, input, output)
+	req.Handlers.Unmarshal.Swap(restjson.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
+	return
+}
+
+// UnshareApplication API operation for AWSServerlessApplicationRepository.
+//
+// Unshares an application from an AWS Organization.
+//
+// This operation can be called only from the organization's master account.
+//
+// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
+// with awserr.Error's Code and Message methods to get detailed information about
+// the error.
+//
+// See the AWS API reference guide for AWSServerlessApplicationRepository's
+// API operation UnshareApplication for usage and error information.
+//
+// Returned Error Types:
+//   * NotFoundException
+//   The resource (for example, an access policy statement) specified in the request
+//   doesn't exist.
+//
+//   * TooManyRequestsException
+//   The client is sending more than the allowed number of requests per unit of
+//   time.
+//
+//   * BadRequestException
+//   One of the parameters in the request is invalid.
+//
+//   * InternalServerErrorException
+//   The AWS Serverless Application Repository service encountered an internal
+//   error.
+//
+//   * ForbiddenException
+//   The client is not authenticated.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/serverlessrepo-2017-09-08/UnshareApplication
+func (c *ServerlessApplicationRepository) UnshareApplication(input *UnshareApplicationInput) (*UnshareApplicationOutput, error) {
+	req, out := c.UnshareApplicationRequest(input)
+	return out, req.Send()
+}
+
+// UnshareApplicationWithContext is the same as UnshareApplication with the addition of
+// the ability to pass a context and additional request options.
+//
+// See UnshareApplication for details on how to use this API operation.
+//
+// The context must be non-nil and will be used for request cancellation. If
+// the context is nil a panic will occur. In the future the SDK may create
+// sub-contexts for http.Requests. See https://golang.org/pkg/context/
+// for more information on using Contexts.
+func (c *ServerlessApplicationRepository) UnshareApplicationWithContext(ctx aws.Context, input *UnshareApplicationInput, opts ...request.Option) (*UnshareApplicationOutput, error) {
+	req, out := c.UnshareApplicationRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opUpdateApplication = "UpdateApplication"
 
 // UpdateApplicationRequest generates a "aws/request.Request" representing the
@@ -1454,6 +1551,11 @@ type ApplicationPolicyStatement struct {
 	// Actions is a required field
 	Actions []*string `locationName:"actions" type:"list" required:"true"`
 
+	// An array of PrinciplalOrgIDs, which corresponds to AWS IAM aws:PrincipalOrgID
+	// (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#principal-org-id)
+	// global condition key.
+	PrincipalOrgIDs []*string `locationName:"principalOrgIDs" type:"list"`
+
 	// An array of AWS account IDs, or * to make the application public.
 	//
 	// Principals is a required field
@@ -1495,6 +1597,12 @@ func (s *ApplicationPolicyStatement) SetActions(v []*string) *ApplicationPolicyS
 	return s
 }
 
+// SetPrincipalOrgIDs sets the PrincipalOrgIDs field's value.
+func (s *ApplicationPolicyStatement) SetPrincipalOrgIDs(v []*string) *ApplicationPolicyStatement {
+	s.PrincipalOrgIDs = v
+	return s
+}
+
 // SetPrincipals sets the Principals field's value.
 func (s *ApplicationPolicyStatement) SetPrincipals(v []*string) *ApplicationPolicyStatement {
 	s.Principals = v
@@ -3917,6 +4025,71 @@ func (s TooManyRequestsException) RequestID() string {
 	return s.respMetadata.RequestID
 }
 
+type UnshareApplicationInput struct {
+	_ struct{} `type:"structure"`
+
+	// ApplicationId is a required field
+	ApplicationId *string `location:"uri" locationName:"applicationId" type:"string" required:"true"`
+
+	// OrganizationId is a required field
+	OrganizationId *string `locationName:"organizationId" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s UnshareApplicationInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UnshareApplicationInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *UnshareApplicationInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "UnshareApplicationInput"}
+	if s.ApplicationId == nil {
+		invalidParams.Add(request.NewErrParamRequired("ApplicationId"))
+	}
+	if s.ApplicationId != nil && len(*s.ApplicationId) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("ApplicationId", 1))
+	}
+	if s.OrganizationId == nil {
+		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetApplicationId sets the ApplicationId field's value.
+func (s *UnshareApplicationInput) SetApplicationId(v string) *UnshareApplicationInput {
+	s.ApplicationId = &v
+	return s
+}
+
+// SetOrganizationId sets the OrganizationId field's value.
+func (s *UnshareApplicationInput) SetOrganizationId(v string) *UnshareApplicationInput {
+	s.OrganizationId = &v
+	return s
+}
+
+type UnshareApplicationOutput struct {
+	_ struct{} `type:"structure"`
+}
+
+// String returns the string representation
+func (s UnshareApplicationOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UnshareApplicationOutput) GoString() string {
+	return s.String()
+}
+
 type UpdateApplicationOutput struct {
 	_ struct{} `type:"structure"`
 
diff --git a/service/serverlessapplicationrepository/serverlessapplicationrepositoryiface/interface.go b/service/serverlessapplicationrepository/serverlessapplicationrepositoryiface/interface.go
index 2ec58227e..5daf7845f 100644
--- a/service/serverlessapplicationrepository/serverlessapplicationrepositoryiface/interface.go
+++ b/service/serverlessapplicationrepository/serverlessapplicationrepositoryiface/interface.go
@@ -117,6 +117,10 @@ type ServerlessApplicationRepositoryAPI interface {
 	PutApplicationPolicyWithContext(aws.Context, *serverlessapplicationrepository.PutApplicationPolicyInput, ...request.Option) (*serverlessapplicationrepository.PutApplicationPolicyOutput, error)
 	PutApplicationPolicyRequest(*serverlessapplicationrepository.PutApplicationPolicyInput) (*request.Request, *serverlessapplicationrepository.PutApplicationPolicyOutput)
 
+	UnshareApplication(*serverlessapplicationrepository.UnshareApplicationInput) (*serverlessapplicationrepository.UnshareApplicationOutput, error)
+	UnshareApplicationWithContext(aws.Context, *serverlessapplicationrepository.UnshareApplicationInput, ...request.Option) (*serverlessapplicationrepository.UnshareApplicationOutput, error)
+	UnshareApplicationRequest(*serverlessapplicationrepository.UnshareApplicationInput) (*request.Request, *serverlessapplicationrepository.UnshareApplicationOutput)
+
 	UpdateApplication(*serverlessapplicationrepository.UpdateApplicationRequest) (*serverlessapplicationrepository.UpdateApplicationOutput, error)
 	UpdateApplicationWithContext(aws.Context, *serverlessapplicationrepository.UpdateApplicationRequest, ...request.Option) (*serverlessapplicationrepository.UpdateApplicationOutput, error)
 	UpdateApplicationRequest(*serverlessapplicationrepository.UpdateApplicationRequest) (*request.Request, *serverlessapplicationrepository.UpdateApplicationOutput)


Test patch:
diff --git a/aws/session/credentials_test.go b/aws/session/credentials_test.go
index f0a636d14..703d9fa2c 100644
--- a/aws/session/credentials_test.go
+++ b/aws/session/credentials_test.go
@@ -476,50 +476,84 @@ func TestSessionAssumeRole_ExtendedDuration(t *testing.T) {
 	restoreEnvFn := initSessionTestEnv()
 	defer restoreEnvFn()
 
-	os.Setenv("AWS_REGION", "us-east-1")
-	os.Setenv("AWS_SDK_LOAD_CONFIG", "1")
-	os.Setenv("AWS_SHARED_CREDENTIALS_FILE", testConfigFilename)
-	os.Setenv("AWS_PROFILE", "assume_role_w_creds")
+	cases := []struct {
+		profile          string
+		optionDuration   time.Duration
+		expectedDuration string
+	}{
+		{
+			profile:          "assume_role_w_creds",
+			expectedDuration: "900",
+		},
+		{
+			profile:          "assume_role_w_creds",
+			optionDuration:   30 * time.Minute,
+			expectedDuration: "1800",
+		},
+		{
+			profile:          "assume_role_w_creds_w_duration",
+			expectedDuration: "1800",
+		},
+		{
+			profile:          "assume_role_w_creds_w_invalid_duration",
+			expectedDuration: "900",
+		},
+	}
 
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		if e, a := "1800", r.FormValue("DurationSeconds"); e != a {
-			t.Errorf("expect %v, got %v", e, a)
+	for _, tt := range cases {
+		server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+			if e, a := tt.expectedDuration, r.FormValue("DurationSeconds"); e != a {
+				t.Errorf("expect %v, got %v", e, a)
+			}
+
+			w.Write([]byte(fmt.Sprintf(
+				assumeRoleRespMsg,
+				time.Now().Add(15*time.Minute).Format("2006-01-02T15:04:05Z"))))
+		}))
+
+		os.Setenv("AWS_REGION", "us-east-1")
+		os.Setenv("AWS_SDK_LOAD_CONFIG", "1")
+		os.Setenv("AWS_SHARED_CREDENTIALS_FILE", testConfigFilename)
+		os.Setenv("AWS_PROFILE", "assume_role_w_creds")
+
+		opts := Options{
+			Profile: tt.profile,
+			Config: aws.Config{
+				Endpoint:   aws.String(server.URL),
+				DisableSSL: aws.Bool(true),
+			},
+			SharedConfigState: SharedConfigEnable,
+		}
+		if tt.optionDuration != 0 {
+			opts.AssumeRoleDuration = tt.optionDuration
 		}
 
-		w.Write([]byte(fmt.Sprintf(
-			assumeRoleRespMsg,
-			time.Now().Add(15*time.Minute).Format("2006-01-02T15:04:05Z"))))
-	}))
-	defer server.Close()
+		s, err := NewSessionWithOptions(opts)
+		if err != nil {
+			server.Close()
+			t.Fatalf("expect no error, got %v", err)
+		}
 
-	s, err := NewSessionWithOptions(Options{
-		Profile: "assume_role_w_creds",
-		Config: aws.Config{
-			Endpoint:   aws.String(server.URL),
-			DisableSSL: aws.Bool(true),
-		},
-		SharedConfigState:  SharedConfigEnable,
-		AssumeRoleDuration: 30 * time.Minute,
-	})
-	if err != nil {
-		t.Fatalf("expect no error, got %v", err)
-	}
+		creds, err := s.Config.Credentials.Get()
+		if err != nil {
+			server.Close()
+			t.Fatalf("expect no error, got %v", err)
+		}
 
-	creds, err := s.Config.Credentials.Get()
-	if err != nil {
-		t.Fatalf("expect no error, got %v", err)
-	}
-	if e, a := "AKID", creds.AccessKeyID; e != a {
-		t.Errorf("expect %v, got %v", e, a)
-	}
-	if e, a := "SECRET", creds.SecretAccessKey; e != a {
-		t.Errorf("expect %v, got %v", e, a)
-	}
-	if e, a := "SESSION_TOKEN", creds.SessionToken; e != a {
-		t.Errorf("expect %v, got %v", e, a)
-	}
-	if e, a := "AssumeRoleProvider", creds.ProviderName; !strings.Contains(a, e) {
-		t.Errorf("expect %v, to be in %v", e, a)
+		if e, a := "AKID", creds.AccessKeyID; e != a {
+			t.Errorf("expect %v, got %v", e, a)
+		}
+		if e, a := "SECRET", creds.SecretAccessKey; e != a {
+			t.Errorf("expect %v, got %v", e, a)
+		}
+		if e, a := "SESSION_TOKEN", creds.SessionToken; e != a {
+			t.Errorf("expect %v, got %v", e, a)
+		}
+		if e, a := "AssumeRoleProvider", creds.ProviderName; !strings.Contains(a, e) {
+			t.Errorf("expect %v, to be in %v", e, a)
+		}
+
+		server.Close()
 	}
 }
 
diff --git a/aws/session/testdata/shared_config b/aws/session/testdata/shared_config
index df1cb27da..d2502d2e8 100644
--- a/aws/session/testdata/shared_config
+++ b/aws/session/testdata/shared_config
@@ -60,6 +60,24 @@ role_session_name = assume_role_w_creds_session_name
 aws_access_key_id = assume_role_w_creds_akid
 aws_secret_access_key = assume_role_w_creds_secret
 
+[assume_role_w_creds_w_duration]
+role_arn = assume_role_w_creds_role_arn
+source_profile = assume_role_w_creds_w_duration
+duration_seconds = 1800
+external_id = 1234
+role_session_name = assume_role_w_creds_session_name
+aws_access_key_id = assume_role_w_creds_akid
+aws_secret_access_key = assume_role_w_creds_secret
+
+[assume_role_w_creds_w_invalid_duration]
+role_arn = assume_role_w_creds_role_arn
+source_profile = assume_role_w_creds_w_invalid_duration
+duration_seconds = 600
+external_id = 1234
+role_session_name = assume_role_w_creds_session_name
+aws_access_key_id = assume_role_w_creds_akid
+aws_secret_access_key = assume_role_w_creds_secret
+
 [assume_role_wo_creds]
 role_arn = assume_role_wo_creds_role_arn
 source_profile = assume_role_wo_creds
diff --git a/service/s3/s3manager/pool_test.go b/service/s3/s3manager/pool_test.go
new file mode 100644
index 000000000..55de684f6
--- /dev/null
+++ b/service/s3/s3manager/pool_test.go
@@ -0,0 +1,174 @@
+// +build go1.7
+
+package s3manager
+
+import (
+	"context"
+	"sync"
+	"sync/atomic"
+	"testing"
+
+	"github.com/aws/aws-sdk-go/aws"
+)
+
+func TestMaxSlicePool(t *testing.T) {
+	pool := newMaxSlicePool(0)
+
+	var wg sync.WaitGroup
+	for i := 0; i < 100; i++ {
+		wg.Add(1)
+		go func() {
+			defer wg.Done()
+
+			// increase pool capacity by 2
+			pool.ModifyCapacity(2)
+
+			// remove 2 items
+			bsOne, err := pool.Get(context.Background())
+			if err != nil {
+				t.Errorf("failed to get slice from pool: %v", err)
+			}
+			bsTwo, err := pool.Get(context.Background())
+			if err != nil {
+				t.Errorf("failed to get slice from pool: %v", err)
+			}
+
+			done := make(chan struct{})
+			go func() {
+				defer close(done)
+
+				// attempt to remove a 3rd in parallel
+				bs, err := pool.Get(context.Background())
+				if err != nil {
+					t.Errorf("failed to get slice from pool: %v", err)
+				}
+				pool.Put(bs)
+
+				// attempt to remove a 4th that has been canceled
+				ctx, cancel := context.WithCancel(context.Background())
+				cancel()
+				bs, err = pool.Get(ctx)
+				if err == nil {
+					pool.Put(bs)
+					t.Errorf("expected no slice to be returned")
+					return
+				}
+			}()
+
+			pool.Put(bsOne)
+
+			<-done
+
+			pool.ModifyCapacity(-1)
+
+			pool.Put(bsTwo)
+
+			pool.ModifyCapacity(-1)
+
+			// any excess returns should drop
+			rando := make([]byte, 0)
+			pool.Put(&rando)
+		}()
+	}
+	wg.Wait()
+
+	if e, a := 0, len(pool.slices); e != a {
+		t.Errorf("expected %v, got %v", e, a)
+	}
+	if e, a := 0, len(pool.allocations); e != a {
+		t.Errorf("expected %v, got %v", e, a)
+	}
+	if e, a := 0, pool.max; e != a {
+		t.Errorf("expected %v, got %v", e, a)
+	}
+
+	_, err := pool.Get(context.Background())
+	if err == nil {
+		t.Errorf("expected error on zero capacity pool")
+	}
+
+	pool.Close()
+}
+
+type recordedPartPool struct {
+	recordedAllocs      uint64
+	recordedGets        uint64
+	recordedOutstanding int64
+	*maxSlicePool
+}
+
+func newRecordedPartPool(sliceSize int64) *recordedPartPool {
+	sp := newMaxSlicePool(sliceSize)
+
+	rp := &recordedPartPool{}
+
+	allocator := sp.allocator
+	sp.allocator = func() *[]byte {
+		atomic.AddUint64(&rp.recordedAllocs, 1)
+		return allocator()
+	}
+
+	rp.maxSlicePool = sp
+
+	return rp
+}
+
+func (r *recordedPartPool) Get(ctx aws.Context) (*[]byte, error) {
+	atomic.AddUint64(&r.recordedGets, 1)
+	atomic.AddInt64(&r.recordedOutstanding, 1)
+	return r.maxSlicePool.Get(ctx)
+}
+
+func (r *recordedPartPool) Put(b *[]byte) {
+	atomic.AddInt64(&r.recordedOutstanding, -1)
+	r.maxSlicePool.Put(b)
+}
+
+func swapByteSlicePool(f func(sliceSize int64) byteSlicePool) func() {
+	orig := newByteSlicePool
+
+	newByteSlicePool = f
+
+	return func() {
+		newByteSlicePool = orig
+	}
+}
+
+type syncSlicePool struct {
+	sync.Pool
+	sliceSize int64
+}
+
+func newSyncSlicePool(sliceSize int64) *syncSlicePool {
+	p := &syncSlicePool{sliceSize: sliceSize}
+	p.New = func() interface{} {
+		bs := make([]byte, p.sliceSize)
+		return &bs
+	}
+	return p
+}
+
+func (s *syncSlicePool) Get(ctx aws.Context) (*[]byte, error) {
+	select {
+	case <-ctx.Done():
+		return nil, ctx.Err()
+	default:
+		return s.Pool.Get().(*[]byte), nil
+	}
+}
+
+func (s *syncSlicePool) Put(bs *[]byte) {
+	s.Pool.Put(bs)
+}
+
+func (s *syncSlicePool) ModifyCapacity(_ int) {
+	return
+}
+
+func (s *syncSlicePool) SliceSize() int64 {
+	return s.sliceSize
+}
+
+func (s *syncSlicePool) Close() {
+	return
+}
diff --git a/service/s3/s3manager/upload_internal_test.go b/service/s3/s3manager/upload_internal_test.go
index 687059c60..502df232c 100644
--- a/service/s3/s3manager/upload_internal_test.go
+++ b/service/s3/s3manager/upload_internal_test.go
@@ -9,6 +9,7 @@ import (
 	"io/ioutil"
 	random "math/rand"
 	"net/http"
+	"strconv"
 	"sync"
 	"sync/atomic"
 	"testing"
@@ -21,49 +22,6 @@ import (
 	"github.com/aws/aws-sdk-go/service/s3/internal/s3testing"
 )
 
-type recordedPartPool struct {
-	allocations uint64
-	gets        uint64
-	outstanding int64
-	*partPool
-}
-
-func newRecordedPartPool(partSize int64) *recordedPartPool {
-	rp := &recordedPartPool{}
-	pp := newPartPool(partSize)
-
-	n := pp.New
-	pp.New = func() interface{} {
-		atomic.AddUint64(&rp.allocations, 1)
-		return n()
-	}
-
-	rp.partPool = pp
-
-	return rp
-}
-
-func (r *recordedPartPool) Get() *[]byte {
-	atomic.AddUint64(&r.gets, 1)
-	atomic.AddInt64(&r.outstanding, 1)
-	return r.partPool.Get()
-}
-
-func (r *recordedPartPool) Put(b *[]byte) {
-	atomic.AddInt64(&r.outstanding, -1)
-	r.partPool.Put(b)
-}
-
-func swapByteSlicePool(f func(partSize int64) byteSlicePool) func() {
-	orig := newByteSlicePool
-
-	newByteSlicePool = f
-
-	return func() {
-		newByteSlicePool = orig
-	}
-}
-
 type testReader struct {
 	br *bytes.Reader
 	m  sync.Mutex
@@ -77,16 +35,28 @@ func (r *testReader) Read(p []byte) (n int, err error) {
 
 func TestUploadByteSlicePool(t *testing.T) {
 	cases := map[string]struct {
-		PartSize int64
-		FileSize int64
+		PartSize      int64
+		FileSize      int64
+		Concurrency   int
+		ExAllocations uint64
 	}{
-		"single part": {
-			PartSize: sdkio.MebiByte * 5,
-			FileSize: sdkio.MebiByte * 5,
+		"single part, single concurrency": {
+			PartSize:      sdkio.MebiByte * 5,
+			FileSize:      sdkio.MebiByte * 5,
+			ExAllocations: 2,
+			Concurrency:   1,
 		},
-		"multi-part": {
-			PartSize: sdkio.MebiByte * 5,
-			FileSize: sdkio.MebiByte * 10,
+		"multi-part, single concurrency": {
+			PartSize:      sdkio.MebiByte * 5,
+			FileSize:      sdkio.MebiByte * 10,
+			ExAllocations: 2,
+			Concurrency:   1,
+		},
+		"multi-part, multiple concurrency": {
+			PartSize:      sdkio.MebiByte * 5,
+			FileSize:      sdkio.MebiByte * 20,
+			ExAllocations: 3,
+			Concurrency:   2,
 		},
 	}
 
@@ -94,8 +64,8 @@ func TestUploadByteSlicePool(t *testing.T) {
 		t.Run(name, func(t *testing.T) {
 			var p *recordedPartPool
 
-			unswap := swapByteSlicePool(func(partSize int64) byteSlicePool {
-				p = newRecordedPartPool(partSize)
+			unswap := swapByteSlicePool(func(sliceSize int64) byteSlicePool {
+				p = newRecordedPartPool(sliceSize)
 				return p
 			})
 			defer unswap()
@@ -131,7 +101,7 @@ func TestUploadByteSlicePool(t *testing.T) {
 
 			uploader := NewUploaderWithClient(svc, func(u *Uploader) {
 				u.PartSize = tt.PartSize
-				u.Concurrency = 50
+				u.Concurrency = tt.Concurrency
 			})
 
 			expected := s3testing.GetTestBytes(int(tt.FileSize))
@@ -144,13 +114,16 @@ func TestUploadByteSlicePool(t *testing.T) {
 				t.Errorf("expected no error, but got %v", err)
 			}
 
-			if v := atomic.LoadInt64(&p.outstanding); v != 0 {
+			if v := atomic.LoadInt64(&p.recordedOutstanding); v != 0 {
 				t.Fatalf("expected zero outsnatding pool parts, got %d", v)
 			}
 
-			gets, allocs := atomic.LoadUint64(&p.gets), atomic.LoadUint64(&p.allocations)
+			gets, allocs := atomic.LoadUint64(&p.recordedGets), atomic.LoadUint64(&p.recordedAllocs)
 
 			t.Logf("total gets %v, total allocations %v", gets, allocs)
+			if e, a := tt.ExAllocations, allocs; a > e {
+				t.Errorf("expected %v allocations, got %v", e, a)
+			}
 		})
 	}
 }
@@ -185,8 +158,8 @@ func TestUploadByteSlicePool_Failures(t *testing.T) {
 				t.Run(operation, func(t *testing.T) {
 					var p *recordedPartPool
 
-					unswap := swapByteSlicePool(func(partSize int64) byteSlicePool {
-						p = newRecordedPartPool(partSize)
+					unswap := swapByteSlicePool(func(sliceSize int64) byteSlicePool {
+						p = newRecordedPartPool(sliceSize)
 						return p
 					})
 					defer unswap()
@@ -245,7 +218,7 @@ func TestUploadByteSlicePool_Failures(t *testing.T) {
 						t.Fatalf("expected error but got none")
 					}
 
-					if v := atomic.LoadInt64(&p.outstanding); v != 0 {
+					if v := atomic.LoadInt64(&p.recordedOutstanding); v != 0 {
 						t.Fatalf("expected zero outsnatding pool parts, got %d", v)
 					}
 				})
@@ -253,3 +226,194 @@ func TestUploadByteSlicePool_Failures(t *testing.T) {
 		})
 	}
 }
+
+func TestUploadByteSlicePoolConcurrentMultiPartSize(t *testing.T) {
+	var (
+		pools []*recordedPartPool
+		mtx   sync.Mutex
+	)
+
+	unswap := swapByteSlicePool(func(sliceSize int64) byteSlicePool {
+		mtx.Lock()
+		defer mtx.Unlock()
+		b := newRecordedPartPool(sliceSize)
+		pools = append(pools, b)
+		return b
+	})
+	defer unswap()
+
+	sess := unit.Session.Copy()
+	svc := s3.New(sess)
+	svc.Handlers.Unmarshal.Clear()
+	svc.Handlers.UnmarshalMeta.Clear()
+	svc.Handlers.UnmarshalError.Clear()
+	svc.Handlers.Send.Clear()
+	svc.Handlers.Send.PushFront(func(r *request.Request) {
+		if r.Body != nil {
+			io.Copy(ioutil.Discard, r.Body)
+		}
+
+		r.HTTPResponse = &http.Response{
+			StatusCode: 200,
+			Body:       ioutil.NopCloser(bytes.NewReader([]byte{})),
+		}
+
+		switch data := r.Data.(type) {
+		case *s3.CreateMultipartUploadOutput:
+			data.UploadId = aws.String("UPLOAD-ID")
+		case *s3.UploadPartOutput:
+			data.ETag = aws.String(fmt.Sprintf("ETAG%d", random.Int()))
+		case *s3.CompleteMultipartUploadOutput:
+			data.Location = aws.String("https://location")
+			data.VersionId = aws.String("VERSION-ID")
+		case *s3.PutObjectOutput:
+			data.VersionId = aws.String("VERSION-ID")
+		}
+	})
+
+	uploader := NewUploaderWithClient(svc, func(u *Uploader) {
+		u.PartSize = 5 * sdkio.MebiByte
+		u.Concurrency = 2
+	})
+
+	var wg sync.WaitGroup
+	for i := 0; i < 2; i++ {
+		wg.Add(2)
+		go func() {
+			defer wg.Done()
+			expected := s3testing.GetTestBytes(int(15 * sdkio.MebiByte))
+			_, err := uploader.Upload(&UploadInput{
+				Bucket: aws.String("bucket"),
+				Key:    aws.String("key"),
+				Body:   &testReader{br: bytes.NewReader(expected)},
+			})
+			if err != nil {
+				t.Errorf("expected no error, but got %v", err)
+			}
+		}()
+		go func() {
+			defer wg.Done()
+			expected := s3testing.GetTestBytes(int(15 * sdkio.MebiByte))
+			_, err := uploader.Upload(&UploadInput{
+				Bucket: aws.String("bucket"),
+				Key:    aws.String("key"),
+				Body:   &testReader{br: bytes.NewReader(expected)},
+			}, func(u *Uploader) {
+				u.PartSize = 6 * sdkio.MebiByte
+			})
+			if err != nil {
+				t.Errorf("expected no error, but got %v", err)
+			}
+		}()
+	}
+
+	wg.Wait()
+
+	if e, a := 3, len(pools); e != a {
+		t.Errorf("expected %v, got %v", e, a)
+	}
+
+	for _, p := range pools {
+		if v := atomic.LoadInt64(&p.recordedOutstanding); v != 0 {
+			t.Fatalf("expected zero outsnatding pool parts, got %d", v)
+		}
+
+		t.Logf("total gets %v, total allocations %v",
+			atomic.LoadUint64(&p.recordedGets),
+			atomic.LoadUint64(&p.recordedAllocs))
+	}
+}
+
+func BenchmarkPools(b *testing.B) {
+	cases := []struct {
+		PartSize      int64
+		FileSize      int64
+		Concurrency   int
+		ExAllocations uint64
+	}{
+		0: {
+			PartSize:    sdkio.MebiByte * 5,
+			FileSize:    sdkio.MebiByte * 5,
+			Concurrency: 1,
+		},
+		1: {
+			PartSize:    sdkio.MebiByte * 5,
+			FileSize:    sdkio.MebiByte * 10,
+			Concurrency: 1,
+		},
+		2: {
+			PartSize:    sdkio.MebiByte * 5,
+			FileSize:    sdkio.MebiByte * 20,
+			Concurrency: 2,
+		},
+		3: {
+			PartSize:    sdkio.MebiByte * 5,
+			FileSize:    sdkio.MebiByte * 250,
+			Concurrency: 10,
+		},
+	}
+
+	sess := unit.Session.Copy()
+	svc := s3.New(sess)
+	svc.Handlers.Unmarshal.Clear()
+	svc.Handlers.UnmarshalMeta.Clear()
+	svc.Handlers.UnmarshalError.Clear()
+	svc.Handlers.Send.Clear()
+	svc.Handlers.Send.PushFront(func(r *request.Request) {
+		if r.Body != nil {
+			io.Copy(ioutil.Discard, r.Body)
+		}
+
+		r.HTTPResponse = &http.Response{
+			StatusCode: 200,
+			Body:       ioutil.NopCloser(bytes.NewReader([]byte{})),
+		}
+
+		switch data := r.Data.(type) {
+		case *s3.CreateMultipartUploadOutput:
+			data.UploadId = aws.String("UPLOAD-ID")
+		case *s3.UploadPartOutput:
+			data.ETag = aws.String(fmt.Sprintf("ETAG%d", random.Int()))
+		case *s3.CompleteMultipartUploadOutput:
+			data.Location = aws.String("https://location")
+			data.VersionId = aws.String("VERSION-ID")
+		case *s3.PutObjectOutput:
+			data.VersionId = aws.String("VERSION-ID")
+		}
+	})
+
+	pools := map[string]func(sliceSize int64) byteSlicePool{
+		"sync.Pool": func(sliceSize int64) byteSlicePool {
+			return newSyncSlicePool(sliceSize)
+		},
+		"custom": func(sliceSize int64) byteSlicePool {
+			return newMaxSlicePool(sliceSize)
+		},
+	}
+
+	for name, poolFunc := range pools {
+		b.Run(name, func(b *testing.B) {
+			unswap := swapByteSlicePool(poolFunc)
+			defer unswap()
+			for i, c := range cases {
+				b.Run(strconv.Itoa(i), func(b *testing.B) {
+					uploader := NewUploaderWithClient(svc, func(u *Uploader) {
+						u.PartSize = c.PartSize
+						u.Concurrency = c.Concurrency
+					})
+
+					expected := s3testing.GetTestBytes(int(c.FileSize))
+					b.ResetTimer()
+					_, err := uploader.Upload(&UploadInput{
+						Bucket: aws.String("bucket"),
+						Key:    aws.String("key"),
+						Body:   &testReader{br: bytes.NewReader(expected)},
+					})
+					if err != nil {
+						b.Fatalf("expected no error, but got %v", err)
+					}
+				})
+			}
+		})
+	}
+}